From 4e6e8b7bf1c4a60c6d2f630367862a8645ccbf0c Mon Sep 17 00:00:00 2001 From: cx384 Date: Thu, 10 Oct 2024 20:25:02 +0200 Subject: [PATCH 001/178] Fix hotbar alignment with hud_hotbar_max_width --- src/client/hud.cpp | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/src/client/hud.cpp b/src/client/hud.cpp index 2a1acb288..3f3984d48 100644 --- a/src/client/hud.cpp +++ b/src/client/hud.cpp @@ -816,8 +816,6 @@ void Hud::drawHotbar(const v2s32 &pos, const v2f &offset, u16 dir, const v2f &al u16 playeritem = player->getWieldIndex(); v2s32 screen_offset(offset.X, offset.Y); - v2s32 centerlowerpos(m_displaycenter.X, m_screensize.Y); - s32 hotbar_itemcount = player->getMaxHotbarItemcount(); s32 width = hotbar_itemcount * (m_hotbar_imagesize + m_padding * 2); @@ -827,15 +825,11 @@ void Hud::drawHotbar(const v2s32 &pos, const v2f &offset, u16 dir, const v2f &al drawItems(pos, screen_offset, hotbar_itemcount, align, 0, mainlist, playeritem + 1, dir, true); } else { - v2s32 firstpos = pos; - firstpos.X += width/4; + v2s32 upper_pos = pos - v2s32(0, m_hotbar_imagesize + m_padding); - v2s32 secondpos = firstpos; - firstpos = firstpos - v2s32(0, m_hotbar_imagesize + m_padding); - - drawItems(firstpos, screen_offset, hotbar_itemcount / 2, align, 0, + drawItems(upper_pos, screen_offset, hotbar_itemcount / 2, align, 0, mainlist, playeritem + 1, dir, true); - drawItems(secondpos, screen_offset, hotbar_itemcount, align, + drawItems(pos, screen_offset, hotbar_itemcount, align, hotbar_itemcount / 2, mainlist, playeritem + 1, dir, true); } } From 2188adc0f99e1fab8806eb62e9526ecbcd74bf15 Mon Sep 17 00:00:00 2001 From: paradust7 <102263465+paradust7@users.noreply.github.com> Date: Sat, 12 Oct 2024 13:34:24 -0700 Subject: [PATCH 002/178] Ensure that null C strings do not break logging (#15255) --- src/client/game.cpp | 42 ++++++++++++++-- src/log.cpp | 47 ++++-------------- src/log.h | 43 ++++++++++++++++- src/log_internal.h | 75 +++++++++++++++++------------ src/unittest/CMakeLists.txt | 1 + src/unittest/test_logging.cpp | 90 +++++++++++++++++++++++++++++++++++ 6 files changed, 225 insertions(+), 73 deletions(-) create mode 100644 src/unittest/test_logging.cpp diff --git a/src/client/game.cpp b/src/client/game.cpp index 32c57ec1b..1a125f492 100644 --- a/src/client/game.cpp +++ b/src/client/game.cpp @@ -882,7 +882,7 @@ private: SoundMaker *soundmaker = nullptr; ChatBackend *chat_backend = nullptr; - LogOutputBuffer m_chat_log_buf; + CaptureLogOutput m_chat_log_buf; EventManager *eventmgr = nullptr; QuicktuneShortcutter *quicktune = nullptr; @@ -930,6 +930,7 @@ private: * (as opposed to the this local caching). This can be addressed in * a later release. */ + bool m_cache_disable_escape_sequences; bool m_cache_doubletap_jump; bool m_cache_enable_clouds; bool m_cache_enable_joysticks; @@ -973,6 +974,10 @@ Game::Game() : m_chat_log_buf(g_logger), m_game_ui(new GameUI()) { + g_settings->registerChangedCallback("chat_log_level", + &settingChangedCallback, this); + g_settings->registerChangedCallback("disable_escape_sequences", + &settingChangedCallback, this); g_settings->registerChangedCallback("doubletap_jump", &settingChangedCallback, this); g_settings->registerChangedCallback("enable_clouds", @@ -1041,6 +1046,10 @@ Game::~Game() clearTextureNameCache(); + g_settings->deregisterChangedCallback("chat_log_level", + &settingChangedCallback, this); + g_settings->deregisterChangedCallback("disable_escape_sequences", + &settingChangedCallback, this); g_settings->deregisterChangedCallback("doubletap_jump", &settingChangedCallback, this); g_settings->deregisterChangedCallback("enable_clouds", @@ -1277,7 +1286,6 @@ void Game::shutdown() chat_backend->addMessage(L"", L"# Disconnected."); chat_backend->addMessage(L"", L""); - m_chat_log_buf.clear(); if (client) { client->Stop(); @@ -3208,9 +3216,27 @@ void Game::processClientEvents(CameraOrientation *cam) void Game::updateChat(f32 dtime) { + auto color_for = [](LogLevel level) -> const char* { + switch (level) { + case LL_ERROR : return "\x1b(c@#F00)"; // red + case LL_WARNING: return "\x1b(c@#EE0)"; // yellow + case LL_INFO : return "\x1b(c@#BBB)"; // grey + case LL_VERBOSE: return "\x1b(c@#888)"; // dark grey + case LL_TRACE : return "\x1b(c@#888)"; // dark grey + default : return ""; + } + }; + // Get new messages from error log buffer - while (!m_chat_log_buf.empty()) - chat_backend->addMessage(L"", utf8_to_wide(m_chat_log_buf.get())); + std::vector entries = m_chat_log_buf.take(); + for (const auto& entry : entries) { + std::string line; + if (!m_cache_disable_escape_sequences) { + line.append(color_for(entry.level)); + } + line.append(entry.combined); + chat_backend->addMessage(L"", utf8_to_wide(line)); + } // Get new messages from client std::wstring message; @@ -4433,6 +4459,14 @@ void Game::settingChangedCallback(const std::string &setting_name, void *data) void Game::readSettings() { + LogLevel chat_log_level = Logger::stringToLevel(g_settings->get("chat_log_level")); + if (chat_log_level == LL_MAX) { + warningstream << "Supplied unrecognized chat_log_level; showing none." << std::endl; + chat_log_level = LL_NONE; + } + m_chat_log_buf.setLogLevel(chat_log_level); + + m_cache_disable_escape_sequences = g_settings->getBool("disable_escape_sequences"); m_cache_doubletap_jump = g_settings->getBool("doubletap_jump"); m_cache_enable_clouds = g_settings->getBool("enable_clouds"); m_cache_enable_joysticks = g_settings->getBool("enable_joysticks"); diff --git a/src/log.cpp b/src/log.cpp index 5fac64f5c..ae3d9a9ab 100644 --- a/src/log.cpp +++ b/src/log.cpp @@ -371,42 +371,15 @@ void StreamLogOutput::logRaw(LogLevel lev, std::string_view line) } } -void LogOutputBuffer::updateLogLevel() +void StreamProxy::fix_stream_state(std::ostream &os) { - const std::string &conf_loglev = g_settings->get("chat_log_level"); - LogLevel log_level = Logger::stringToLevel(conf_loglev); - if (log_level == LL_MAX) { - warningstream << "Supplied unrecognized chat_log_level; " - "showing none." << std::endl; - log_level = LL_NONE; - } - - m_logger.removeOutput(this); - m_logger.addOutputMaxLevel(this, log_level); -} - -void LogOutputBuffer::logRaw(LogLevel lev, std::string_view line) -{ - std::string color; - - if (!g_settings->getBool("disable_escape_sequences")) { - switch (lev) { - case LL_ERROR: // red - color = "\x1b(c@#F00)"; - break; - case LL_WARNING: // yellow - color = "\x1b(c@#EE0)"; - break; - case LL_INFO: // grey - color = "\x1b(c@#BBB)"; - break; - case LL_VERBOSE: // dark grey - case LL_TRACE: - color = "\x1b(c@#888)"; - break; - default: break; - } - } - MutexAutoLock lock(m_buffer_mutex); - m_buffer.emplace(color.append(line)); + std::ios::iostate state = os.rdstate(); + // clear error state so the stream works again + os.clear(); + if (state & std::ios::eofbit) + os << "(ostream:eofbit)"; + if (state & std::ios::badbit) + os << "(ostream:badbit)"; + if (state & std::ios::failbit) + os << "(ostream:failbit)"; } diff --git a/src/log.h b/src/log.h index ccd13acf3..0e34b2c83 100644 --- a/src/log.h +++ b/src/log.h @@ -32,21 +32,60 @@ class StreamProxy { public: StreamProxy(std::ostream *os) : m_os(os) { } + static void fix_stream_state(std::ostream &os); + template - StreamProxy& operator<<(T&& arg) { + StreamProxy& operator<<(T&& arg) + { if (m_os) { + if (!m_os->good()) + fix_stream_state(*m_os); *m_os << std::forward(arg); } return *this; } - StreamProxy& operator<<(std::ostream& (*manip)(std::ostream&)) { + StreamProxy& operator<<(std::ostream& (*manip)(std::ostream&)) + { if (m_os) { + if (!m_os->good()) + fix_stream_state(*m_os); *m_os << manip; } return *this; } +private: + template + StreamProxy& emit_with_null_check(T&& arg) + { + // These calls explicitly use the templated version of operator<<, + // so that they won't use the overloads created by ADD_NULL_CHECK. + if (arg == nullptr) + return this->operator<< ("(null)"); + else + return this->operator<< (std::forward(arg)); + } + +public: + // Add specific overrides for operator<< which check for NULL string + // pointers. This is undefined behavior in the C++ spec, so emit "(null)" + // instead. These are method overloads, rather than template specializations. +#define ADD_NULL_CHECK(_type) \ + StreamProxy& operator<<(_type arg) \ + { \ + return emit_with_null_check(std::forward<_type>(arg)); \ + } + + ADD_NULL_CHECK(char*) + ADD_NULL_CHECK(unsigned char*) + ADD_NULL_CHECK(signed char*) + ADD_NULL_CHECK(const char*) + ADD_NULL_CHECK(const unsigned char*) + ADD_NULL_CHECK(const signed char*) + +#undef ADD_NULL_CHECK + private: std::ostream *m_os; }; diff --git a/src/log_internal.h b/src/log_internal.h index c8bc1b310..512a57949 100644 --- a/src/log_internal.h +++ b/src/log_internal.h @@ -123,54 +123,69 @@ private: std::ofstream m_stream; }; -class LogOutputBuffer : public ICombinedLogOutput { -public: - LogOutputBuffer(Logger &logger) : - m_logger(logger) - { - updateLogLevel(); - }; +struct LogEntry { + LogLevel level; + std::string timestamp; + std::string thread_name; + std::string text; + // "timestamp: level[thread_name]: text" + std::string combined; +}; - virtual ~LogOutputBuffer() +class CaptureLogOutput : public ILogOutput { +public: + CaptureLogOutput() = delete; + DISABLE_CLASS_COPY(CaptureLogOutput); + + CaptureLogOutput(Logger &logger) : m_logger(logger) + { + m_logger.addOutput(this); + } + + ~CaptureLogOutput() { m_logger.removeOutput(this); } - void updateLogLevel(); - - void logRaw(LogLevel lev, std::string_view line); - - void clear() + void setLogLevel(LogLevel level) { - MutexAutoLock lock(m_buffer_mutex); - m_buffer = std::queue(); + m_logger.removeOutput(this); + m_logger.addOutputMaxLevel(this, level); } - bool empty() const + void logRaw(LogLevel lev, std::string_view line) override { - MutexAutoLock lock(m_buffer_mutex); - return m_buffer.empty(); + MutexAutoLock lock(m_mutex); + m_entries.emplace_back(LogEntry{lev, "", "", std::string(line), std::string(line)}); } - std::string get() + void log(LogLevel lev, const std::string &combined, + const std::string &time, const std::string &thread_name, + std::string_view payload_text) override { - MutexAutoLock lock(m_buffer_mutex); - if (m_buffer.empty()) - return ""; - std::string s = std::move(m_buffer.front()); - m_buffer.pop(); - return s; + MutexAutoLock lock(m_mutex); + m_entries.emplace_back(LogEntry{lev, time, thread_name, std::string(payload_text), combined}); + } + + // Take the log entries currently stored, clearing the buffer. + std::vector take() + { + std::vector entries; + MutexAutoLock lock(m_mutex); + std::swap(m_entries, entries); + return entries; } private: - // g_logger serializes calls to logRaw() with a mutex, but that - // doesn't prevent get() / clear() from being called on top of it. - // This mutex prevents that. - mutable std::mutex m_buffer_mutex; - std::queue m_buffer; Logger &m_logger; + // g_logger serializes calls to log/logRaw with a mutex, but that + // doesn't prevent take() from being called on top of it. + // This mutex prevents that. + std::mutex m_mutex; + std::vector m_entries; }; + #ifdef __ANDROID__ class AndroidLogOutput : public ICombinedLogOutput { public: diff --git a/src/unittest/CMakeLists.txt b/src/unittest/CMakeLists.txt index 93803c912..f546d150e 100644 --- a/src/unittest/CMakeLists.txt +++ b/src/unittest/CMakeLists.txt @@ -13,6 +13,7 @@ set (UNITTEST_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/test_filesys.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_inventory.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_irrptr.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/test_logging.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_lua.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_map.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_mapblock.cpp diff --git a/src/unittest/test_logging.cpp b/src/unittest/test_logging.cpp new file mode 100644 index 000000000..dcfe5ec83 --- /dev/null +++ b/src/unittest/test_logging.cpp @@ -0,0 +1,90 @@ +// SPDX-License-Identifier: LGPL-2.1-or-later + +#include "test.h" +#include "log_internal.h" + +using std::ostream; + +class TestLogging : public TestBase +{ +public: + TestLogging() { TestManager::registerTestModule(this); } + const char *getName() { return "TestLogging"; } + + void runTests(IGameDef *gamedef); + + void testNullChecks(); + void testBitCheck(); +}; + +static TestLogging g_test_instance; + +void TestLogging::runTests(IGameDef *gamedef) +{ + TEST(testNullChecks); + TEST(testBitCheck); +} + +//////////////////////////////////////////////////////////////////////////////// + +void TestLogging::testNullChecks() +{ + CaptureLogOutput capture(g_logger); + + infostream << "Test char*: " << (char*)0 << std::endl; + infostream << "Test signed char*: " << (signed char*)0 << std::endl; + infostream << "Test unsigned char*: " << (unsigned char*)0 << std::endl; + + infostream << "Test const char*: " << (const char*)0 << std::endl; + infostream << "Test const signed char*: " << (const signed char*)0 << std::endl; + infostream << "Test const unsigned char*: " << (const unsigned char*)0 << std::endl; + + + auto logs = capture.take(); + UASSERTEQ(size_t, logs.size(), 6); + UASSERTEQ(std::string, logs[0].text, "Test char*: (null)"); + UASSERTEQ(std::string, logs[1].text, "Test signed char*: (null)"); + UASSERTEQ(std::string, logs[2].text, "Test unsigned char*: (null)"); + UASSERTEQ(std::string, logs[3].text, "Test const char*: (null)"); + UASSERTEQ(std::string, logs[4].text, "Test const signed char*: (null)"); + UASSERTEQ(std::string, logs[5].text, "Test const unsigned char*: (null)"); +} + +namespace { + class ForceEofBit {}; + class ForceFailBit {}; + class ForceBadBit {}; + + ostream& operator<<(ostream& os, ForceEofBit) + { + os.setstate(std::ios::eofbit); + return os; + } + + ostream& operator<<(ostream& os, ForceFailBit) + { + os.setstate(std::ios::failbit); + return os; + } + + ostream& operator<<(ostream& os, ForceBadBit) + { + os.setstate(std::ios::badbit); + return os; + } +} + +void TestLogging::testBitCheck() +{ + CaptureLogOutput capture(g_logger); + + infostream << "EOF is " << ForceEofBit{} << std::endl; + infostream << "Fail is " << ForceFailBit{} << std::endl; + infostream << "Bad is " << ForceBadBit{} << std::endl; + + auto logs = capture.take(); + UASSERTEQ(size_t, logs.size(), 3); + UASSERTEQ(std::string, logs[0].text, "EOF is (ostream:eofbit)"); + UASSERTEQ(std::string, logs[1].text, "Fail is (ostream:failbit)"); + UASSERTEQ(std::string, logs[2].text, "Bad is (ostream:badbit)"); +} From 5532248cd739355201a043b0064c9509dca16dfd Mon Sep 17 00:00:00 2001 From: grorp Date: Sat, 12 Oct 2024 22:34:39 +0200 Subject: [PATCH 003/178] Add missing setting callbacks for display_density_factor (#15273) --- src/client/clientlauncher.cpp | 2 ++ src/client/fontengine.cpp | 30 ++++++++++++++++-------------- src/client/hud.cpp | 2 ++ 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/src/client/clientlauncher.cpp b/src/client/clientlauncher.cpp index e99fbff42..13b87f2ef 100644 --- a/src/client/clientlauncher.cpp +++ b/src/client/clientlauncher.cpp @@ -72,6 +72,7 @@ ClientLauncher::~ClientLauncher() { delete input; g_settings->deregisterChangedCallback("dpi_change_notifier", setting_changed_callback, this); + g_settings->deregisterChangedCallback("display_density_factor", setting_changed_callback, this); g_settings->deregisterChangedCallback("gui_scaling", setting_changed_callback, this); delete g_fontengine; @@ -133,6 +134,7 @@ bool ClientLauncher::run(GameStartData &start_data, const Settings &cmd_args) guienv = m_rendering_engine->get_gui_env(); config_guienv(); g_settings->registerChangedCallback("dpi_change_notifier", setting_changed_callback, this); + g_settings->registerChangedCallback("display_density_factor", setting_changed_callback, this); g_settings->registerChangedCallback("gui_scaling", setting_changed_callback, this); g_fontengine = new FontEngine(guienv); diff --git a/src/client/fontengine.cpp b/src/client/fontengine.cpp index e0174e011..5475e9768 100644 --- a/src/client/fontengine.cpp +++ b/src/client/fontengine.cpp @@ -33,10 +33,20 @@ FontEngine *g_fontengine = nullptr; /** callback to be used on change of font size setting */ static void font_setting_changed(const std::string &name, void *userdata) { - if (g_fontengine) - g_fontengine->readSettings(); + static_cast(userdata)->readSettings(); } +static const char *settings[] = { + "font_size", "font_bold", "font_italic", "font_size_divisible_by", + "mono_font_size", "mono_font_size_divisible_by", + "font_shadow", "font_shadow_alpha", + "font_path", "font_path_bold", "font_path_italic", "font_path_bold_italic", + "mono_font_path", "mono_font_path_bold", "mono_font_path_italic", + "mono_font_path_bold_italic", + "fallback_font_path", + "dpi_change_notifier", "display_density_factor", "gui_scaling", +}; + /******************************************************************************/ FontEngine::FontEngine(gui::IGUIEnvironment* env) : m_env(env) @@ -51,24 +61,16 @@ FontEngine::FontEngine(gui::IGUIEnvironment* env) : readSettings(); - const char *settings[] = { - "font_size", "font_bold", "font_italic", "font_size_divisible_by", - "mono_font_size", "mono_font_size_divisible_by", - "font_shadow", "font_shadow_alpha", - "font_path", "font_path_bold", "font_path_italic", "font_path_bold_italic", - "mono_font_path", "mono_font_path_bold", "mono_font_path_italic", - "mono_font_path_bold_italic", - "fallback_font_path", - "dpi_change_notifier", "gui_scaling", - }; - for (auto name : settings) - g_settings->registerChangedCallback(name, font_setting_changed, NULL); + g_settings->registerChangedCallback(name, font_setting_changed, this); } /******************************************************************************/ FontEngine::~FontEngine() { + for (auto name : settings) + g_settings->deregisterChangedCallback(name, font_setting_changed, this); + cleanCache(); } diff --git a/src/client/hud.cpp b/src/client/hud.cpp index 3f3984d48..29fc31ffa 100644 --- a/src/client/hud.cpp +++ b/src/client/hud.cpp @@ -61,6 +61,7 @@ Hud::Hud(Client *client, LocalPlayer *player, readScalingSetting(); g_settings->registerChangedCallback("dpi_change_notifier", setting_changed_callback, this); + g_settings->registerChangedCallback("display_density_factor", setting_changed_callback, this); g_settings->registerChangedCallback("hud_scaling", setting_changed_callback, this); for (auto &hbar_color : hbar_colors) @@ -170,6 +171,7 @@ void Hud::readScalingSetting() Hud::~Hud() { g_settings->deregisterChangedCallback("dpi_change_notifier", setting_changed_callback, this); + g_settings->deregisterChangedCallback("display_density_factor", setting_changed_callback, this); g_settings->deregisterChangedCallback("hud_scaling", setting_changed_callback, this); if (m_selection_mesh) From 6d5103900f9d8e6b78350b9e66a97c2ceaeb9be9 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Mon, 7 Oct 2024 17:48:19 +0200 Subject: [PATCH 004/178] Some refactoring and fixes to VoxelArea and VoxelManip In particular this validates the edges of VoxelArea and fixes all the nonsense tests uncovered by it. --- doc/lua_api.md | 11 ++-- src/map.cpp | 16 ++--- src/map.h | 2 +- src/mapblock.cpp | 4 +- src/mapblock.h | 4 +- src/mapgen/dungeongen.cpp | 2 +- src/script/lua_api/l_vmanip.cpp | 3 + src/unittest/test_voxelarea.cpp | 113 ++++++++++++++++++++------------ src/voxel.cpp | 78 ++++++++-------------- src/voxel.h | 110 ++++++++++++++----------------- src/voxelalgorithms.cpp | 18 +++-- 11 files changed, 178 insertions(+), 183 deletions(-) diff --git a/doc/lua_api.md b/doc/lua_api.md index f2f0a5ba3..d9e683da3 100644 --- a/doc/lua_api.md +++ b/doc/lua_api.md @@ -5010,8 +5010,7 @@ Methods the `VoxelManip`. * `calc_lighting([p1, p2], [propagate_shadow])`: Calculate lighting within the `VoxelManip`. - * To be used only by a `VoxelManip` object from - `minetest.get_mapgen_object`. + * To be used only with a `VoxelManip` object from `minetest.get_mapgen_object`. * (`p1`, `p2`) is the area in which lighting is set, defaults to the whole area if left out or nil. For almost all uses these should be left out or nil to use the default. @@ -5019,9 +5018,11 @@ Methods generated mapchunk above are propagated down into the mapchunk, defaults to `true` if left out. * `update_liquids()`: Update liquid flow -* `was_modified()`: Returns `true` or `false` if the data in the voxel - manipulator had been modified since the last read from map, due to a call to - `minetest.set_data()` on the loaded area elsewhere. +* `was_modified()`: Returns `true` if the data in the voxel manipulator has been modified + since it was last read from the map. This means you have to call `get_data` again. + This only applies to a `VoxelManip` object from `minetest.get_mapgen_object`, + where the engine will keep the map and the VM in sync automatically. + * Note: this doesn't do what you think it does and is subject to removal. Don't use it! * `get_emerged_area()`: Returns actual emerged minimum and maximum positions. `VoxelArea` diff --git a/src/map.cpp b/src/map.cpp index d54ed1270..85ff0e84a 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -822,17 +822,9 @@ void MMVManip::initialEmerge(v3s16 blockpos_min, v3s16 blockpos_max, } else { flags |= VMANIP_BLOCK_DATA_INEXIST; - /* - Mark area inexistent - */ + // Mark area inexistent VoxelArea a(p*MAP_BLOCKSIZE, (p+1)*MAP_BLOCKSIZE-v3s16(1,1,1)); - // Fill with VOXELFLAG_NO_DATA - for(s32 z=a.MinEdge.Z; z<=a.MaxEdge.Z; z++) - for(s32 y=a.MinEdge.Y; y<=a.MaxEdge.Y; y++) - { - s32 i = m_area.index(a.MinEdge.X,y,z); - memset(&m_flags[i], VOXELFLAG_NO_DATA, MAP_BLOCKSIZE); - } + setFlags(a, VOXELFLAG_NO_DATA); } } /*else if (block->getNode(0, 0, 0).getContent() == CONTENT_IGNORE) @@ -848,9 +840,9 @@ void MMVManip::initialEmerge(v3s16 blockpos_min, v3s16 blockpos_max, } void MMVManip::blitBackAll(std::map *modified_blocks, - bool overwrite_generated) + bool overwrite_generated) const { - if(m_area.getExtent() == v3s16(0,0,0)) + if (m_area.hasEmptyExtent()) return; assert(m_map); diff --git a/src/map.h b/src/map.h index a4bf45314..e3624a68d 100644 --- a/src/map.h +++ b/src/map.h @@ -333,7 +333,7 @@ public: // This is much faster with big chunks of generated data void blitBackAll(std::map * modified_blocks, - bool overwrite_generated = true); + bool overwrite_generated = true) const; /* Creates a copy of this VManip including contents, the copy will not be diff --git a/src/mapblock.cpp b/src/mapblock.cpp index 9a27a9f3d..714b47ec1 100644 --- a/src/mapblock.cpp +++ b/src/mapblock.cpp @@ -178,13 +178,13 @@ void MapBlock::copyTo(VoxelManipulator &dst) getPosRelative(), data_size); } -void MapBlock::copyFrom(VoxelManipulator &dst) +void MapBlock::copyFrom(const VoxelManipulator &src) { v3s16 data_size(MAP_BLOCKSIZE, MAP_BLOCKSIZE, MAP_BLOCKSIZE); VoxelArea data_area(v3s16(0,0,0), data_size - v3s16(1,1,1)); // Copy from VoxelManipulator to data - dst.copyTo(data, data_area, v3s16(0,0,0), + src.copyTo(data, data_area, v3s16(0,0,0), getPosRelative(), data_size); } diff --git a/src/mapblock.h b/src/mapblock.h index 843daf6ef..044c104bc 100644 --- a/src/mapblock.h +++ b/src/mapblock.h @@ -307,8 +307,8 @@ public: // Copies data to VoxelManipulator to getPosRelative() void copyTo(VoxelManipulator &dst); - // Copies data from VoxelManipulator getPosRelative() - void copyFrom(VoxelManipulator &dst); + // Copies data from VoxelManipulator to getPosRelative() + void copyFrom(const VoxelManipulator &src); // Update is air flag. // Sets m_is_air to appropriate value. diff --git a/src/mapgen/dungeongen.cpp b/src/mapgen/dungeongen.cpp index 1d439abeb..0369bdac3 100644 --- a/src/mapgen/dungeongen.cpp +++ b/src/mapgen/dungeongen.cpp @@ -91,7 +91,7 @@ void DungeonGen::generate(MMVManip *vm, u32 bseed, v3s16 nmin, v3s16 nmax) random.seed(bseed + 2); // Dungeon generator doesn't modify places which have this set - vm->clearFlag(VMANIP_FLAG_DUNGEON_INSIDE | VMANIP_FLAG_DUNGEON_PRESERVE); + vm->clearFlags(vm->m_area, VMANIP_FLAG_DUNGEON_INSIDE | VMANIP_FLAG_DUNGEON_PRESERVE); if (dp.only_in_ground) { // Set all air and liquid drawtypes to be untouchable to make dungeons generate diff --git a/src/script/lua_api/l_vmanip.cpp b/src/script/lua_api/l_vmanip.cpp index 76b5aff0f..72ecc55b6 100644 --- a/src/script/lua_api/l_vmanip.cpp +++ b/src/script/lua_api/l_vmanip.cpp @@ -333,6 +333,9 @@ int LuaVoxelManip::l_was_modified(lua_State *L) LuaVoxelManip *o = checkObject(L, 1); MMVManip *vm = o->vm; + if (!o->is_mapgen_vm) + log_deprecated(L, "was_modified called for a non-mapgen VoxelManip object"); + lua_pushboolean(L, vm->m_is_dirty); return 1; diff --git a/src/unittest/test_voxelarea.cpp b/src/unittest/test_voxelarea.cpp index 386fe499c..1139e72fa 100644 --- a/src/unittest/test_voxelarea.cpp +++ b/src/unittest/test_voxelarea.cpp @@ -38,6 +38,7 @@ public: void test_equal(); void test_plus(); void test_minor(); + void test_diff(); void test_intersect(); void test_index_xyz_all_pos(); void test_index_xyz_x_neg(); @@ -75,6 +76,7 @@ void TestVoxelArea::runTests(IGameDef *gamedef) TEST(test_equal); TEST(test_plus); TEST(test_minor); + TEST(test_diff); TEST(test_intersect); TEST(test_index_xyz_all_pos); TEST(test_index_xyz_x_neg); @@ -100,21 +102,21 @@ void TestVoxelArea::runTests(IGameDef *gamedef) void TestVoxelArea::test_addarea() { - VoxelArea v1(v3s16(-1447, 8854, -875), v3s16(-147, -9547, 669)); - VoxelArea v2(v3s16(-887, 4445, -5478), v3s16(447, -8779, 4778)); + VoxelArea v1(v3s16(-1447, -9547, -875), v3s16(-147, 8854, 669)); + VoxelArea v2(v3s16(-887, -8779, -5478), v3s16(447, 4445, 4778)); v1.addArea(v2); - UASSERT(v1.MinEdge == v3s16(-1447, 4445, -5478)); - UASSERT(v1.MaxEdge == v3s16(447, -8779, 4778)); + UASSERT(v1.MinEdge == v3s16(-1447, -9547, -5478)); + UASSERT(v1.MaxEdge == v3s16(447, 8854, 4778)); } void TestVoxelArea::test_pad() { - VoxelArea v1(v3s16(-1447, 8854, -875), v3s16(-147, -9547, 669)); + VoxelArea v1(v3s16(-1447, -9547, -875), v3s16(-147, 8854, 669)); v1.pad(v3s16(100, 200, 300)); - UASSERT(v1.MinEdge == v3s16(-1547, 8654, -1175)); - UASSERT(v1.MaxEdge == v3s16(-47, -9347, 969)); + UASSERT(v1.MinEdge == v3s16(-1547, -9747, -1175)); + UASSERT(v1.MaxEdge == v3s16(-47, 9054, 969)); } void TestVoxelArea::test_extent() @@ -124,6 +126,9 @@ void TestVoxelArea::test_extent() VoxelArea v2(v3s16(32493, -32507, 32752), v3s16(32508, -32492, 32767)); UASSERT(v2.getExtent() == v3s16(16, 16, 16)); + + UASSERT(VoxelArea({2,3,4}, {1,2,3}).hasEmptyExtent()); + UASSERT(VoxelArea({2,3,4}, {2,2,3}).hasEmptyExtent() == false); } void TestVoxelArea::test_volume() @@ -133,6 +138,9 @@ void TestVoxelArea::test_volume() VoxelArea v2(v3s16(32493, -32507, 32752), v3s16(32508, -32492, 32767)); UASSERTEQ(s32, v2.getVolume(), 4096); + + UASSERTEQ(s32, VoxelArea({2,3,4}, {1,2,3}).getVolume(), 0); + UASSERTEQ(s32, VoxelArea({2,3,4}, {2,2,3}).getVolume(), 0); } void TestVoxelArea::test_contains_voxelarea() @@ -185,8 +193,7 @@ void TestVoxelArea::test_equal() VoxelArea v1(v3s16(-1337, -9547, -789), v3s16(-147, 750, 669)); UASSERTEQ(bool, v1 == VoxelArea(v3s16(-1337, -9547, -789), v3s16(-147, 750, 669)), true); - UASSERTEQ(bool, v1 == VoxelArea(v3s16(0, 0, 0), v3s16(-147, 750, 669)), false); - UASSERTEQ(bool, v1 == VoxelArea(v3s16(0, 0, 0), v3s16(-147, 750, 669)), false); + UASSERTEQ(bool, v1 == VoxelArea(v3s16(-147, 0, 0), v3s16(0, 750, 669)), false); UASSERTEQ(bool, v1 == VoxelArea(v3s16(0, 0, 0), v3s16(0, 0, 0)), false); } @@ -212,6 +219,30 @@ void TestVoxelArea::test_minor() VoxelArea(v3s16(-10, -10, -45), v3s16(100, 100, 65))); } +void TestVoxelArea::test_diff() +{ + const VoxelArea v1({-10, -10, -10}, {100, 100, 100}); + std::vector res; + + v1.diff(VoxelArea({-10, -10, -10}, {99, 100, 100}), res); + UASSERTEQ(auto, res.size(), 1U); + UASSERT(res[0] == VoxelArea({100, -10, -10}, {100, 100, 100})); + res.clear(); + + v1.diff(VoxelArea({-10, -10, -10}, {100, 50, 80}), res); + UASSERTEQ(auto, res.size(), 2U); + UASSERT(res[0] == VoxelArea({-10, -10, 81}, {100, 100, 100})); + UASSERT(res[1] == VoxelArea({-10, 51, -10}, {100, 100, 80})); + res.clear(); + + // edge cases + v1.diff(v1, res); + UASSERT(res.empty()); + v1.diff(VoxelArea(), res); + UASSERTEQ(auto, res.size(), 1U); + UASSERT(res[0] == v1); +} + void TestVoxelArea::test_intersect() { VoxelArea v1({-10, -10, -10}, {10, 10, 10}); @@ -231,8 +262,8 @@ void TestVoxelArea::test_index_xyz_all_pos() VoxelArea v1; UASSERTEQ(s32, v1.index(156, 25, 236), 155); - VoxelArea v2(v3s16(756, 8854, -875), v3s16(-147, -9547, 669)); - UASSERTEQ(s32, v2.index(156, 25, 236), 1267138774); + VoxelArea v2(v3s16(-147, -9547, -875), v3s16(756, 8854, 669)); + UASSERTEQ(s32, v2.index(156, 25, 236), 1310722495); } void TestVoxelArea::test_index_xyz_x_neg() @@ -240,8 +271,8 @@ void TestVoxelArea::test_index_xyz_x_neg() VoxelArea v1; UASSERTEQ(s32, v1.index(-147, 25, 366), -148); - VoxelArea v2(v3s16(756, 8854, -875), v3s16(-147, -9547, 669)); - UASSERTEQ(s32, v2.index(-147, 25, 366), -870244825); + VoxelArea v2(v3s16(-147, -9547, -875), v3s16(756, 8854, 669)); + UASSERTEQ(s32, v2.index(-147, 25, 366), -821642064); } void TestVoxelArea::test_index_xyz_y_neg() @@ -249,8 +280,8 @@ void TestVoxelArea::test_index_xyz_y_neg() VoxelArea v1; UASSERTEQ(s32, v1.index(247, -269, 100), 246); - VoxelArea v2(v3s16(756, 8854, -875), v3s16(-147, -9547, 669)); - UASSERTEQ(s32, v2.index(247, -269, 100), -989760747); + VoxelArea v2(v3s16(-147, -9547, -875), v3s16(756, 8854, 669)); + UASSERTEQ(s32, v2.index(247, -269, 100), -951958678); } void TestVoxelArea::test_index_xyz_z_neg() @@ -258,8 +289,8 @@ void TestVoxelArea::test_index_xyz_z_neg() VoxelArea v1; UASSERTEQ(s32, v1.index(244, 336, -887), 243); - VoxelArea v2(v3s16(756, 8854, -875), v3s16(-147, -9547, 669)); - UASSERTEQ(s32, v2.index(244, 336, -887), -191478876); + VoxelArea v2(v3s16(-147, -9547, -875), v3s16(756, 8854, 669)); + UASSERTEQ(s32, v2.index(244, 336, -887), -190690273); } void TestVoxelArea::test_index_xyz_xy_neg() @@ -267,8 +298,8 @@ void TestVoxelArea::test_index_xyz_xy_neg() VoxelArea v1; UASSERTEQ(s32, v1.index(-365, -47, 6978), -366); - VoxelArea v2(v3s16(756, 8854, -875), v3s16(-147, -9547, 669)); - UASSERTEQ(s32, v2.index(-365, -47, 6978), 1493679101); + VoxelArea v2(v3s16(-147, -9547, -875), v3s16(756, 8854, 669)); + UASSERTEQ(s32, v2.index(-365, -47, 6978), 1797427926); } void TestVoxelArea::test_index_xyz_yz_neg() @@ -276,8 +307,8 @@ void TestVoxelArea::test_index_xyz_yz_neg() VoxelArea v1; UASSERTEQ(s32, v1.index(66, -58, -789), 65); - VoxelArea v2(v3s16(756, 8854, -875), v3s16(-147, -9547, 669)); - UASSERTEQ(s32, v2.index(66, -58, -789), 1435362734); + VoxelArea v2(v3s16(-147, -9547, -875), v3s16(756, 8854, 669)); + UASSERTEQ(s32, v2.index(66, -58, -789), 1439223357); } void TestVoxelArea::test_index_xyz_xz_neg() @@ -285,8 +316,8 @@ void TestVoxelArea::test_index_xyz_xz_neg() VoxelArea v1; UASSERTEQ(s32, v1.index(-36, 589, -992), -37); - VoxelArea v2(v3s16(756, 8854, -875), v3s16(-147, -9547, 669)); - UASSERTEQ(s32, v2.index(-36, 589, -992), -1934371362); + VoxelArea v2(v3s16(-147, -9547, -875), v3s16(756, 8854, 669)); + UASSERTEQ(s32, v2.index(-36, 589, -992), -1937179681); } void TestVoxelArea::test_index_xyz_all_neg() @@ -294,8 +325,8 @@ void TestVoxelArea::test_index_xyz_all_neg() VoxelArea v1; UASSERTEQ(s32, v1.index(-88, -99, -1474), -89); - VoxelArea v2(v3s16(756, 8854, -875), v3s16(-147, -9547, 669)); - UASSERTEQ(s32, v2.index(-88, -99, -1474), -1343473846); + VoxelArea v2(v3s16(-147, -9547, -875), v3s16(756, 8854, 669)); + UASSERTEQ(s32, v2.index(-88, -99, -1474), -1366133749); } void TestVoxelArea::test_index_v3s16_all_pos() @@ -303,8 +334,8 @@ void TestVoxelArea::test_index_v3s16_all_pos() VoxelArea v1; UASSERTEQ(s32, v1.index(v3s16(156, 25, 236)), 155); - VoxelArea v2(v3s16(756, 8854, -875), v3s16(-147, -9547, 669)); - UASSERTEQ(s32, v2.index(v3s16(156, 25, 236)), 1267138774); + VoxelArea v2(v3s16(-147, -9547, -875), v3s16(756, 8854, 669)); + UASSERTEQ(s32, v2.index(v3s16(156, 25, 236)), 1310722495); } void TestVoxelArea::test_index_v3s16_x_neg() @@ -312,8 +343,8 @@ void TestVoxelArea::test_index_v3s16_x_neg() VoxelArea v1; UASSERTEQ(s32, v1.index(v3s16(-147, 25, 366)), -148); - VoxelArea v2(v3s16(756, 8854, -875), v3s16(-147, -9547, 669)); - UASSERTEQ(s32, v2.index(v3s16(-147, 25, 366)), -870244825); + VoxelArea v2(v3s16(-147, -9547, -875), v3s16(756, 8854, 669)); + UASSERTEQ(s32, v2.index(v3s16(-147, 25, 366)), -821642064); } void TestVoxelArea::test_index_v3s16_y_neg() @@ -321,8 +352,8 @@ void TestVoxelArea::test_index_v3s16_y_neg() VoxelArea v1; UASSERTEQ(s32, v1.index(v3s16(247, -269, 100)), 246); - VoxelArea v2(v3s16(756, 8854, -875), v3s16(-147, -9547, 669)); - UASSERTEQ(s32, v2.index(v3s16(247, -269, 100)), -989760747); + VoxelArea v2(v3s16(-147, -9547, -875), v3s16(756, 8854, 669)); + UASSERTEQ(s32, v2.index(v3s16(247, -269, 100)), -951958678); } void TestVoxelArea::test_index_v3s16_z_neg() @@ -330,8 +361,8 @@ void TestVoxelArea::test_index_v3s16_z_neg() VoxelArea v1; UASSERTEQ(s32, v1.index(v3s16(244, 336, -887)), 243); - VoxelArea v2(v3s16(756, 8854, -875), v3s16(-147, -9547, 669)); - UASSERTEQ(s32, v2.index(v3s16(244, 336, -887)), -191478876); + VoxelArea v2(v3s16(-147, -9547, -875), v3s16(756, 8854, 669)); + UASSERTEQ(s32, v2.index(v3s16(244, 336, -887)), -190690273); } void TestVoxelArea::test_index_v3s16_xy_neg() @@ -339,8 +370,8 @@ void TestVoxelArea::test_index_v3s16_xy_neg() VoxelArea v1; UASSERTEQ(s32, v1.index(v3s16(-365, -47, 6978)), -366); - VoxelArea v2(v3s16(756, 8854, -875), v3s16(-147, -9547, 669)); - UASSERTEQ(s32, v2.index(v3s16(-365, -47, 6978)), 1493679101); + VoxelArea v2(v3s16(-147, -9547, -875), v3s16(756, 8854, 669)); + UASSERTEQ(s32, v2.index(v3s16(-365, -47, 6978)), 1797427926); } void TestVoxelArea::test_index_v3s16_yz_neg() @@ -348,8 +379,8 @@ void TestVoxelArea::test_index_v3s16_yz_neg() VoxelArea v1; UASSERTEQ(s32, v1.index(v3s16(66, -58, -789)), 65); - VoxelArea v2(v3s16(756, 8854, -875), v3s16(-147, -9547, 669)); - UASSERTEQ(s32, v2.index(v3s16(66, -58, -789)), 1435362734); + VoxelArea v2(v3s16(-147, -9547, -875), v3s16(756, 8854, 669)); + UASSERTEQ(s32, v2.index(v3s16(66, -58, -789)), 1439223357); } void TestVoxelArea::test_index_v3s16_xz_neg() @@ -357,8 +388,8 @@ void TestVoxelArea::test_index_v3s16_xz_neg() VoxelArea v1; UASSERTEQ(s32, v1.index(v3s16(-36, 589, -992)), -37); - VoxelArea v2(v3s16(756, 8854, -875), v3s16(-147, -9547, 669)); - UASSERTEQ(s32, v2.index(v3s16(-36, 589, -992)), -1934371362); + VoxelArea v2(v3s16(-147, -9547, -875), v3s16(756, 8854, 669)); + UASSERTEQ(s32, v2.index(v3s16(-36, 589, -992)), -1937179681); } void TestVoxelArea::test_index_v3s16_all_neg() @@ -366,8 +397,8 @@ void TestVoxelArea::test_index_v3s16_all_neg() VoxelArea v1; UASSERTEQ(s32, v1.index(v3s16(-88, -99, -1474)), -89); - VoxelArea v2(v3s16(756, 8854, -875), v3s16(-147, -9547, 669)); - UASSERTEQ(s32, v2.index(v3s16(-88, -99, -1474)), -1343473846); + VoxelArea v2(v3s16(-147, -9547, -875), v3s16(756, 8854, 669)); + UASSERTEQ(s32, v2.index(v3s16(-88, -99, -1474)), -1366133749); } void TestVoxelArea::test_add_x() diff --git a/src/voxel.cpp b/src/voxel.cpp index 0f87cf282..9fb310962 100644 --- a/src/voxel.cpp +++ b/src/voxel.cpp @@ -29,10 +29,8 @@ with this program; if not, write to the Free Software Foundation, Inc., /* Debug stuff */ -u64 addarea_time = 0; u64 emerge_time = 0; u64 emerge_load_time = 0; -u64 clearflag_time = 0; VoxelManipulator::~VoxelManipulator() { @@ -53,7 +51,7 @@ void VoxelManipulator::clear() } void VoxelManipulator::print(std::ostream &o, const NodeDefManager *ndef, - VoxelPrintMode mode) + VoxelPrintMode mode) const { const v3s16 &em = m_area.getExtent(); v3s16 of = m_area.MinEdge; @@ -140,8 +138,6 @@ void VoxelManipulator::addArea(const VoxelArea &area) if(m_area.contains(area)) return; - TimeTaker timer("addArea", &addarea_time); - // Calculate new area VoxelArea new_area; // New area is the requested area if m_area has zero volume @@ -158,15 +154,6 @@ void VoxelManipulator::addArea(const VoxelArea &area) s32 new_size = new_area.getVolume(); - /*dstream<<"adding area "; - area.print(dstream); - dstream<<", old area "; - m_area.print(dstream); - dstream<<", new area "; - new_area.print(dstream); - dstream<<", new_size="< &result) + template + void diff(const VoxelArea &a, C &result) const { - /* - This can result in a maximum of 6 areas - */ - // If a is an empty area, return the current area as a whole - if(a.getExtent() == v3s16(0,0,0)) + if(a.hasEmptyExtent()) { VoxelArea b = *this; - if(b.getVolume() != 0) + if (b.getVolume() != 0) result.push_back(b); return; } assert(contains(a)); // pre-condition + const auto &take = [&result] (v3s16 min, v3s16 max) { + VoxelArea b(min, max); + if (b.getVolume() != 0) + result.push_back(b); + }; + // Take back area, XY inclusive { v3s16 min(MinEdge.X, MinEdge.Y, a.MaxEdge.Z+1); v3s16 max(MaxEdge.X, MaxEdge.Y, MaxEdge.Z); - VoxelArea b(min, max); - if(b.getVolume() != 0) - result.push_back(b); + take(min, max); } // Take front area, XY inclusive { v3s16 min(MinEdge.X, MinEdge.Y, MinEdge.Z); v3s16 max(MaxEdge.X, MaxEdge.Y, a.MinEdge.Z-1); - VoxelArea b(min, max); - if(b.getVolume() != 0) - result.push_back(b); + take(min, max); } // Take top area, X inclusive { v3s16 min(MinEdge.X, a.MaxEdge.Y+1, a.MinEdge.Z); v3s16 max(MaxEdge.X, MaxEdge.Y, a.MaxEdge.Z); - VoxelArea b(min, max); - if(b.getVolume() != 0) - result.push_back(b); + take(min, max); } // Take bottom area, X inclusive { v3s16 min(MinEdge.X, MinEdge.Y, a.MinEdge.Z); v3s16 max(MaxEdge.X, a.MinEdge.Y-1, a.MaxEdge.Z); - VoxelArea b(min, max); - if(b.getVolume() != 0) - result.push_back(b); + take(min, max); } // Take left area, non-inclusive { v3s16 min(MinEdge.X, a.MinEdge.Y, a.MinEdge.Z); v3s16 max(a.MinEdge.X-1, a.MaxEdge.Y, a.MaxEdge.Z); - VoxelArea b(min, max); - if(b.getVolume() != 0) - result.push_back(b); + take(min, max); } // Take right area, non-inclusive { v3s16 min(a.MaxEdge.X+1, a.MinEdge.Y, a.MinEdge.Z); v3s16 max(MaxEdge.X, a.MaxEdge.Y, a.MaxEdge.Z); - VoxelArea b(min, max); - if(b.getVolume() != 0) - result.push_back(b); + take(min, max); } - } /* @@ -344,30 +334,34 @@ public: << "=" << getVolume(); } - // Edges are inclusive + /// Minimum edge of the area (inclusive) + /// @warning read-only! v3s16 MinEdge = v3s16(1,1,1); + /// Maximum edge of the area (inclusive) + /// @warning read-only! v3s16 MaxEdge; + private: void cacheExtent() { m_cache_extent = MaxEdge - MinEdge + v3s16(1,1,1); + // If positions were sorted correctly this must always hold. + // Note that this still permits empty areas (where MinEdge = MaxEdge + 1). + assert(m_cache_extent.X >= 0); + assert(m_cache_extent.Y >= 0); + assert(m_cache_extent.Z >= 0); } v3s16 m_cache_extent = v3s16(0,0,0); }; -// unused -#define VOXELFLAG_UNUSED (1 << 0) -// no data about that node -#define VOXELFLAG_NO_DATA (1 << 1) -// Algorithm-dependent -#define VOXELFLAG_CHECKED1 (1 << 2) -// Algorithm-dependent -#define VOXELFLAG_CHECKED2 (1 << 3) -// Algorithm-dependent -#define VOXELFLAG_CHECKED3 (1 << 4) -// Algorithm-dependent -#define VOXELFLAG_CHECKED4 (1 << 5) +enum : u8 { + VOXELFLAG_NO_DATA = 1 << 0, // no data about that node + VOXELFLAG_CHECKED1 = 1 << 1, // Algorithm-dependent + VOXELFLAG_CHECKED2 = 1 << 2, // Algorithm-dependent + VOXELFLAG_CHECKED3 = 1 << 3, // Algorithm-dependent + VOXELFLAG_CHECKED4 = 1 << 4, // Algorithm-dependent +}; enum VoxelPrintMode { @@ -414,7 +408,7 @@ public: return m_data[index]; } - MapNode getNodeNoExNoEmerge(const v3s16 &p) + MapNode getNodeNoExNoEmerge(const v3s16 &p) const { if (!m_area.contains(p)) return {CONTENT_IGNORE}; @@ -430,7 +424,7 @@ public: return m_data[m_area.index(p)]; } - const MapNode & getNodeRefUnsafeCheckFlags(const v3s16 &p) + const MapNode & getNodeRefUnsafeCheckFlags(const v3s16 &p) const { s32 index = m_area.index(p); @@ -483,10 +477,13 @@ public: virtual void clear(); void print(std::ostream &o, const NodeDefManager *nodemgr, - VoxelPrintMode mode=VOXELPRINT_MATERIAL); + VoxelPrintMode mode=VOXELPRINT_MATERIAL) const; void addArea(const VoxelArea &area); + void setFlags(const VoxelArea &area, u8 flag); + void clearFlags(const VoxelArea &area, u8 flag); + /* Copy data and set flags to 0 dst_area.getExtent() <= src_area.getExtent() @@ -496,13 +493,7 @@ public: // Copy data void copyTo(MapNode *dst, const VoxelArea& dst_area, - v3s16 dst_pos, v3s16 from_pos, const v3s16 &size); - - /* - Algorithms - */ - - void clearFlag(u8 flag); + v3s16 dst_pos, v3s16 from_pos, const v3s16 &size) const; /* Member variables @@ -510,13 +501,12 @@ public: /* The area that is stored in m_data. - addInternalBox should not be used if getExtent() == v3s16(0,0,0) - MaxEdge is 1 higher than maximum allowed position + MaxEdge is 1 higher than maximum allowed position. */ VoxelArea m_area; /* - nullptr if data size is 0 (extent (0,0,0)) + nullptr if data size is 0 (empty extent) Data is stored as [z*h*w + y*h + x] */ MapNode *m_data = nullptr; diff --git a/src/voxelalgorithms.cpp b/src/voxelalgorithms.cpp index 607d6716c..6d159fcf2 100644 --- a/src/voxelalgorithms.cpp +++ b/src/voxelalgorithms.cpp @@ -943,14 +943,18 @@ bool propagate_block_sunlight(Map *map, const NodeDefManager *ndef, * The areas do not overlap. * Compatible with type 'direction'. */ -const VoxelArea block_pad[] = { - VoxelArea(v3s16(15, 0, 0), v3s16(15, 15, 15)), //X+ - VoxelArea(v3s16(1, 15, 0), v3s16(14, 15, 15)), //Y+ - VoxelArea(v3s16(1, 1, 15), v3s16(14, 14, 15)), //Z+ - VoxelArea(v3s16(1, 1, 0), v3s16(14, 14, 0)), //Z- - VoxelArea(v3s16(1, 0, 0), v3s16(14, 0, 15)), //Y- - VoxelArea(v3s16(0, 0, 0), v3s16(0, 15, 15)) //X- +#define B_1 (MAP_BLOCKSIZE - 1) +#define B_2 (MAP_BLOCKSIZE - 2) +const static VoxelArea block_pad[] = { + VoxelArea({B_1, 0, 0}, {B_1, B_1, B_1}), //X+ + VoxelArea({1, B_1, 0}, {B_2, B_1, B_1}), //Y+ + VoxelArea({1, 1, B_1}, {B_2, B_2, B_1}), //Z+ + VoxelArea({1, 1, 0}, {B_2, B_2, 0}), //Z- + VoxelArea({1, 0, 0}, {B_2, 0, B_1}), //Y- + VoxelArea({0, 0, 0}, {0, B_1, B_1}) //X- }; +#undef B_1 +#undef B_2 /*! * The common part of bulk light updates - it is always executed. From 41091a147ce52e843198b261d929840197a78227 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Mon, 7 Oct 2024 18:12:18 +0200 Subject: [PATCH 005/178] Handle VOXELFLAG_NO_DATA when in VManip get_data() --- src/script/lua_api/l_vmanip.cpp | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/src/script/lua_api/l_vmanip.cpp b/src/script/lua_api/l_vmanip.cpp index 72ecc55b6..ca7ad7971 100644 --- a/src/script/lua_api/l_vmanip.cpp +++ b/src/script/lua_api/l_vmanip.cpp @@ -71,8 +71,7 @@ int LuaVoxelManip::l_get_data(lua_State *L) bool use_buffer = lua_istable(L, 2); MMVManip *vm = o->vm; - - u32 volume = vm->m_area.getVolume(); + const u32 volume = vm->m_area.getVolume(); if (use_buffer) lua_pushvalue(L, 2); @@ -80,7 +79,8 @@ int LuaVoxelManip::l_get_data(lua_State *L) lua_createtable(L, volume, 0); for (u32 i = 0; i != volume; i++) { - lua_Integer cid = vm->m_data[i].getContent(); + // Do not push unintialized data to Lua + lua_Integer cid = (vm->m_flags[i] & VOXELFLAG_NO_DATA) ? CONTENT_IGNORE : vm->m_data[i].getContent(); lua_pushinteger(L, cid); lua_rawseti(L, -2, i + 1); } @@ -108,6 +108,12 @@ int LuaVoxelManip::l_set_data(lua_State *L) lua_pop(L, 1); } + // FIXME: in theory we should clear VOXELFLAG_NO_DATA here + // However there is no way to tell which values Lua code has intended to set + // (if they were VOXELFLAG_NO_DATA before), and which were just not touched. + // In practice this doesn't cause problems because read_from_map() will cause + // all covered blocks to be loaded anyway. + return 0; } @@ -231,8 +237,7 @@ int LuaVoxelManip::l_get_light_data(lua_State *L) bool use_buffer = lua_istable(L, 2); MMVManip *vm = o->vm; - - u32 volume = vm->m_area.getVolume(); + const u32 volume = vm->m_area.getVolume(); if (use_buffer) lua_pushvalue(L, 2); @@ -240,7 +245,8 @@ int LuaVoxelManip::l_get_light_data(lua_State *L) lua_createtable(L, volume, 0); for (u32 i = 0; i != volume; i++) { - lua_Integer light = vm->m_data[i].param1; + // Do not push unintialized data to Lua + lua_Integer light = (vm->m_flags[i] & VOXELFLAG_NO_DATA) ? 0 : vm->m_data[i].getParam1(); lua_pushinteger(L, light); lua_rawseti(L, -2, i + 1); } @@ -280,8 +286,7 @@ int LuaVoxelManip::l_get_param2_data(lua_State *L) bool use_buffer = lua_istable(L, 2); MMVManip *vm = o->vm; - - u32 volume = vm->m_area.getVolume(); + const u32 volume = vm->m_area.getVolume(); if (use_buffer) lua_pushvalue(L, 2); @@ -289,7 +294,8 @@ int LuaVoxelManip::l_get_param2_data(lua_State *L) lua_createtable(L, volume, 0); for (u32 i = 0; i != volume; i++) { - lua_Integer param2 = vm->m_data[i].param2; + // Do not push unintialized data to Lua + lua_Integer param2 = (vm->m_flags[i] & VOXELFLAG_NO_DATA) ? 0 : vm->m_data[i].getParam2(); lua_pushinteger(L, param2); lua_rawseti(L, -2, i + 1); } From c8dc9c2b8ddccf03dc5ccd8de8a0778d27ac35a2 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Mon, 7 Oct 2024 21:02:32 +0200 Subject: [PATCH 006/178] Increase safety checks around ObjectRefs --- src/script/common/c_content.cpp | 2 ++ src/script/cpp_api/s_base.cpp | 21 +++++++++++++-------- src/script/lua_api/l_object.cpp | 4 +++- src/script/lua_api/l_object.h | 6 ++++-- src/unittest/mock_serveractiveobject.h | 2 +- src/unittest/test_moveaction.cpp | 4 ++++ 6 files changed, 27 insertions(+), 12 deletions(-) diff --git a/src/script/common/c_content.cpp b/src/script/common/c_content.cpp index 2e5873bbf..9ad067742 100644 --- a/src/script/common/c_content.cpp +++ b/src/script/common/c_content.cpp @@ -2236,12 +2236,14 @@ void push_pointed_thing(lua_State *L, const PointedThing &pointed, bool csm, void push_objectRef(lua_State *L, const u16 id) { + assert(id != 0); // Get core.object_refs[i] lua_getglobal(L, "core"); lua_getfield(L, -1, "object_refs"); luaL_checktype(L, -1, LUA_TTABLE); lua_pushinteger(L, id); lua_gettable(L, -2); + assert(!lua_isnoneornil(L, -1)); lua_remove(L, -2); // object_refs lua_remove(L, -2); // core } diff --git a/src/script/cpp_api/s_base.cpp b/src/script/cpp_api/s_base.cpp index bdd2514e6..cd74b7cfd 100644 --- a/src/script/cpp_api/s_base.cpp +++ b/src/script/cpp_api/s_base.cpp @@ -474,7 +474,7 @@ void ScriptApiBase::addObjectReference(ServerActiveObject *cobj) int objectstable = lua_gettop(L); // object_refs[id] = object - lua_pushnumber(L, cobj->getId()); // Push id + lua_pushinteger(L, cobj->getId()); // Push id lua_pushvalue(L, object); // Copy object to top of stack lua_settable(L, objectstable); } @@ -491,24 +491,29 @@ void ScriptApiBase::removeObjectReference(ServerActiveObject *cobj) int objectstable = lua_gettop(L); // Get object_refs[id] - lua_pushnumber(L, cobj->getId()); // Push id + lua_pushinteger(L, cobj->getId()); // Push id lua_gettable(L, objectstable); // Set object reference to NULL - ObjectRef::set_null(L); + ObjectRef::set_null(L, cobj); lua_pop(L, 1); // pop object // Set object_refs[id] = nil - lua_pushnumber(L, cobj->getId()); // Push id + lua_pushinteger(L, cobj->getId()); // Push id lua_pushnil(L); lua_settable(L, objectstable); } -// Creates a new anonymous reference if cobj=NULL or id=0 -void ScriptApiBase::objectrefGetOrCreate(lua_State *L, - ServerActiveObject *cobj) +void ScriptApiBase::objectrefGetOrCreate(lua_State *L, ServerActiveObject *cobj) { assert(getType() == ScriptingType::Server); - if (cobj == NULL || cobj->getId() == 0) { + if (!cobj) { + ObjectRef::create(L, nullptr); // dummy reference + } else if (cobj->getId() == 0) { + // TODO after 5.10.0: convert this to a FATAL_ERROR + errorstream << "ScriptApiBase::objectrefGetOrCreate(): " + << "Pushing orphan ObjectRef. Please open a bug report for this." + << std::endl; + assert(0); ObjectRef::create(L, cobj); } else { push_objectRef(L, cobj->getId()); diff --git a/src/script/lua_api/l_object.cpp b/src/script/lua_api/l_object.cpp index ae863502f..7a199e458 100644 --- a/src/script/lua_api/l_object.cpp +++ b/src/script/lua_api/l_object.cpp @@ -2776,9 +2776,11 @@ void ObjectRef::create(lua_State *L, ServerActiveObject *object) lua_setmetatable(L, -2); } -void ObjectRef::set_null(lua_State *L) +void ObjectRef::set_null(lua_State *L, void *expect) { ObjectRef *obj = checkObject(L, -1); + assert(obj); + FATAL_ERROR_IF(obj->m_object != expect, "ObjectRef table was messed with"); obj->m_object = nullptr; } diff --git a/src/script/lua_api/l_object.h b/src/script/lua_api/l_object.h index 8225aa470..bc131f4f2 100644 --- a/src/script/lua_api/l_object.h +++ b/src/script/lua_api/l_object.h @@ -38,10 +38,12 @@ public: ~ObjectRef() = default; // Creates an ObjectRef and leaves it on top of stack - // Not callable from Lua; all references are created on the C side. + // NOTE: do not call this, use `ScriptApiBase::objectrefGetOrCreate()`! static void create(lua_State *L, ServerActiveObject *object); - static void set_null(lua_State *L); + // Clear the pointer in the ObjectRef (at -1). + // Throws an fatal error if the object pointer wasn't `expect`. + static void set_null(lua_State *L, void *expect); static void Register(lua_State *L); diff --git a/src/unittest/mock_serveractiveobject.h b/src/unittest/mock_serveractiveobject.h index 78e3df8af..995a27e55 100644 --- a/src/unittest/mock_serveractiveobject.h +++ b/src/unittest/mock_serveractiveobject.h @@ -22,7 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc., class MockServerActiveObject : public ServerActiveObject { public: - MockServerActiveObject(ServerEnvironment *env = nullptr, const v3f &p = v3f()) : + MockServerActiveObject(ServerEnvironment *env = nullptr, v3f p = v3f()) : ServerActiveObject(env, p) {} virtual ActiveObjectType getType() const { return ACTIVEOBJECT_TYPE_TEST; } diff --git a/src/unittest/test_moveaction.cpp b/src/unittest/test_moveaction.cpp index 966cea8c7..b3e49341e 100644 --- a/src/unittest/test_moveaction.cpp +++ b/src/unittest/test_moveaction.cpp @@ -68,6 +68,8 @@ void TestMoveAction::runTests(IGameDef *gamedef) auto null_map = std::unique_ptr(); ServerEnvironment server_env(std::move(null_map), &server, &mb); MockServerActiveObject obj(&server_env); + obj.setId(1); + server.getScriptIface()->addObjectReference(&obj); TEST(testMove, &obj, gamedef); TEST(testMoveFillStack, &obj, gamedef); @@ -82,6 +84,8 @@ void TestMoveAction::runTests(IGameDef *gamedef) TEST(testCallbacks, &obj, &server); TEST(testCallbacksSwap, &obj, &server); + + server.getScriptIface()->removeObjectReference(&obj); } static ItemStack parse_itemstack(const char *s) From 3778ed74667c22d6a11ad82f1ed4cb60a9a51799 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Mon, 7 Oct 2024 21:08:47 +0200 Subject: [PATCH 007/178] Keep PlayerMetaRef via name not pointer --- src/script/lua_api/l_object.cpp | 2 +- src/script/lua_api/l_playermeta.cpp | 14 ++++++++++---- src/script/lua_api/l_playermeta.h | 17 ++++++++++++----- 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/src/script/lua_api/l_object.cpp b/src/script/lua_api/l_object.cpp index 7a199e458..cd9be5428 100644 --- a/src/script/lua_api/l_object.cpp +++ b/src/script/lua_api/l_object.cpp @@ -1521,7 +1521,7 @@ int ObjectRef::l_get_meta(lua_State *L) if (playersao == nullptr) return 0; - PlayerMetaRef::create(L, &playersao->getMeta()); + PlayerMetaRef::create(L, &getServer(L)->getEnv(), playersao->getPlayer()->getName()); return 1; } diff --git a/src/script/lua_api/l_playermeta.cpp b/src/script/lua_api/l_playermeta.cpp index e937c145c..a3377c524 100644 --- a/src/script/lua_api/l_playermeta.cpp +++ b/src/script/lua_api/l_playermeta.cpp @@ -21,6 +21,9 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "lua_api/l_playermeta.h" #include "lua_api/l_internal.h" #include "common/c_content.h" +#include "serverenvironment.h" +#include "remoteplayer.h" +#include "server/player_sao.h" /* PlayerMetaRef @@ -28,12 +31,15 @@ with this program; if not, write to the Free Software Foundation, Inc., IMetadata *PlayerMetaRef::getmeta(bool auto_create) { - return metadata; + auto *player = m_env->getPlayer(m_name); + auto *sao = player ? player->getPlayerSAO() : nullptr; + return sao ? &sao->getMeta() : nullptr; } void PlayerMetaRef::clearMeta() { - metadata->clear(); + if (auto *meta = getmeta(true)) + meta->clear(); } void PlayerMetaRef::reportMetadataChange(const std::string *name) @@ -43,9 +49,9 @@ void PlayerMetaRef::reportMetadataChange(const std::string *name) // Creates an PlayerMetaRef and leaves it on top of stack // Not callable from Lua; all references are created on the C side. -void PlayerMetaRef::create(lua_State *L, IMetadata *metadata) +void PlayerMetaRef::create(lua_State *L, ServerEnvironment *env, std::string_view name) { - PlayerMetaRef *o = new PlayerMetaRef(metadata); + PlayerMetaRef *o = new PlayerMetaRef(env, name); *(void **)(lua_newuserdata(L, sizeof(void *))) = o; luaL_getmetatable(L, className); lua_setmetatable(L, -2); diff --git a/src/script/lua_api/l_playermeta.h b/src/script/lua_api/l_playermeta.h index f07bdcd09..3f39c3755 100644 --- a/src/script/lua_api/l_playermeta.h +++ b/src/script/lua_api/l_playermeta.h @@ -24,12 +24,14 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "lua_api/l_metadata.h" #include "irrlichttypes_bloated.h" #include "inventory.h" -#include "metadata.h" + +class ServerEnvironment; class PlayerMetaRef : public MetaDataRef { private: - IMetadata *metadata = nullptr; + ServerEnvironment *m_env; + std::string m_name; static const luaL_Reg methods[]; @@ -40,12 +42,17 @@ private: virtual void reportMetadataChange(const std::string *name = nullptr); public: - PlayerMetaRef(IMetadata *metadata) : metadata(metadata) {} + PlayerMetaRef(ServerEnvironment *env, std::string_view name) : + m_env(env), m_name(name) + { + assert(m_env); + assert(!m_name.empty()); + } ~PlayerMetaRef() = default; - // Creates an ItemStackMetaRef and leaves it on top of stack + // Creates an PlayerMetaRef and leaves it on top of stack // Not callable from Lua; all references are created on the C side. - static void create(lua_State *L, IMetadata *metadata); + static void create(lua_State *L, ServerEnvironment *env, std::string_view name); static void Register(lua_State *L); From dbf103da326479fdae87852a207e360692341dd2 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Mon, 7 Oct 2024 21:15:05 +0200 Subject: [PATCH 008/178] Fix hexadecimal line number in abort msgs --- src/debug.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/debug.cpp b/src/debug.cpp index 04d59a6d7..8a9704dd7 100644 --- a/src/debug.cpp +++ b/src/debug.cpp @@ -54,7 +54,7 @@ void sanity_check_fn(const char *assertion, const char *file, #endif errorstream << std::endl << "In thread " << std::hex - << std::this_thread::get_id() << ":" << std::endl; + << std::this_thread::get_id() << ":\n" << std::dec; errorstream << file << ":" << line << ": " << function << ": An engine assumption '" << assertion << "' failed." << std::endl; @@ -69,7 +69,7 @@ void fatal_error_fn(const char *msg, const char *file, #endif errorstream << std::endl << "In thread " << std::hex - << std::this_thread::get_id() << ":" << std::endl; + << std::this_thread::get_id() << ":\n" << std::dec; errorstream << file << ":" << line << ": " << function << ": A fatal error occurred: " << msg << std::endl; From 99b6315c1a9805a8c2af3b1834b2a3ccfc5438c4 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Tue, 8 Oct 2024 12:14:40 +0200 Subject: [PATCH 009/178] Make logging respect stream flushes also add override keyword and fix overflow() behavior --- src/util/stream.h | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/src/util/stream.h b/src/util/stream.h index 620ad74ba..dbbe22592 100644 --- a/src/util/stream.h +++ b/src/util/stream.h @@ -23,48 +23,55 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include -template > +template > class StringStreamBuffer : public std::streambuf { public: StringStreamBuffer(Emitter emitter) : m_emitter(emitter) { buffer_index = 0; } - int overflow(int c) { - push_back(c); - return c; + int overflow(int c) override { + if (c != traits_type::eof()) + push_back(c); + return 0; } void push_back(char c) { - if (c == '\n' || c == '\r') { - if (buffer_index) - m_emitter(std::string_view(buffer, buffer_index)); - buffer_index = 0; + // emit only complete lines, or if the buffer is full + if (c == '\n') { + sync(); } else { buffer[buffer_index++] = c; if (buffer_index >= BufferLength) { - m_emitter(std::string_view(buffer, buffer_index)); - buffer_index = 0; + sync(); } } } - std::streamsize xsputn(const char *s, std::streamsize n) { + std::streamsize xsputn(const char *s, std::streamsize n) override { for (std::streamsize i = 0; i < n; ++i) push_back(s[i]); return n; } + + int sync() override { + if (buffer_index) + m_emitter(std::string_view(buffer, buffer_index)); + buffer_index = 0; + return 0; + } + private: Emitter m_emitter; + unsigned int buffer_index; char buffer[BufferLength]; - int buffer_index; }; class DummyStreamBuffer : public std::streambuf { - int overflow(int c) { - return c; + int overflow(int c) override { + return 0; } - std::streamsize xsputn(const char *s, std::streamsize n) { + std::streamsize xsputn(const char *s, std::streamsize n) override { return n; } }; From 244f4f285a227129524cf13500cbff5b06ef2383 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Wed, 9 Oct 2024 23:51:27 +0200 Subject: [PATCH 010/178] Alias MutexAutoLock to the simpler std::lock_guard --- src/threading/event.cpp | 8 +++++--- src/threading/mutex_auto_lock.h | 7 +++++-- src/threading/thread.cpp | 4 ++-- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/threading/event.cpp b/src/threading/event.cpp index 885e732c8..1b0c5ac07 100644 --- a/src/threading/event.cpp +++ b/src/threading/event.cpp @@ -28,7 +28,7 @@ DEALINGS IN THE SOFTWARE. void Event::wait() { - MutexAutoLock lock(mutex); + std::unique_lock lock(mutex); while (!notified) { cv.wait(lock); } @@ -38,7 +38,9 @@ void Event::wait() void Event::signal() { - MutexAutoLock lock(mutex); - notified = true; + { + std::lock_guard lock(mutex); + notified = true; + } cv.notify_one(); } diff --git a/src/threading/mutex_auto_lock.h b/src/threading/mutex_auto_lock.h index c809ff8f5..9a2522557 100644 --- a/src/threading/mutex_auto_lock.h +++ b/src/threading/mutex_auto_lock.h @@ -26,5 +26,8 @@ DEALINGS IN THE SOFTWARE. #pragma once #include -using MutexAutoLock = std::unique_lock; -using RecursiveMutexAutoLock = std::unique_lock; + +/// @deprecated use std::lock_guard directly +using MutexAutoLock = std::lock_guard; +/// @deprecated use std::lock_guard directly +using RecursiveMutexAutoLock = std::lock_guard; diff --git a/src/threading/thread.cpp b/src/threading/thread.cpp index f9e356ab7..a4405287d 100644 --- a/src/threading/thread.cpp +++ b/src/threading/thread.cpp @@ -117,7 +117,7 @@ bool Thread::start() // The mutex may already be locked if the thread is being restarted // FIXME: what if this fails, or if already locked by same thread? - MutexAutoLock sf_lock(m_start_finished_mutex, std::try_to_lock); + std::unique_lock sf_lock(m_start_finished_mutex, std::try_to_lock); try { m_thread_obj = new std::thread(threadProc, this); @@ -189,7 +189,7 @@ void Thread::threadProc(Thread *thr) // Wait for the thread that started this one to finish initializing the // thread handle so that getThreadId/getThreadHandle will work. - MutexAutoLock sf_lock(thr->m_start_finished_mutex); + std::unique_lock sf_lock(thr->m_start_finished_mutex); thr->m_retval = thr->run(); From d95e916a4246fa38f0fcd79a07d1542e28336eb5 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Thu, 10 Oct 2024 16:59:21 +0200 Subject: [PATCH 011/178] Defer to read_from_map in VoxelManip ctor concrete problem: the getEmergeThread safety check was missing there --- src/script/lua_api/l_vmanip.cpp | 29 ++++++++++++++--------------- src/script/lua_api/l_vmanip.h | 1 - 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/src/script/lua_api/l_vmanip.cpp b/src/script/lua_api/l_vmanip.cpp index ca7ad7971..33f6f7407 100644 --- a/src/script/lua_api/l_vmanip.cpp +++ b/src/script/lua_api/l_vmanip.cpp @@ -369,36 +369,35 @@ LuaVoxelManip::LuaVoxelManip(Map *map) : vm(new MMVManip(map)) { } -LuaVoxelManip::LuaVoxelManip(Map *map, v3s16 p1, v3s16 p2) -{ - vm = new MMVManip(map); - - v3s16 bp1 = getNodeBlockPos(p1); - v3s16 bp2 = getNodeBlockPos(p2); - sortBoxVerticies(bp1, bp2); - vm->initialEmerge(bp1, bp2); -} - LuaVoxelManip::~LuaVoxelManip() { if (!is_mapgen_vm) delete vm; } -// LuaVoxelManip() +// LuaVoxelManip([p1, p2]) // Creates an LuaVoxelManip and leaves it on top of stack int LuaVoxelManip::create_object(lua_State *L) { GET_ENV_PTR; - Map *map = &(env->getMap()); - LuaVoxelManip *o = (lua_istable(L, 1) && lua_istable(L, 2)) ? - new LuaVoxelManip(map, check_v3s16(L, 1), check_v3s16(L, 2)) : - new LuaVoxelManip(map); + LuaVoxelManip *o = new LuaVoxelManip(&env->getMap()); *(void **)(lua_newuserdata(L, sizeof(void *))) = o; luaL_getmetatable(L, className); lua_setmetatable(L, -2); + + // Call read_from_map so we don't have to duplicate it here + const int top = lua_gettop(L); + if (lua_istable(L, 1) && lua_istable(L, 2)) { + lua_pushcfunction(L, l_read_from_map); + lua_pushvalue(L, top); + lua_pushvalue(L, 1); + lua_pushvalue(L, 2); + lua_call(L, 3, 0); + } + lua_settop(L, top); + return 1; } diff --git a/src/script/lua_api/l_vmanip.h b/src/script/lua_api/l_vmanip.h index 04670bef6..820f89d5a 100644 --- a/src/script/lua_api/l_vmanip.h +++ b/src/script/lua_api/l_vmanip.h @@ -64,7 +64,6 @@ public: MMVManip *vm = nullptr; LuaVoxelManip(MMVManip *mmvm, bool is_mapgen_vm); - LuaVoxelManip(Map *map, v3s16 p1, v3s16 p2); LuaVoxelManip(Map *map); ~LuaVoxelManip(); From cbc741f4642fc644948f74239ed35f7f4ecb0d16 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Sat, 12 Oct 2024 22:26:17 +0200 Subject: [PATCH 012/178] Various improvements to push_json_value --- games/devtest/mods/unittests/misc.lua | 12 +++++++ src/script/common/c_content.cpp | 45 ++++++++++++++------------- 2 files changed, 35 insertions(+), 22 deletions(-) diff --git a/games/devtest/mods/unittests/misc.lua b/games/devtest/mods/unittests/misc.lua index 6a2a33fa7..a807a390f 100644 --- a/games/devtest/mods/unittests/misc.lua +++ b/games/devtest/mods/unittests/misc.lua @@ -153,6 +153,18 @@ local function test_urlencode() end unittests.register("test_urlencode", test_urlencode) +local function test_parse_json() + local raw = "{\"how\\u0000weird\":\n\"yes\\u0000really\",\"n\":-1234567891011,\"z\":null}" + local data = core.parse_json(raw) + assert(data["how\000weird"] == "yes\000really") + assert(data.n == -1234567891011) + assert(data.z == nil) + local null = {} + data = core.parse_json(raw, null) + assert(data.z == null) +end +unittests.register("test_parse_json", test_parse_json) + local function test_game_info() local info = minetest.get_game_info() local game_conf = Settings(info.path .. "/game.conf") diff --git a/src/script/common/c_content.cpp b/src/script/common/c_content.cpp index 9ad067742..348c2559a 100644 --- a/src/script/common/c_content.cpp +++ b/src/script/common/c_content.cpp @@ -2063,6 +2063,10 @@ bool read_tree_def(lua_State *L, int idx, const NodeDefManager *ndef, } /******************************************************************************/ +#if defined(JSONCPP_STRING) || !(JSONCPP_VERSION_MAJOR < 1 || JSONCPP_VERSION_MINOR < 9) +#define HAVE_JSON_STRING +#endif + // Returns depth of json value tree static int push_json_value_getdepth(const Json::Value &value) { @@ -2070,11 +2074,8 @@ static int push_json_value_getdepth(const Json::Value &value) return 1; int maxdepth = 0; - for (const auto &it : value) { - int elemdepth = push_json_value_getdepth(it); - if (elemdepth > maxdepth) - maxdepth = elemdepth; - } + for (const auto &it : value) + maxdepth = std::max(push_json_value_getdepth(it), maxdepth); return maxdepth + 1; } // Recursive function to convert JSON --> Lua table @@ -2087,41 +2088,40 @@ static bool push_json_value_helper(lua_State *L, const Json::Value &value, lua_pushvalue(L, nullindex); break; case Json::intValue: - lua_pushinteger(L, value.asLargestInt()); - break; case Json::uintValue: - lua_pushinteger(L, value.asLargestUInt()); - break; case Json::realValue: + // push everything as a double since Lua integers may be too small lua_pushnumber(L, value.asDouble()); break; - case Json::stringValue: - { - const char *str = value.asCString(); - lua_pushstring(L, str ? str : ""); - } + case Json::stringValue: { +#ifdef HAVE_JSON_STRING + const auto &str = value.asString(); + lua_pushlstring(L, str.c_str(), str.size()); +#else + const char *str = value.asCString(); + lua_pushstring(L, str ? str : ""); +#endif break; + } case Json::booleanValue: lua_pushboolean(L, value.asInt()); break; case Json::arrayValue: lua_createtable(L, value.size(), 0); - for (Json::Value::const_iterator it = value.begin(); - it != value.end(); ++it) { + for (auto it = value.begin(); it != value.end(); ++it) { push_json_value_helper(L, *it, nullindex); lua_rawseti(L, -2, it.index() + 1); } break; case Json::objectValue: lua_createtable(L, 0, value.size()); - for (Json::Value::const_iterator it = value.begin(); - it != value.end(); ++it) { -#if !defined(JSONCPP_STRING) && (JSONCPP_VERSION_MAJOR < 1 || JSONCPP_VERSION_MINOR < 9) + for (auto it = value.begin(); it != value.end(); ++it) { +#ifdef HAVE_JSON_STRING + const auto &str = it.name(); + lua_pushlstring(L, str.c_str(), str.size()); +#else const char *str = it.memberName(); lua_pushstring(L, str ? str : ""); -#else - std::string str = it.name(); - lua_pushstring(L, str.c_str()); #endif push_json_value_helper(L, *it, nullindex); lua_rawset(L, -3); @@ -2130,6 +2130,7 @@ static bool push_json_value_helper(lua_State *L, const Json::Value &value, } return true; } + // converts JSON --> Lua table; returns false if lua stack limit exceeded // nullindex: Lua stack index of value to use in place of JSON null bool push_json_value(lua_State *L, const Json::Value &value, int nullindex) From dbbe0ca065b3fff86398d64156ade42de97b57f7 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Sat, 12 Oct 2024 22:28:56 +0200 Subject: [PATCH 013/178] Update jsoncpp copy to 1.9.6 note: the version number is different due to https://github.com/open-source-parsers/jsoncpp/issues/1571 --- lib/jsoncpp/json/UPDATING | 2 +- lib/jsoncpp/json/json-forwards.h | 31 ++-- lib/jsoncpp/json/json.h | 145 +++++++++++++----- lib/jsoncpp/jsoncpp.cpp | 246 ++++++++++++++++++------------- 4 files changed, 278 insertions(+), 146 deletions(-) diff --git a/lib/jsoncpp/json/UPDATING b/lib/jsoncpp/json/UPDATING index c96ade51c..f299a33ba 100644 --- a/lib/jsoncpp/json/UPDATING +++ b/lib/jsoncpp/json/UPDATING @@ -1,6 +1,6 @@ #!/bin/sh cd .. -git clone https://github.com/open-source-parsers/jsoncpp -b 1.9.5 --depth 1 +git clone https://github.com/open-source-parsers/jsoncpp -b 1.9.6 --depth 1 cd jsoncpp ./amalgamate.py cp -R dist/json ../json diff --git a/lib/jsoncpp/json/json-forwards.h b/lib/jsoncpp/json/json-forwards.h index dda924f83..6800f787f 100644 --- a/lib/jsoncpp/json/json-forwards.h +++ b/lib/jsoncpp/json/json-forwards.h @@ -1,4 +1,4 @@ -/// Json-cpp amalgamated forward header (http://jsoncpp.sourceforge.net/). +/// Json-cpp amalgamated forward header (https://github.com/open-source-parsers/jsoncpp/). /// It is intended to be used with #include "json/json-forwards.h" /// This header provides forward declaration for all JsonCpp types. @@ -94,19 +94,18 @@ license you like. // 3. /CMakeLists.txt // IMPORTANT: also update the SOVERSION!! -#define JSONCPP_VERSION_STRING "1.9.5" +#define JSONCPP_VERSION_STRING "1.9.7" #define JSONCPP_VERSION_MAJOR 1 #define JSONCPP_VERSION_MINOR 9 -#define JSONCPP_VERSION_PATCH 5 +#define JSONCPP_VERSION_PATCH 7 #define JSONCPP_VERSION_QUALIFIER #define JSONCPP_VERSION_HEXA \ ((JSONCPP_VERSION_MAJOR << 24) | (JSONCPP_VERSION_MINOR << 16) | \ (JSONCPP_VERSION_PATCH << 8)) -#ifdef JSONCPP_USING_SECURE_MEMORY -#undef JSONCPP_USING_SECURE_MEMORY +#if !defined(JSONCPP_USE_SECURE_MEMORY) +#define JSONCPP_USE_SECURE_MEMORY 0 #endif -#define JSONCPP_USING_SECURE_MEMORY 0 // If non-zero, the library zeroes any memory that it has allocated before // it frees its memory. @@ -133,10 +132,12 @@ license you like. #ifndef JSON_ALLOCATOR_H_INCLUDED #define JSON_ALLOCATOR_H_INCLUDED +#include #include #include -#pragma pack(push, 8) +#pragma pack(push) +#pragma pack() namespace Json { template class SecureAllocator { @@ -164,8 +165,16 @@ public: * The memory block is filled with zeroes before being released. */ void deallocate(pointer p, size_type n) { - // memset_s is used because memset may be optimized away by the compiler + // These constructs will not be removed by the compiler during optimization, + // unlike memset. +#if defined(HAVE_MEMSET_S) memset_s(p, n * sizeof(T), 0, n * sizeof(T)); +#elif defined(_WIN32) + RtlSecureZeroMemory(p, n * sizeof(T)); +#else + std::fill_n(reinterpret_cast(p), n, 0); +#endif + // free using "global operator delete" ::operator delete(p); } @@ -195,7 +204,9 @@ public: // Boilerplate SecureAllocator() {} template SecureAllocator(const SecureAllocator&) {} - template struct rebind { using other = SecureAllocator; }; + template struct rebind { + using other = SecureAllocator; + }; }; template @@ -356,7 +367,7 @@ using LargestUInt = UInt64; template using Allocator = - typename std::conditional, + typename std::conditional, std::allocator>::type; using String = std::basic_string, Allocator>; using IStringStream = diff --git a/lib/jsoncpp/json/json.h b/lib/jsoncpp/json/json.h index b280790a4..d81f7dc0f 100644 --- a/lib/jsoncpp/json/json.h +++ b/lib/jsoncpp/json/json.h @@ -1,4 +1,4 @@ -/// Json-cpp amalgamated header (http://jsoncpp.sourceforge.net/). +/// Json-cpp amalgamated header (https://github.com/open-source-parsers/jsoncpp/). /// It is intended to be used with #include "json/json.h" // ////////////////////////////////////////////////////////////////////// @@ -93,19 +93,18 @@ license you like. // 3. /CMakeLists.txt // IMPORTANT: also update the SOVERSION!! -#define JSONCPP_VERSION_STRING "1.9.5" +#define JSONCPP_VERSION_STRING "1.9.7" #define JSONCPP_VERSION_MAJOR 1 #define JSONCPP_VERSION_MINOR 9 -#define JSONCPP_VERSION_PATCH 5 +#define JSONCPP_VERSION_PATCH 7 #define JSONCPP_VERSION_QUALIFIER #define JSONCPP_VERSION_HEXA \ ((JSONCPP_VERSION_MAJOR << 24) | (JSONCPP_VERSION_MINOR << 16) | \ (JSONCPP_VERSION_PATCH << 8)) -#ifdef JSONCPP_USING_SECURE_MEMORY -#undef JSONCPP_USING_SECURE_MEMORY +#if !defined(JSONCPP_USE_SECURE_MEMORY) +#define JSONCPP_USE_SECURE_MEMORY 0 #endif -#define JSONCPP_USING_SECURE_MEMORY 0 // If non-zero, the library zeroes any memory that it has allocated before // it frees its memory. @@ -132,10 +131,12 @@ license you like. #ifndef JSON_ALLOCATOR_H_INCLUDED #define JSON_ALLOCATOR_H_INCLUDED +#include #include #include -#pragma pack(push, 8) +#pragma pack(push) +#pragma pack() namespace Json { template class SecureAllocator { @@ -163,8 +164,16 @@ public: * The memory block is filled with zeroes before being released. */ void deallocate(pointer p, size_type n) { - // memset_s is used because memset may be optimized away by the compiler + // These constructs will not be removed by the compiler during optimization, + // unlike memset. +#if defined(HAVE_MEMSET_S) memset_s(p, n * sizeof(T), 0, n * sizeof(T)); +#elif defined(_WIN32) + RtlSecureZeroMemory(p, n * sizeof(T)); +#else + std::fill_n(reinterpret_cast(p), n, 0); +#endif + // free using "global operator delete" ::operator delete(p); } @@ -194,7 +203,9 @@ public: // Boilerplate SecureAllocator() {} template SecureAllocator(const SecureAllocator&) {} - template struct rebind { using other = SecureAllocator; }; + template struct rebind { + using other = SecureAllocator; + }; }; template @@ -355,7 +366,7 @@ using LargestUInt = UInt64; template using Allocator = - typename std::conditional, + typename std::conditional, std::allocator>::type; using String = std::basic_string, Allocator>; using IStringStream = @@ -459,7 +470,8 @@ class ValueConstIterator; #include "forwards.h" #endif // if !defined(JSON_IS_AMALGAMATION) -#pragma pack(push, 8) +#pragma pack(push) +#pragma pack() namespace Json { @@ -527,8 +539,8 @@ public: // recognized in your jurisdiction. // See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE -#ifndef JSON_H_INCLUDED -#define JSON_H_INCLUDED +#ifndef JSON_VALUE_H_INCLUDED +#define JSON_VALUE_H_INCLUDED #if !defined(JSON_IS_AMALGAMATION) #include "forwards.h" @@ -577,7 +589,8 @@ public: #pragma warning(disable : 4251 4275) #endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) -#pragma pack(push, 8) +#pragma pack(push) +#pragma pack() /** \brief JSON (JavaScript Object Notation). */ @@ -898,7 +911,7 @@ public: int compare(const Value& other) const; const char* asCString() const; ///< Embedded zeroes could cause you trouble! -#if JSONCPP_USING_SECURE_MEMORY +#if JSONCPP_USE_SECURE_MEMORY unsigned getCStringLength() const; // Allows you to understand the length of // the CString #endif @@ -960,7 +973,7 @@ public: /// \post type() is arrayValue void resize(ArrayIndex newSize); - //@{ + ///@{ /// Access an array element (zero based index). If the array contains less /// than index element, then null value are inserted in the array so that /// its size is index+1. @@ -968,15 +981,15 @@ public: /// this from the operator[] which takes a string.) Value& operator[](ArrayIndex index); Value& operator[](int index); - //@} + ///@} - //@{ + ///@{ /// Access an array element (zero based index). /// (You may need to say 'value[0u]' to get your compiler to distinguish /// this from the operator[] which takes a string.) const Value& operator[](ArrayIndex index) const; const Value& operator[](int index) const; - //@} + ///@} /// If the array contains at least index+1 elements, returns the element /// value, otherwise returns defaultValue. @@ -1036,6 +1049,9 @@ public: /// and operator[]const /// \note As stated elsewhere, behavior is undefined if (end-begin) >= 2^30 Value const* find(char const* begin, char const* end) const; + /// Most general and efficient version of isMember()const, get()const, + /// and operator[]const + Value const* find(const String& key) const; /// Most general and efficient version of object-mutators. /// \note As stated elsewhere, behavior is undefined if (end-begin) >= 2^30 /// \return non-zero, but JSON_ASSERT if this is neither object nor nullValue. @@ -1108,6 +1124,26 @@ public: iterator begin(); iterator end(); + /// \brief Returns a reference to the first element in the `Value`. + /// Requires that this value holds an array or json object, with at least one + /// element. + const Value& front() const; + + /// \brief Returns a reference to the first element in the `Value`. + /// Requires that this value holds an array or json object, with at least one + /// element. + Value& front(); + + /// \brief Returns a reference to the last element in the `Value`. + /// Requires that value holds an array or json object, with at least one + /// element. + const Value& back() const; + + /// \brief Returns a reference to the last element in the `Value`. + /// Requires that this value holds an array or json object, with at least one + /// element. + Value& back(); + // Accessors for the [start, limit) range of bytes within the JSON text from // which this value was parsed, if any. void setOffsetStart(ptrdiff_t start); @@ -1448,6 +1484,14 @@ public: inline void swap(Value& a, Value& b) { a.swap(b); } +inline const Value& Value::front() const { return *begin(); } + +inline Value& Value::front() { return *begin(); } + +inline const Value& Value::back() const { return *(--end()); } + +inline Value& Value::back() { return *(--end()); } + } // namespace Json #pragma pack(pop) @@ -1496,7 +1540,8 @@ inline void swap(Value& a, Value& b) { a.swap(b); } #pragma warning(disable : 4251) #endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) -#pragma pack(push, 8) +#pragma pack(push) +#pragma pack() namespace Json { @@ -1523,12 +1568,12 @@ public: }; /** \brief Constructs a Reader allowing all features for parsing. - * \deprecated Use CharReader and CharReaderBuilder. + * \deprecated Use CharReader and CharReaderBuilder. */ Reader(); /** \brief Constructs a Reader allowing the specified feature set for parsing. - * \deprecated Use CharReader and CharReaderBuilder. + * \deprecated Use CharReader and CharReaderBuilder. */ Reader(const Features& features); @@ -1662,6 +1707,7 @@ private: using Errors = std::deque; bool readToken(Token& token); + bool readTokenSkippingComments(Token& token); void skipSpaces(); bool match(const Char* pattern, int patternLength); bool readComment(); @@ -1693,7 +1739,6 @@ private: int& column) const; String getLocationLineAndColumn(Location location) const; void addComment(Location begin, Location end, CommentPlacement placement); - void skipCommentTokens(Token& token); static bool containsNewLine(Location begin, Location end); static String normalizeEOL(Location begin, Location end); @@ -1716,6 +1761,12 @@ private: */ class JSON_API CharReader { public: + struct JSON_API StructuredError { + ptrdiff_t offset_start; + ptrdiff_t offset_limit; + String message; + }; + virtual ~CharReader() = default; /** \brief Read a Value from a JSON * document. The document must be a UTF-8 encoded string containing the @@ -1734,7 +1785,12 @@ public: * error occurred. */ virtual bool parse(char const* beginDoc, char const* endDoc, Value* root, - String* errs) = 0; + String* errs); + + /** \brief Returns a vector of structured errors encountered while parsing. + * Each parse call resets the stored list of errors. + */ + std::vector getStructuredErrors() const; class JSON_API Factory { public: @@ -1744,7 +1800,21 @@ public: */ virtual CharReader* newCharReader() const = 0; }; // Factory -}; // CharReader + +protected: + class Impl { + public: + virtual ~Impl() = default; + virtual bool parse(char const* beginDoc, char const* endDoc, Value* root, + String* errs) = 0; + virtual std::vector getStructuredErrors() const = 0; + }; + + explicit CharReader(std::unique_ptr impl) : _impl(std::move(impl)) {} + +private: + std::unique_ptr _impl; +}; // CharReader /** \brief Build a CharReader implementation. * @@ -1832,6 +1902,12 @@ public: * \snippet src/lib_json/json_reader.cpp CharReaderBuilderStrictMode */ static void strictMode(Json::Value* settings); + /** ECMA-404 mode. + * \pre 'settings' != NULL (but Json::null is fine) + * \remark Defaults: + * \snippet src/lib_json/json_reader.cpp CharReaderBuilderECMA404Mode + */ + static void ecma404Mode(Json::Value* settings); }; /** Consume entire stream and use its begin/end. @@ -1912,7 +1988,8 @@ JSON_API IStream& operator>>(IStream&, Value&); #pragma warning(disable : 4251) #endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) -#pragma pack(push, 8) +#pragma pack(push) +#pragma pack() namespace Json { @@ -1955,7 +2032,7 @@ public: */ virtual StreamWriter* newStreamWriter() const = 0; }; // Factory -}; // StreamWriter +}; // StreamWriter /** \brief Write into stringstream, then return string, for convenience. * A StreamWriter will be created from the factory, used, and then deleted. @@ -2059,8 +2136,7 @@ public: #pragma warning(push) #pragma warning(disable : 4996) // Deriving from deprecated class #endif -class JSON_API FastWriter - : public Writer { +class JSON_API FastWriter : public Writer { public: FastWriter(); ~FastWriter() override = default; @@ -2109,7 +2185,7 @@ private: * - otherwise, it the values do not fit on one line, or the array contains * object or non empty array, then print one value per line. * - * If the Value have comments then they are outputed according to their + * If the Value have comments then they are outputted according to their *#CommentPlacement. * * \sa Reader, Value, Value::setComment() @@ -2119,8 +2195,7 @@ private: #pragma warning(push) #pragma warning(disable : 4996) // Deriving from deprecated class #endif -class JSON_API - StyledWriter : public Writer { +class JSON_API StyledWriter : public Writer { public: StyledWriter(); ~StyledWriter() override = default; @@ -2178,7 +2253,7 @@ private: * - otherwise, it the values do not fit on one line, or the array contains * object or non empty array, then print one value per line. * - * If the Value have comments then they are outputed according to their + * If the Value have comments then they are outputted according to their #CommentPlacement. * * \sa Reader, Value, Value::setComment() @@ -2188,8 +2263,7 @@ private: #pragma warning(push) #pragma warning(disable : 4996) // Deriving from deprecated class #endif -class JSON_API - StyledStreamWriter { +class JSON_API StyledStreamWriter { public: /** * \param indentation Each level will be indented by this amount extra. @@ -2245,6 +2319,7 @@ String JSON_API valueToString( PrecisionType precisionType = PrecisionType::significantDigits); String JSON_API valueToString(bool value); String JSON_API valueToQuotedString(const char* value); +String JSON_API valueToQuotedString(const char* value, size_t length); /// \brief Output using the StyledStreamWriter. /// \see Json::operator>>() diff --git a/lib/jsoncpp/jsoncpp.cpp b/lib/jsoncpp/jsoncpp.cpp index 2ec052c94..758f451c6 100644 --- a/lib/jsoncpp/jsoncpp.cpp +++ b/lib/jsoncpp/jsoncpp.cpp @@ -1,4 +1,4 @@ -/// Json-cpp amalgamated source (http://jsoncpp.sourceforge.net/). +/// Json-cpp amalgamated source (https://github.com/open-source-parsers/jsoncpp/). /// It is intended to be used with #include "json/json.h" // ////////////////////////////////////////////////////////////////////// @@ -250,6 +250,7 @@ Iter fixZerosInTheEnd(Iter begin, Iter end, unsigned int precision) { #endif // if !defined(JSON_IS_AMALGAMATION) #include #include +#include #include #include #include @@ -366,7 +367,7 @@ bool Reader::parse(const char* beginDoc, const char* endDoc, Value& root, bool successful = readValue(); Token token; - skipCommentTokens(token); + readTokenSkippingComments(token); if (collectComments_ && !commentsBefore_.empty()) root.setComment(commentsBefore_, commentAfter); if (features_.strictRoot_) { @@ -394,7 +395,7 @@ bool Reader::readValue() { throwRuntimeError("Exceeded stackLimit in readValue()."); Token token; - skipCommentTokens(token); + readTokenSkippingComments(token); bool successful = true; if (collectComments_ && !commentsBefore_.empty()) { @@ -462,14 +463,14 @@ bool Reader::readValue() { return successful; } -void Reader::skipCommentTokens(Token& token) { +bool Reader::readTokenSkippingComments(Token& token) { + bool success = readToken(token); if (features_.allowComments_) { - do { - readToken(token); - } while (token.type_ == tokenComment); - } else { - readToken(token); + while (success && token.type_ == tokenComment) { + success = readToken(token); + } } + return success; } bool Reader::readToken(Token& token) { @@ -683,12 +684,7 @@ bool Reader::readObject(Token& token) { Value init(objectValue); currentValue().swapPayload(init); currentValue().setOffsetStart(token.start_ - begin_); - while (readToken(tokenName)) { - bool initialTokenOk = true; - while (tokenName.type_ == tokenComment && initialTokenOk) - initialTokenOk = readToken(tokenName); - if (!initialTokenOk) - break; + while (readTokenSkippingComments(tokenName)) { if (tokenName.type_ == tokenObjectEnd && name.empty()) // empty object return true; name.clear(); @@ -717,15 +713,11 @@ bool Reader::readObject(Token& token) { return recoverFromError(tokenObjectEnd); Token comma; - if (!readToken(comma) || - (comma.type_ != tokenObjectEnd && comma.type_ != tokenArraySeparator && - comma.type_ != tokenComment)) { + if (!readTokenSkippingComments(comma) || + (comma.type_ != tokenObjectEnd && comma.type_ != tokenArraySeparator)) { return addErrorAndRecover("Missing ',' or '}' in object declaration", comma, tokenObjectEnd); } - bool finalizeTokenOk = true; - while (comma.type_ == tokenComment && finalizeTokenOk) - finalizeTokenOk = readToken(comma); if (comma.type_ == tokenObjectEnd) return true; } @@ -755,10 +747,7 @@ bool Reader::readArray(Token& token) { Token currentToken; // Accept Comment after last item in the array. - ok = readToken(currentToken); - while (currentToken.type_ == tokenComment && ok) { - ok = readToken(currentToken); - } + ok = readTokenSkippingComments(currentToken); bool badTokenType = (currentToken.type_ != tokenArraySeparator && currentToken.type_ != tokenArrayEnd); if (!ok || badTokenType) { @@ -836,11 +825,16 @@ bool Reader::decodeDouble(Token& token) { bool Reader::decodeDouble(Token& token, Value& decoded) { double value = 0; - String buffer(token.start_, token.end_); - IStringStream is(buffer); - if (!(is >> value)) - return addError( - "'" + String(token.start_, token.end_) + "' is not a number.", token); + IStringStream is(String(token.start_, token.end_)); + if (!(is >> value)) { + if (value == std::numeric_limits::max()) + value = std::numeric_limits::infinity(); + else if (value == std::numeric_limits::lowest()) + value = -std::numeric_limits::infinity(); + else if (!std::isinf(value)) + return addError( + "'" + String(token.start_, token.end_) + "' is not a number.", token); + } decoded = value; return true; } @@ -1004,7 +998,7 @@ void Reader::getLocationLineAndColumn(Location location, int& line, while (current < location && current != end_) { Char c = *current++; if (c == '\r') { - if (*current == '\n') + if (current != end_ && *current == '\n') ++current; lastLineStart = current; ++line; @@ -1121,17 +1115,12 @@ class OurReader { public: using Char = char; using Location = const Char*; - struct StructuredError { - ptrdiff_t offset_start; - ptrdiff_t offset_limit; - String message; - }; explicit OurReader(OurFeatures const& features); bool parse(const char* beginDoc, const char* endDoc, Value& root, bool collectComments = true); String getFormattedErrorMessages() const; - std::vector getStructuredErrors() const; + std::vector getStructuredErrors() const; private: OurReader(OurReader const&); // no impl @@ -1174,6 +1163,7 @@ private: using Errors = std::deque; bool readToken(Token& token); + bool readTokenSkippingComments(Token& token); void skipSpaces(); void skipBom(bool skipBom); bool match(const Char* pattern, int patternLength); @@ -1207,7 +1197,6 @@ private: int& column) const; String getLocationLineAndColumn(Location location) const; void addComment(Location begin, Location end, CommentPlacement placement); - void skipCommentTokens(Token& token); static String normalizeEOL(Location begin, Location end); static bool containsNewLine(Location begin, Location end); @@ -1261,7 +1250,7 @@ bool OurReader::parse(const char* beginDoc, const char* endDoc, Value& root, bool successful = readValue(); nodes_.pop(); Token token; - skipCommentTokens(token); + readTokenSkippingComments(token); if (features_.failIfExtra_ && (token.type_ != tokenEndOfStream)) { addError("Extra non-whitespace after JSON value.", token); return false; @@ -1289,7 +1278,7 @@ bool OurReader::readValue() { if (nodes_.size() > features_.stackLimit_) throwRuntimeError("Exceeded stackLimit in readValue()."); Token token; - skipCommentTokens(token); + readTokenSkippingComments(token); bool successful = true; if (collectComments_ && !commentsBefore_.empty()) { @@ -1376,14 +1365,14 @@ bool OurReader::readValue() { return successful; } -void OurReader::skipCommentTokens(Token& token) { +bool OurReader::readTokenSkippingComments(Token& token) { + bool success = readToken(token); if (features_.allowComments_) { - do { - readToken(token); - } while (token.type_ == tokenComment); - } else { - readToken(token); + while (success && token.type_ == tokenComment) { + success = readToken(token); + } } + return success; } bool OurReader::readToken(Token& token) { @@ -1680,12 +1669,7 @@ bool OurReader::readObject(Token& token) { Value init(objectValue); currentValue().swapPayload(init); currentValue().setOffsetStart(token.start_ - begin_); - while (readToken(tokenName)) { - bool initialTokenOk = true; - while (tokenName.type_ == tokenComment && initialTokenOk) - initialTokenOk = readToken(tokenName); - if (!initialTokenOk) - break; + while (readTokenSkippingComments(tokenName)) { if (tokenName.type_ == tokenObjectEnd && (name.empty() || features_.allowTrailingCommas_)) // empty object or trailing comma @@ -1722,15 +1706,11 @@ bool OurReader::readObject(Token& token) { return recoverFromError(tokenObjectEnd); Token comma; - if (!readToken(comma) || - (comma.type_ != tokenObjectEnd && comma.type_ != tokenArraySeparator && - comma.type_ != tokenComment)) { + if (!readTokenSkippingComments(comma) || + (comma.type_ != tokenObjectEnd && comma.type_ != tokenArraySeparator)) { return addErrorAndRecover("Missing ',' or '}' in object declaration", comma, tokenObjectEnd); } - bool finalizeTokenOk = true; - while (comma.type_ == tokenComment && finalizeTokenOk) - finalizeTokenOk = readToken(comma); if (comma.type_ == tokenObjectEnd) return true; } @@ -1764,10 +1744,7 @@ bool OurReader::readArray(Token& token) { Token currentToken; // Accept Comment after last item in the array. - ok = readToken(currentToken); - while (currentToken.type_ == tokenComment && ok) { - ok = readToken(currentToken); - } + ok = readTokenSkippingComments(currentToken); bool badTokenType = (currentToken.type_ != tokenArraySeparator && currentToken.type_ != tokenArrayEnd); if (!ok || badTokenType) { @@ -1845,7 +1822,7 @@ bool OurReader::decodeNumber(Token& token, Value& decoded) { const auto digit(static_cast(c - '0')); if (value >= threshold) { // We've hit or exceeded the max value divided by 10 (rounded down). If - // a) we've only just touched the limit, meaing value == threshold, + // a) we've only just touched the limit, meaning value == threshold, // b) this is the last digit, or // c) it's small enough to fit in that rounding delta, we're okay. // Otherwise treat this number as a double to avoid overflow. @@ -1882,11 +1859,15 @@ bool OurReader::decodeDouble(Token& token) { bool OurReader::decodeDouble(Token& token, Value& decoded) { double value = 0; - const String buffer(token.start_, token.end_); - IStringStream is(buffer); + IStringStream is(String(token.start_, token.end_)); if (!(is >> value)) { - return addError( - "'" + String(token.start_, token.end_) + "' is not a number.", token); + if (value == std::numeric_limits::max()) + value = std::numeric_limits::infinity(); + else if (value == std::numeric_limits::lowest()) + value = -std::numeric_limits::infinity(); + else if (!std::isinf(value)) + return addError( + "'" + String(token.start_, token.end_) + "' is not a number.", token); } decoded = value; return true; @@ -2051,7 +2032,7 @@ void OurReader::getLocationLineAndColumn(Location location, int& line, while (current < location && current != end_) { Char c = *current++; if (c == '\r') { - if (*current == '\n') + if (current != end_ && *current == '\n') ++current; lastLineStart = current; ++line; @@ -2086,10 +2067,11 @@ String OurReader::getFormattedErrorMessages() const { return formattedMessage; } -std::vector OurReader::getStructuredErrors() const { - std::vector allErrors; +std::vector +OurReader::getStructuredErrors() const { + std::vector allErrors; for (const auto& error : errors_) { - OurReader::StructuredError structured; + CharReader::StructuredError structured; structured.offset_start = error.token_.start_ - begin_; structured.offset_limit = error.token_.end_ - begin_; structured.message = error.message_; @@ -2099,20 +2081,36 @@ std::vector OurReader::getStructuredErrors() const { } class OurCharReader : public CharReader { - bool const collectComments_; - OurReader reader_; public: OurCharReader(bool collectComments, OurFeatures const& features) - : collectComments_(collectComments), reader_(features) {} - bool parse(char const* beginDoc, char const* endDoc, Value* root, - String* errs) override { - bool ok = reader_.parse(beginDoc, endDoc, *root, collectComments_); - if (errs) { - *errs = reader_.getFormattedErrorMessages(); + : CharReader( + std::unique_ptr(new OurImpl(collectComments, features))) {} + +protected: + class OurImpl : public Impl { + public: + OurImpl(bool collectComments, OurFeatures const& features) + : collectComments_(collectComments), reader_(features) {} + + bool parse(char const* beginDoc, char const* endDoc, Value* root, + String* errs) override { + bool ok = reader_.parse(beginDoc, endDoc, *root, collectComments_); + if (errs) { + *errs = reader_.getFormattedErrorMessages(); + } + return ok; } - return ok; - } + + std::vector + getStructuredErrors() const override { + return reader_.getStructuredErrors(); + } + + private: + bool const collectComments_; + OurReader reader_; + }; }; CharReaderBuilder::CharReaderBuilder() { setDefaults(&settings_); } @@ -2201,6 +2199,32 @@ void CharReaderBuilder::setDefaults(Json::Value* settings) { (*settings)["skipBom"] = true; //! [CharReaderBuilderDefaults] } +// static +void CharReaderBuilder::ecma404Mode(Json::Value* settings) { + //! [CharReaderBuilderECMA404Mode] + (*settings)["allowComments"] = false; + (*settings)["allowTrailingCommas"] = false; + (*settings)["strictRoot"] = false; + (*settings)["allowDroppedNullPlaceholders"] = false; + (*settings)["allowNumericKeys"] = false; + (*settings)["allowSingleQuotes"] = false; + (*settings)["stackLimit"] = 1000; + (*settings)["failIfExtra"] = true; + (*settings)["rejectDupKeys"] = false; + (*settings)["allowSpecialFloats"] = false; + (*settings)["skipBom"] = false; + //! [CharReaderBuilderECMA404Mode] +} + +std::vector +CharReader::getStructuredErrors() const { + return _impl->getStructuredErrors(); +} + +bool CharReader::parse(char const* beginDoc, char const* endDoc, Value* root, + String* errs) { + return _impl->parse(beginDoc, endDoc, root, errs); +} ////////////////////////////////// // global functions @@ -2209,7 +2233,7 @@ bool parseFromStream(CharReader::Factory const& fact, IStream& sin, Value* root, String* errs) { OStringStream ssin; ssin << sin.rdbuf(); - String doc = ssin.str(); + String doc = std::move(ssin).str(); char const* begin = doc.data(); char const* end = begin + doc.size(); // Note that we do not actually need a null-terminator. @@ -2501,7 +2525,8 @@ template static inline bool InRange(double d, T min, U max) { // The casts can lose precision, but we are looking only for // an approximate range. Might fail on edge cases though. ~cdunn - return d >= static_cast(min) && d <= static_cast(max); + return d >= static_cast(min) && d <= static_cast(max) && + !(static_cast(d) == min && d != static_cast(min)); } #else // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) static inline double integerToDouble(Json::UInt64 value) { @@ -2515,7 +2540,8 @@ template static inline double integerToDouble(T value) { template static inline bool InRange(double d, T min, U max) { - return d >= integerToDouble(min) && d <= integerToDouble(max); + return d >= integerToDouble(min) && d <= integerToDouble(max) && + !(static_cast(d) == min && d != integerToDouble(min)); } #endif // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) @@ -2577,7 +2603,7 @@ inline static void decodePrefixedString(bool isPrefixed, char const* prefixed, /** Free the string duplicated by * duplicateStringValue()/duplicateAndPrefixStringValue(). */ -#if JSONCPP_USING_SECURE_MEMORY +#if JSONCPP_USE_SECURE_MEMORY static inline void releasePrefixedStringValue(char* value) { unsigned length = 0; char const* valueDecoded; @@ -2592,10 +2618,10 @@ static inline void releaseStringValue(char* value, unsigned length) { memset(value, 0, size); free(value); } -#else // !JSONCPP_USING_SECURE_MEMORY +#else // !JSONCPP_USE_SECURE_MEMORY static inline void releasePrefixedStringValue(char* value) { free(value); } static inline void releaseStringValue(char* value, unsigned) { free(value); } -#endif // JSONCPP_USING_SECURE_MEMORY +#endif // JSONCPP_USE_SECURE_MEMORY } // namespace Json @@ -3013,7 +3039,7 @@ const char* Value::asCString() const { return this_str; } -#if JSONCPP_USING_SECURE_MEMORY +#if JSONCPP_USE_SECURE_MEMORY unsigned Value::getCStringLength() const { JSON_ASSERT_MESSAGE(type() == stringValue, "in Json::Value::asCString(): requires stringValue"); @@ -3119,6 +3145,11 @@ Value::Int64 Value::asInt64() const { JSON_ASSERT_MESSAGE(isInt64(), "LargestUInt out of Int64 range"); return Int64(value_.uint_); case realValue: + // If the double value is in proximity to minInt64, it will be rounded to + // minInt64. The correct value in this scenario is indeterminable + JSON_ASSERT_MESSAGE( + value_.real_ != minInt64, + "Double value is minInt64, precise value cannot be determined"); JSON_ASSERT_MESSAGE(InRange(value_.real_, minInt64, maxInt64), "double out of Int64 range"); return Int64(value_.real_); @@ -3506,6 +3537,9 @@ Value const* Value::find(char const* begin, char const* end) const { return nullptr; return &(*it).second; } +Value const* Value::find(const String& key) const { + return find(key.data(), key.data() + key.length()); +} Value* Value::demand(char const* begin, char const* end) { JSON_ASSERT_MESSAGE(type() == nullValue || type() == objectValue, "in Json::Value::demand(begin, end): requires " @@ -3519,7 +3553,7 @@ const Value& Value::operator[](const char* key) const { return *found; } Value const& Value::operator[](const String& key) const { - Value const* found = find(key.data(), key.data() + key.length()); + Value const* found = find(key); if (!found) return nullSingleton(); return *found; @@ -3619,7 +3653,7 @@ bool Value::removeIndex(ArrayIndex index, Value* removed) { return false; } if (removed) - *removed = it->second; + *removed = std::move(it->second); ArrayIndex oldSize = size(); // shift left all items left, into the place of the "removed" for (ArrayIndex i = index; i < (oldSize - 1); ++i) { @@ -3722,8 +3756,12 @@ bool Value::isInt64() const { // Note that maxInt64 (= 2^63 - 1) is not exactly representable as a // double, so double(maxInt64) will be rounded up to 2^63. Therefore we // require the value to be strictly less than the limit. - return value_.real_ >= double(minInt64) && - value_.real_ < double(maxInt64) && IsIntegral(value_.real_); + // minInt64 is -2^63 which can be represented as a double, but since double + // values in its proximity are also rounded to -2^63, we require the value + // to be strictly greater than the limit to avoid returning 'true' for + // values that are not in the range + return value_.real_ > double(minInt64) && value_.real_ < double(maxInt64) && + IsIntegral(value_.real_); default: break; } @@ -3761,7 +3799,11 @@ bool Value::isIntegral() const { // Note that maxUInt64 (= 2^64 - 1) is not exactly representable as a // double, so double(maxUInt64) will be rounded up to 2^64. Therefore we // require the value to be strictly less than the limit. - return value_.real_ >= double(minInt64) && + // minInt64 is -2^63 which can be represented as a double, but since double + // values in its proximity are also rounded to -2^63, we require the value + // to be strictly greater than the limit to avoid returning 'true' for + // values that are not in the range + return value_.real_ > double(minInt64) && value_.real_ < maxUInt64AsDouble && IsIntegral(value_.real_); #else return value_.real_ >= minInt && value_.real_ <= maxUInt && @@ -3824,9 +3866,8 @@ void Value::setComment(String comment, CommentPlacement placement) { // Always discard trailing newline, to aid indentation. comment.pop_back(); } - JSON_ASSERT(!comment.empty()); JSON_ASSERT_MESSAGE( - comment[0] == '\0' || comment[0] == '/', + comment.empty() || comment[0] == '/', "in Json::Value::setComment(): Comments must start with /"); comments_.set(placement, std::move(comment)); } @@ -4194,8 +4235,9 @@ String valueToString(double value, bool useSpecialFloats, if (!isfinite(value)) { static const char* const reps[2][3] = {{"NaN", "-Infinity", "Infinity"}, {"null", "-1e+9999", "1e+9999"}}; - return reps[useSpecialFloats ? 0 : 1] - [isnan(value) ? 0 : (value < 0) ? 1 : 2]; + return reps[useSpecialFloats ? 0 : 1][isnan(value) ? 0 + : (value < 0) ? 1 + : 2]; } String buffer(size_t(36), '\0'); @@ -4415,6 +4457,10 @@ String valueToQuotedString(const char* value) { return valueToQuotedStringN(value, strlen(value)); } +String valueToQuotedString(const char* value, size_t length) { + return valueToQuotedStringN(value, length); +} + // Class Writer // ////////////////////////////////////////////////////////////////// Writer::~Writer() = default; @@ -4552,7 +4598,7 @@ void StyledWriter::writeValue(const Value& value) { const String& name = *it; const Value& childValue = value[name]; writeCommentBeforeValue(childValue); - writeWithIndent(valueToQuotedString(name.c_str())); + writeWithIndent(valueToQuotedString(name.c_str(), name.size())); document_ += " : "; writeValue(childValue); if (++it == members.end()) { @@ -4770,7 +4816,7 @@ void StyledStreamWriter::writeValue(const Value& value) { const String& name = *it; const Value& childValue = value[name]; writeCommentBeforeValue(childValue); - writeWithIndent(valueToQuotedString(name.c_str())); + writeWithIndent(valueToQuotedString(name.c_str(), name.size())); *document_ << " : "; writeValue(childValue); if (++it == members.end()) { @@ -5308,7 +5354,7 @@ String writeString(StreamWriter::Factory const& factory, Value const& root) { OStringStream sout; StreamWriterPtr const writer(factory.newStreamWriter()); writer->write(root, &sout); - return sout.str(); + return std::move(sout).str(); } OStream& operator<<(OStream& sout, Value const& root) { From e3aa79cffb51bcf794ec9c6271d26849783b69d1 Mon Sep 17 00:00:00 2001 From: y5nw <37980625+y5nw@users.noreply.github.com> Date: Sun, 13 Oct 2024 11:29:08 +0200 Subject: [PATCH 014/178] Gettext and plural support for client-side translations (#14726) --------- Co-authored-by: Ekdohibs Co-authored-by: y5nw Co-authored-by: rubenwardy --- builtin/common/misc_helpers.lua | 33 +- builtin/mainmenu/tab_content.lua | 2 +- doc/lua_api.md | 131 ++++- games/devtest/mods/testtranslations/init.lua | 26 + .../locale/testtranslations.fr.po | 9 + .../locale/translation_mo.fr.mo | Bin 0 -> 494 bytes .../locale/translation_po.fr.po | 22 + .../locale/translation_tr.fr.tr | 2 + games/devtest/mods/testtranslations/mod.conf | 3 + .../testtranslations/test_locale/readme.txt | 4 + .../test_locale/translation_mo.de.mo | Bin 0 -> 446 bytes .../test_locale/translation_po.de.po | 42 ++ .../testtranslations/translation_mo.de.po | 26 + .../testtranslations/translation_mo.fr.po | 18 + src/CMakeLists.txt | 1 + src/client/client.cpp | 8 +- src/gettext.h | 3 +- src/gettext_plural_form.cpp | 256 +++++++++ src/gettext_plural_form.h | 33 ++ src/gui/guiEngine.cpp | 46 +- src/server.cpp | 25 +- src/translation.cpp | 517 +++++++++++++++++- src/translation.h | 38 +- src/unittest/CMakeLists.txt | 1 + src/unittest/test_servermodmanager.cpp | 2 +- src/unittest/test_translations.cpp | 64 +++ src/util/string.cpp | 84 ++- src/util/string.h | 38 +- 28 files changed, 1360 insertions(+), 74 deletions(-) create mode 100644 games/devtest/mods/testtranslations/init.lua create mode 100644 games/devtest/mods/testtranslations/locale/testtranslations.fr.po create mode 100644 games/devtest/mods/testtranslations/locale/translation_mo.fr.mo create mode 100644 games/devtest/mods/testtranslations/locale/translation_po.fr.po create mode 100644 games/devtest/mods/testtranslations/locale/translation_tr.fr.tr create mode 100644 games/devtest/mods/testtranslations/mod.conf create mode 100644 games/devtest/mods/testtranslations/test_locale/readme.txt create mode 100644 games/devtest/mods/testtranslations/test_locale/translation_mo.de.mo create mode 100644 games/devtest/mods/testtranslations/test_locale/translation_po.de.po create mode 100644 games/devtest/mods/testtranslations/translation_mo.de.po create mode 100644 games/devtest/mods/testtranslations/translation_mo.fr.po create mode 100644 src/gettext_plural_form.cpp create mode 100644 src/gettext_plural_form.h create mode 100644 src/unittest/test_translations.cpp diff --git a/builtin/common/misc_helpers.lua b/builtin/common/misc_helpers.lua index 2ad9b10af..d0942b2d2 100644 --- a/builtin/common/misc_helpers.lua +++ b/builtin/common/misc_helpers.lua @@ -574,12 +574,14 @@ function core.strip_colors(str) return (str:gsub(ESCAPE_CHAR .. "%([bc]@[^)]+%)", "")) end -function core.translate(textdomain, str, ...) +local function translate(textdomain, str, num, ...) local start_seq - if textdomain == "" then + if textdomain == "" and num == "" then start_seq = ESCAPE_CHAR .. "T" - else + elseif num == "" then start_seq = ESCAPE_CHAR .. "(T@" .. textdomain .. ")" + else + start_seq = ESCAPE_CHAR .. "(T@" .. textdomain .. "@" .. num .. ")" end local arg = {n=select('#', ...), ...} local end_seq = ESCAPE_CHAR .. "E" @@ -610,8 +612,31 @@ function core.translate(textdomain, str, ...) return start_seq .. translated .. end_seq end +function core.translate(textdomain, str, ...) + return translate(textdomain, str, "", ...) +end + +function core.translate_n(textdomain, str, str_plural, n, ...) + assert (type(n) == "number") + assert (n >= 0) + assert (math.floor(n) == n) + + -- Truncate n if too large + local max = 1000000 + if n >= 2 * max then + n = n % max + max + end + if n == 1 then + return translate(textdomain, str, "1", ...) + else + return translate(textdomain, str_plural, tostring(n), ...) + end +end + function core.get_translator(textdomain) - return function(str, ...) return core.translate(textdomain or "", str, ...) end + return + (function(str, ...) return core.translate(textdomain or "", str, ...) end), + (function(str, str_plural, n, ...) return core.translate_n(textdomain or "", str, str_plural, n, ...) end) end -------------------------------------------------------------------------------- diff --git a/builtin/mainmenu/tab_content.lua b/builtin/mainmenu/tab_content.lua index b38f12884..9cfb96d54 100644 --- a/builtin/mainmenu/tab_content.lua +++ b/builtin/mainmenu/tab_content.lua @@ -118,7 +118,7 @@ local function get_formspec(tabview, name, tabdata) local title_and_name if selected_pkg.type == "game" then - title_and_name = selected_pkg.name + title_and_name = selected_pkg.title or selected_pkg.name else title_and_name = (selected_pkg.title or selected_pkg.name) .. "\n" .. core.colorize("#BFBFBF", selected_pkg.name) diff --git a/doc/lua_api.md b/doc/lua_api.md index d9e683da3..2c827d7ad 100644 --- a/doc/lua_api.md +++ b/doc/lua_api.md @@ -4178,10 +4178,6 @@ Translations Texts can be translated client-side with the help of `minetest.translate` and translation files. -Consider using the script `mod_translation_updater.py` in the Minetest -[modtools](https://github.com/minetest/modtools) repository to generate and -update translation files automatically from the Lua sources. - Translating a string -------------------- @@ -4189,13 +4185,15 @@ Two functions are provided to translate strings: `minetest.translate` and `minetest.get_translator`. * `minetest.get_translator(textdomain)` is a simple wrapper around - `minetest.translate`, and `minetest.get_translator(textdomain)(str, ...)` is - equivalent to `minetest.translate(textdomain, str, ...)`. + `minetest.translate` and `minetest.translate_n`. + After `local S, NS = minetest.get_translator(textdomain)`, we have + `S(str, ...)` equivalent to `minetest.translate(textdomain, str, ...)`, and + `NS(str, str_plural, n, ...)` to `minetest.translate_n(textdomain, str, str_plural, n, ...)`. It is intended to be used in the following way, so that it avoids verbose repetitions of `minetest.translate`: ```lua - local S = minetest.get_translator(textdomain) + local S, NS = minetest.get_translator(textdomain) S(str, ...) ``` @@ -4212,29 +4210,102 @@ Two functions are provided to translate strings: `minetest.translate` and arguments the translated string expects. Arguments are literal strings -- they will not be translated. -For instance, suppose we want to greet players when they join. We can do the +* `minetest.translate_n(textdomain, str, str_plural, n, ...)` translates the + string `str` with the given `textdomain` for disambiguaion. The value of + `n`, which must be a nonnegative integer, is used to decide whether to use + the singular or the plural version of the string. Depending on the locale of + the client, the choice between singular and plural might be more complicated, + but the choice will be done automatically using the value of `n`. + + You can read https://www.gnu.org/software/gettext/manual/html_node/Plural-forms.html + for more details on the differences of plurals between languages. + + Also note that plurals are only handled in .po or .mo files, and not in .tr files. + +For instance, suppose we want to greet players when they join and provide a +command that shows the amount of time since the player joined. We can do the following: ```lua -local S = minetest.get_translator("hello") +local S, NS = minetest.get_translator("hello") minetest.register_on_joinplayer(function(player) local name = player:get_player_name() minetest.chat_send_player(name, S("Hello @1, how are you today?", name)) end) +minetest.register_chatcommand("playtime", { + func = function(name) + local last_login = core.get_auth_handler().get_auth(name).last_login + local playtime = math.floor((last_login-os.time())/60) + return true, NS( + "You have been playing for @1 minute.", + "You have been playing for @1 minutes.", + minutes, tostring(minutes)) + end, +}) ``` When someone called "CoolGuy" joins the game with an old client or a client that does not have localization enabled, they will see `Hello CoolGuy, how are -you today?` +you today?`. If they use the `/playtime` command, they will see `You have been +playing for 1 minute` or (for example) `You have been playing for 4 minutes.` -However, if we have for instance a translation file named `hello.de.tr` +However, if we have for instance a translation file named `hello.de.po` containing the following: - # textdomain: hello - Hello @1, how are you today?=Hallo @1, wie geht es dir heute? +```po +msgid "" +msgstr "" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Hello @1, how are you today?" +msgstr "Hallo @1, wie geht es dir heute?" + +msgid "You have been playing for @1 minute." +msgid_plural "You have been playing for @1 minutes." +msgstr[0] "Du spielst seit @1 Minute." +msgstr[1] "Du spielst seit @1 Minuten." +``` and CoolGuy has set a German locale, they will see `Hallo CoolGuy, wie geht es -dir heute?` +dir heute?` when they join, and the `/playtime` command will show them `Du +spielst seit 1 Minute.` or (for example) `Du spielst seit 4 Minuten.` + +Creating and updating translation files +--------------------------------------- + +As an alternative to writing translation files by hand (as shown in the above +example), it is also possible to generate translation files based on the source +code. + +It is recommended to first generate a translation template. The translation +template includes translatable strings that translators can directly work on. +After creating the `locale` directory, a translation template for the above +example using the following command: + +```sh +xgettext -L lua -kS -kNS:1,2 -kminetest.translate:1c,2 -kminetest.translate_n:1c,2,3 \ + -d hello -o locale/hello.pot *.lua +``` + +The above command can also be used to update the translation template when new +translatable strings are added. + +The German translator can then create the translation file with + +```sh +msginit -l de -i locale/hello.pot -o locale/hello.de.po +``` + +and provide the translations by editing `locale/hello.de.po`. + +The translation file can be updated using + +```sh +msgmerge -U locale/hello.de.po locale/hello.pot +``` + +Refer to the [Gettext manual](https://www.gnu.org/software/gettext/manual/) for +further information on creating and updating translation files. Operations on translated strings -------------------------------- @@ -4248,8 +4319,8 @@ expected manner. However, string concatenation will still work as expected sentences by breaking them into parts; arguments should be used instead), and operations such as `minetest.colorize` which are also concatenation. -Translation file format ------------------------ +Old translation file format +--------------------------- A translation file has the suffix `.[lang].tr`, where `[lang]` is the language it corresponds to. It must be put into the `locale` subdirectory of the mod. @@ -4264,6 +4335,34 @@ The file should be a text file, with the following format: There must be no extraneous whitespace around the `=` or at the beginning or the end of the line. +Using the earlier example of greeting the player, the translation file would be + +``` +# textdomain: hello +Hello @1, how are you today?=Hallo @1, wie geht es dir heute? +``` + +For old translation files, consider using the script `mod_translation_updater.py` +in the Minetest [modtools](https://github.com/minetest/modtools) repository to +generate and update translation files automatically from the Lua sources. + +Gettext translation file format +------------------------------- + +Gettext files can also be used as translations. A translation file has the suffix +`.[lang].po` or `.[lang].mo`, depending on whether it is compiled or not, and must +also be placed in the `locale` subdirectory of the mod. The value of `textdomain` +is `msgctxt` in the gettext files. If `msgctxt` is not provided, the name of the +translation file is used instead. + +A typical entry in a `.po` file would look like: + +```po +msgctxt "textdomain" +msgid "Hello world!" +msgstr "Bonjour le monde!" +``` + Escapes ------- diff --git a/games/devtest/mods/testtranslations/init.lua b/games/devtest/mods/testtranslations/init.lua new file mode 100644 index 000000000..bb3696e7e --- /dev/null +++ b/games/devtest/mods/testtranslations/init.lua @@ -0,0 +1,26 @@ +local S, NS = minetest.get_translator("testtranslations") + +local function send_compare(name, text) + core.chat_send_player(name, ("%s | %s | %s"):format( + core.get_translated_string("", text), text, core.get_translated_string("fr", text))) +end + +minetest.register_chatcommand("testtranslations", { + params = "", + description = "Test translations", + privs = {}, + func = function(name, param) + core.chat_send_player(name, "Please ensure your locale is set to \"fr\"") + core.chat_send_player(name, "Untranslated | Client-side translation | Server-side translation (fr)") + send_compare(name, S("Testing .tr files: untranslated")) + send_compare(name, S("Testing .po files: untranslated")) + send_compare(name, S("Testing .mo files: untranslated")) + send_compare(name, S("Testing fuzzy .po entry: untranslated (expected)")) + send_compare(name, core.translate("translation_po", "Testing .po without context: untranslated")) + send_compare(name, core.translate("translation_mo", "Testing .mo without context: untranslated")) + for i = 0,4 do + send_compare(name, NS("@1: .po singular", "@1: .po plural", i, tostring(i))) + send_compare(name, NS("@1: .mo singular", "@1: .mo plural", i, tostring(i))) + end + end +}) diff --git a/games/devtest/mods/testtranslations/locale/testtranslations.fr.po b/games/devtest/mods/testtranslations/locale/testtranslations.fr.po new file mode 100644 index 000000000..2bcc6c7d4 --- /dev/null +++ b/games/devtest/mods/testtranslations/locale/testtranslations.fr.po @@ -0,0 +1,9 @@ +# Dummy entry. This is a test to make sure that a parser error is not thrown +# if the following line is msgctxt. +msgctxt "testtranslations" +msgid "Dummy entry" +msgstr "Dummy result" + +# Used for translating the mod title +msgid "Test translations" +msgstr "Test translations (French)" diff --git a/games/devtest/mods/testtranslations/locale/translation_mo.fr.mo b/games/devtest/mods/testtranslations/locale/translation_mo.fr.mo new file mode 100644 index 0000000000000000000000000000000000000000..0e7190de975563e0ec746fb84affeacd5313d3ec GIT binary patch literal 494 zcmaKn!A^uQ6h%>SGfUT+bf+xP!PNw0Vq#?N0(WjIbfmGoVq2nqhjHaEx$q186O*~X zFpiqoaB^GvUhlh~d;Y73<%4~226n*>=vD&)@BpUZZKdzf8hn96aKAP5zCaIf{($1^ z--USFV5i&U!a7NJ?6}tKQMyXEjuo1mcycjo$r(;oaVJX8p>jM*P1Zk;;=awIzg66L zxNqh6JAoG zOH2{7*{yVwtKL7%w5ef1!#FlQP1vwaX&xp2Cm(|%_n2zRIF&47N0|{+RBVhLtSjc< OmxEF8!(1 (French plural)" + +#, foo bar fuzzy +msgctxt "testtranslations" +msgid "Testing fuzzy .po entry: untranslated (expected)" +msgstr "Testing fuzzy .po entry: translated (wrong)" + +msgid "Testing .po without context: untranslated" +msgstr "Testing .po without context: translated" diff --git a/games/devtest/mods/testtranslations/locale/translation_tr.fr.tr b/games/devtest/mods/testtranslations/locale/translation_tr.fr.tr new file mode 100644 index 000000000..b9ac66af5 --- /dev/null +++ b/games/devtest/mods/testtranslations/locale/translation_tr.fr.tr @@ -0,0 +1,2 @@ +# textdomain: testtranslations +Testing .tr files: untranslated=Testing .tr files: translated diff --git a/games/devtest/mods/testtranslations/mod.conf b/games/devtest/mods/testtranslations/mod.conf new file mode 100644 index 000000000..1fc09cf6b --- /dev/null +++ b/games/devtest/mods/testtranslations/mod.conf @@ -0,0 +1,3 @@ +name = testtranslations +title = Test translations +description = Test mod to test translations. diff --git a/games/devtest/mods/testtranslations/test_locale/readme.txt b/games/devtest/mods/testtranslations/test_locale/readme.txt new file mode 100644 index 000000000..7a2ed4329 --- /dev/null +++ b/games/devtest/mods/testtranslations/test_locale/readme.txt @@ -0,0 +1,4 @@ +The translation files in this directory intentionally include errors (which +would be reported when someone starts the devtest game in the de locale). This +allows the unittest to check that the translation file reader also handles +files that include errors. diff --git a/games/devtest/mods/testtranslations/test_locale/translation_mo.de.mo b/games/devtest/mods/testtranslations/test_locale/translation_mo.de.mo new file mode 100644 index 0000000000000000000000000000000000000000..ffe05cd7100205ba38f331c44274392b87e821ea GIT binary patch literal 446 zcmZXOF>b;@5Jd+tP#_|NQi52QDO`{e%M}tzK@mYgZIOi_*=uWe9f3s44d4z*OOxBA z;~e3eU0Vtn`RUJ$zGweW*EtcY0eWBxT3`?I`UGw81qR^T&c7%Z{RKRNW`*bp+JknW z6Q~DWKp&t7Xdiln=J(G~d{hH@)q!*Ch^o*$&z~A6Qf8@UTxhv-i%D(7I*UR{#UhO| z8AdeYaq_|6jGLB;(0r?%xplKuB4c{JSxsL!790J}>|hPv1ZFj2!kkvYv(HQ$Fu~k_ k4gKPEJSe%!BK1;" + +msgctxt "testtranslations" +msgid "Testing .mo files: untranslated" +msgstr "Testing .mo files: translated" + +msgid "Testing .mo without context: untranslated" +msgstr "Testing .mo without context: translated" + +msgctxt "testtranslations" +msgid "@1: .mo singular" +msgid_plural "@1: .mo plural" +msgstr[0] "@1: .mo 0 and 1 (French singular)" +msgstr[1] "@1: .mo >1 (French plural)" diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index cad22ca6f..6dd4c05d2 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -408,6 +408,7 @@ set(common_SRCS face_position_cache.cpp filesys.cpp gettext.cpp + gettext_plural_form.cpp httpfetch.cpp hud.cpp inventory.cpp diff --git a/src/client/client.cpp b/src/client/client.cpp index 0f90bca97..7feb2212d 100644 --- a/src/client/client.cpp +++ b/src/client/client.cpp @@ -841,16 +841,12 @@ bool Client::loadMedia(const std::string &data, const std::string &filename, return true; } - const char *translate_ext[] = { - ".tr", NULL - }; - name = removeStringEnd(filename, translate_ext); - if (!name.empty()) { + if (Translations::isTranslationFile(filename)) { if (from_media_push) return false; TRACESTREAM(<< "Client: Loading translation: " << "\"" << filename << "\"" << std::endl); - g_client_translations->loadTranslation(data); + g_client_translations->loadTranslation(filename, data); return true; } diff --git a/src/gettext.h b/src/gettext.h index 042729c1a..507d27e64 100644 --- a/src/gettext.h +++ b/src/gettext.h @@ -36,7 +36,8 @@ with this program; if not, write to the Free Software Foundation, Inc., // the USE_GETTEXT=0 case and can't assume that gettext is installed. #include - #define gettext(String) String + #define gettext(String) (String) + #define ngettext(String1, String2, n) ((n) == 1 ? (String1) : (String2)) #endif #define _(String) gettext(String) diff --git a/src/gettext_plural_form.cpp b/src/gettext_plural_form.cpp new file mode 100644 index 000000000..6a5322421 --- /dev/null +++ b/src/gettext_plural_form.cpp @@ -0,0 +1,256 @@ +// Minetest +// SPDX-License-Identifier: LGPL-2.1-or-later + +#include "gettext_plural_form.h" +#include "util/string.h" + +static size_t minsize(const GettextPluralForm::Ptr &form) +{ + return form ? form->size() : 0; +} + +static size_t minsize(const GettextPluralForm::Ptr &f, const GettextPluralForm::Ptr &g) +{ + if (sizeof(g) > 0) + return std::min(minsize(f), minsize(g)); + return f ? f->size() : 0; +} + +class Identity: public GettextPluralForm +{ + public: + Identity(size_t nplurals): GettextPluralForm(nplurals) {}; + NumT operator()(const NumT n) const override + { + return n; + } +}; + +class ConstValue: public GettextPluralForm +{ + public: + ConstValue(size_t nplurals, NumT val): GettextPluralForm(nplurals), value(val) {}; + NumT operator()(const NumT n) const override + { + return value; + } + private: + NumT value; +}; + +template typename F> +class UnaryOperation: public GettextPluralForm +{ + public: + UnaryOperation(const Ptr &op): + GettextPluralForm(minsize(op)), op(op) {} + NumT operator()(const NumT n) const override + { + if (operator bool()) + return func((*op)(n)); + return 0; + } + private: + Ptr op; + static constexpr F func = {}; +}; + +template typename F> +class BinaryOperation: public GettextPluralForm +{ + public: + BinaryOperation(const Ptr &lhs, const Ptr &rhs): + GettextPluralForm(minsize(lhs, rhs)), + lhs(lhs), rhs(rhs) {} + NumT operator()(const NumT n) const override + { + if (operator bool()) + return func((*lhs)(n), (*rhs)(n)); + return 0; + } + private: + Ptr lhs, rhs; + static constexpr F func = {}; +}; + +class TernaryOperation: public GettextPluralForm +{ + public: + TernaryOperation(const Ptr &cond, const Ptr &val, const Ptr &alt): + GettextPluralForm(std::min(minsize(cond), minsize(val, alt))), + cond(cond), val(val), alt(alt) {} + NumT operator()(const NumT n) const override + { + if (operator bool()) + return (*cond)(n) ? (*val)(n) : (*alt)(n); + return 0; + } + private: + Ptr cond, val, alt; +}; + +typedef std::pair ParserResult; +typedef ParserResult (*Parser)(const size_t, const std::wstring_view &); + +static ParserResult parse_expr(const size_t nplurals, const std::wstring_view &str); + +template typename Operator> +static ParserResult reduce_ltr(const size_t nplurals, const ParserResult &res, const wchar_t* pattern) +{ + if (!str_starts_with(res.second, pattern)) + return ParserResult(nullptr, res.second); + auto next = Parser(nplurals, res.second.substr(std::char_traits::length(pattern))); + if (!next.first) + return next; + next.first = GettextPluralForm::Ptr(new BinaryOperation(res.first, next.first)); + next.second = trim(next.second); + return next; +} + +template +static ParserResult reduce_ltr(const size_t nplurals, const ParserResult &res, const wchar_t**) +{ + return ParserResult(nullptr, res.second); +} + +template typename Operator, template typename... Operators> +static ParserResult reduce_ltr(const size_t nplurals, const ParserResult &res, const wchar_t** patterns) +{ + auto next = reduce_ltr(nplurals, res, patterns[0]); + if (next.first || next.second != res.second) + return next; + return reduce_ltr(nplurals, res, patterns+1); +} + +template typename Operator, template typename... Operators> +static ParserResult parse_ltr(const size_t nplurals, const std::wstring_view &str, const wchar_t** patterns) +{ + auto &&pres = Parser(nplurals, str); + if (!pres.first) + return pres; + pres.second = trim(pres.second); + while (!pres.second.empty()) { + auto next = reduce_ltr(nplurals, pres, patterns); + if (!next.first) + return pres; + next.second = trim(next.second); + pres = next; + } + return pres; +} + +static ParserResult parse_atomic(const size_t nplurals, const std::wstring_view &str) +{ + if (str.empty()) + return ParserResult(nullptr, str); + if (str[0] == 'n') + return ParserResult(new Identity(nplurals), trim(str.substr(1))); + + wchar_t* endp; + auto val = wcstoul(str.data(), &endp, 10); + return ParserResult(new ConstValue(nplurals, val), trim(str.substr(endp-str.data()))); +} + +static ParserResult parse_parenthesized(const size_t nplurals, const std::wstring_view &str) +{ + if (str.empty()) + return ParserResult(nullptr, str); + if (str[0] != '(') + return parse_atomic(nplurals, str); + auto result = parse_expr(nplurals, str.substr(1)); + if (result.first) { + if (result.second.empty() || result.second[0] != ')') + result.first = nullptr; + else + result.second = trim(result.second.substr(1)); + } + return result; +} + +static ParserResult parse_negation(const size_t nplurals, const std::wstring_view &str) +{ + if (str.empty()) + return ParserResult(nullptr, str); + if (str[0] != '!') + return parse_parenthesized(nplurals, str); + auto result = parse_negation(nplurals, trim(str.substr(1))); + if (result.first) + result.first = GettextPluralForm::Ptr(new UnaryOperation(result.first)); + return result; +} + +static ParserResult parse_multiplicative(const size_t nplurals, const std::wstring_view &str) +{ + static const wchar_t *patterns[] = { L"*", L"/", L"%" }; + return parse_ltr(nplurals, str, patterns); +} + +static ParserResult parse_additive(const size_t nplurals, const std::wstring_view &str) +{ + static const wchar_t *patterns[] = { L"+", L"-" }; + return parse_ltr(nplurals, str, patterns); +} + +static ParserResult parse_comparison(const size_t nplurals, const std::wstring_view &str) +{ + static const wchar_t *patterns[] = { L"<=", L">=", L"<", L">" }; + return parse_ltr(nplurals, str, patterns); +} + +static ParserResult parse_equality(const size_t nplurals, const std::wstring_view &str) +{ + static const wchar_t *patterns[] = { L"==", L"!=" }; + return parse_ltr(nplurals, str, patterns); +} + +static ParserResult parse_conjunction(const size_t nplurals, const std::wstring_view &str) +{ + static const wchar_t *and_pattern[] = { L"&&" }; + return parse_ltr(nplurals, str, and_pattern); +} + +static ParserResult parse_disjunction(const size_t nplurals, const std::wstring_view &str) +{ + static const wchar_t *or_pattern[] = { L"||" }; + return parse_ltr(nplurals, str, or_pattern); +} + +static ParserResult parse_ternary(const size_t nplurals, const std::wstring_view &str) +{ + auto pres = parse_disjunction(nplurals, str); + if (pres.second.empty() || pres.second[0] != '?') // no ? : + return pres; + auto cond = pres.first; + pres = parse_ternary(nplurals, trim(pres.second.substr(1))); + if (pres.second.empty() || pres.second[0] != ':') + return ParserResult(nullptr, pres.second); + auto val = pres.first; + pres = parse_ternary(nplurals, trim(pres.second.substr(1))); + return ParserResult(new TernaryOperation(cond, val, pres.first), pres.second); +} + +static ParserResult parse_expr(const size_t nplurals, const std::wstring_view &str) +{ + return parse_ternary(nplurals, trim(str)); +} + +GettextPluralForm::Ptr GettextPluralForm::parse(const size_t nplurals, const std::wstring_view &str) +{ + if (nplurals == 0) + return nullptr; + auto result = parse_expr(nplurals, str); + if (!result.second.empty()) + return nullptr; + return result.first; +} + +GettextPluralForm::Ptr GettextPluralForm::parseHeaderLine(const std::wstring_view &str) +{ + if (!str_starts_with(str, L"Plural-Forms: nplurals=") || !str_ends_with(str, L";")) + return nullptr; + auto nplurals = wcstoul(str.data()+23, nullptr, 10); + auto pos = str.find(L"plural="); + if (pos == str.npos) + return nullptr; + return parse(nplurals, str.substr(pos+7, str.size()-pos-8)); +} diff --git a/src/gettext_plural_form.h b/src/gettext_plural_form.h new file mode 100644 index 000000000..d73718965 --- /dev/null +++ b/src/gettext_plural_form.h @@ -0,0 +1,33 @@ +// Minetest +// SPDX-License-Identifier: LGPL-2.1-or-later + +#pragma once +#include +#include + +// Note that this only implements a subset of C expressions. See: +// https://git.savannah.gnu.org/gitweb/?p=gettext.git;a=blob;f=gettext-runtime/intl/plural.y +class GettextPluralForm +{ +public: + using NumT = unsigned long; + using Ptr = std::shared_ptr; + + size_t size() const + { + return nplurals; + }; + virtual NumT operator()(const NumT) const = 0; + virtual operator bool() const + { + return size() > 0; + } + virtual ~GettextPluralForm() {}; + + static GettextPluralForm::Ptr parse(const size_t nplurals, const std::wstring_view &str); + static GettextPluralForm::Ptr parseHeaderLine(const std::wstring_view &str); +protected: + GettextPluralForm(size_t nplurals): nplurals(nplurals) {}; +private: + const size_t nplurals; +}; diff --git a/src/gui/guiEngine.cpp b/src/gui/guiEngine.cpp index 8a4e22b1d..200c26fa0 100644 --- a/src/gui/guiEngine.cpp +++ b/src/gui/guiEngine.cpp @@ -214,15 +214,28 @@ GUIEngine::GUIEngine(JoystickController *joystick, /******************************************************************************/ -std::string findLocaleFileInMods(const std::string &path, const std::string &filename) +std::string findLocaleFileWithExtension(const std::string &path) +{ + if (fs::PathExists(path + ".mo")) + return path + ".mo"; + if (fs::PathExists(path + ".po")) + return path + ".po"; + if (fs::PathExists(path + ".tr")) + return path + ".tr"; + return ""; +} + + +/******************************************************************************/ +std::string findLocaleFileInMods(const std::string &path, const std::string &filename_no_ext) { std::vector mods = flattenMods(getModsInPath(path, "root", true)); for (const auto &mod : mods) { - std::string ret = mod.path + DIR_DELIM "locale" DIR_DELIM + filename; - if (fs::PathExists(ret)) { + std::string ret = findLocaleFileWithExtension( + mod.path + DIR_DELIM "locale" DIR_DELIM + filename_no_ext); + if (!ret.empty()) return ret; - } } return ""; @@ -235,19 +248,26 @@ Translations *GUIEngine::getContentTranslations(const std::string &path, if (domain.empty() || lang_code.empty()) return nullptr; - std::string filename = domain + "." + lang_code + ".tr"; - std::string key = path + DIR_DELIM "locale" DIR_DELIM + filename; + std::string filename_no_ext = domain + "." + lang_code; + std::string key = path + DIR_DELIM "locale" DIR_DELIM + filename_no_ext; if (key == m_last_translations_key) return &m_last_translations; std::string trans_path = key; - ContentType type = getContentType(path); - if (type == ContentType::GAME) - trans_path = findLocaleFileInMods(path + DIR_DELIM "mods" DIR_DELIM, filename); - else if (type == ContentType::MODPACK) - trans_path = findLocaleFileInMods(path, filename); - // We don't need to search for locale files in a mod, as there's only one `locale` folder. + + switch (getContentType(path)) { + case ContentType::GAME: + trans_path = findLocaleFileInMods(path + DIR_DELIM "mods" DIR_DELIM, + filename_no_ext); + break; + case ContentType::MODPACK: + trans_path = findLocaleFileInMods(path, filename_no_ext); + break; + default: + trans_path = findLocaleFileWithExtension(trans_path); + break; + } if (trans_path.empty()) return nullptr; @@ -257,7 +277,7 @@ Translations *GUIEngine::getContentTranslations(const std::string &path, std::string data; if (fs::ReadFile(trans_path, data)) { - m_last_translations.loadTranslation(data); + m_last_translations.loadTranslation(fs::GetFilenameFromPath(trans_path.c_str()), data); } return &m_last_translations; diff --git a/src/server.cpp b/src/server.cpp index df2d14a1d..ab219043e 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -2537,8 +2537,8 @@ bool Server::addMediaFile(const std::string &filename, ".png", ".jpg", ".bmp", ".tga", ".ogg", ".x", ".b3d", ".obj", ".gltf", ".glb", - // Custom translation file format - ".tr", + // Translation file formats + ".tr", ".po", ".mo", NULL }; if (removeStringEnd(filename, supported_ext).empty()) { @@ -2621,14 +2621,20 @@ void Server::fillMediaCache() void Server::sendMediaAnnouncement(session_t peer_id, const std::string &lang_code) { - std::string lang_suffix = "."; - lang_suffix.append(lang_code).append(".tr"); + std::string translation_formats[3] = { ".tr", ".po", ".mo" }; + std::string lang_suffixes[3]; + for (size_t i = 0; i < 3; i++) { + lang_suffixes[i].append(".").append(lang_code).append(translation_formats[i]); + } - auto include = [&] (const std::string &name, const MediaInfo &info) -> bool { + auto include = [&] (const std::string &name, const MediaInfo &info) -> bool { if (info.no_announce) return false; - if (str_ends_with(name, ".tr") && !str_ends_with(name, lang_suffix)) - return false; + for (size_t j = 0; j < 3; j++) { + if (str_ends_with(name, translation_formats[j]) && !str_ends_with(name, lang_suffixes[j])) { + return false; + } + } return true; }; @@ -4167,12 +4173,11 @@ Translations *Server::getTranslationLanguage(const std::string &lang_code) // [] will create an entry auto *translations = &server_translations[lang_code]; - std::string suffix = "." + lang_code + ".tr"; for (const auto &i : m_media) { - if (str_ends_with(i.first, suffix)) { + if (Translations::getFileLanguage(i.first) == lang_code) { std::string data; if (fs::ReadFile(i.second.path, data, true)) { - translations->loadTranslation(data); + translations->loadTranslation(i.first, data); } } } diff --git a/src/translation.cpp b/src/translation.cpp index 5d5491e56..728789acc 100644 --- a/src/translation.cpp +++ b/src/translation.cpp @@ -19,7 +19,9 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "translation.h" #include "log.h" +#include "util/hex.h" #include "util/string.h" +#include "gettext.h" #include @@ -29,10 +31,22 @@ static Translations client_translations; Translations *g_client_translations = &client_translations; #endif +const std::string_view Translations::getFileLanguage(const std::string &filename) +{ + const char *translate_ext[] = { + ".tr", ".po", ".mo", NULL + }; + auto basename = removeStringEnd(filename, translate_ext); + auto pos = basename.rfind('.'); + if (pos == basename.npos) + return ""; + return basename.substr(pos+1); +} void Translations::clear() { m_translations.clear(); + m_plural_translations.clear(); } const std::wstring &Translations::getTranslation( @@ -45,7 +59,52 @@ const std::wstring &Translations::getTranslation( return s; } -void Translations::loadTranslation(const std::string &data) +const std::wstring &Translations::getPluralTranslation( + const std::wstring &textdomain, const std::wstring &s, unsigned long int number) const +{ + std::wstring key = textdomain + L"|" + s; + auto it = m_plural_translations.find(key); + if (it != m_plural_translations.end()) { + auto n = (*(it->second.first))(number); + const std::vector &v = it->second.second; + if (n < v.size()) { + if (v[n].empty()) + return s; + return v[n]; + } + } + return s; +} + + +void Translations::addTranslation( + const std::wstring &textdomain, const std::wstring &original, const std::wstring &translated) +{ + std::wstring key = textdomain + L"|" + original; + if (!translated.empty()) { + m_translations.emplace(std::move(key), std::move(translated)); + } +} + +void Translations::addPluralTranslation( + const std::wstring &textdomain, const GettextPluralForm::Ptr &plural, const std::wstring &original, std::vector &translated) +{ + static bool warned = false; + if (!plural) { + warned = true; + if (!warned) + errorstream << "Translations: plural translation entry defined without Plural-Forms" << std::endl; + return; + } else if (translated.size() != plural->size()) { + errorstream << "Translations: incorrect number of plural translations (expected " << plural->size() << ", got " << translated.size() << ")" << std::endl; + return; + } + std::wstring key = textdomain + L"|" + original; + m_plural_translations.emplace(std::move(key), std::pair(plural, translated)); +} + + +void Translations::loadTrTranslation(const std::string &data) { std::istringstream is(data); std::string textdomain_narrow; @@ -145,11 +204,455 @@ void Translations::loadTranslation(const std::string &data) } } - std::wstring oword1 = word1.str(), oword2 = word2.str(); - if (!oword2.empty()) { - std::wstring translation_index = textdomain + L"|"; - translation_index.append(oword1); - m_translations.emplace(std::move(translation_index), std::move(oword2)); - } + addTranslation(textdomain, word1.str(), word2.str()); + } +} + + +std::wstring Translations::unescapeC(const std::wstring &str) +{ + // Process escape sequences in str as if it were a C string + std::wstring result; + size_t i = 0; + while (i < str.length()) { + if (str[i] != L'\\') { + result.push_back(str[i]); + i++; + continue; + } + i++; + if (i == str.length()) { + errorstream << "Unfinished escape sequence at the end of \"" << wide_to_utf8(str) << "\"" << std::endl; + break; + } + switch (str[i]) { + // From https://en.wikipedia.org/wiki/Escape_sequences_in_C#Table_of_escape_sequences + case L'a': result.push_back(L'\a'); break; + case L'b': result.push_back(L'\b'); break; + case L'e': result.push_back(L'\x1b'); break; + case L'f': result.push_back(L'\f'); break; + case L'n': result.push_back(L'\n'); break; + case L'r': result.push_back(L'\r'); break; + case L't': result.push_back(L'\t'); break; + case L'v': result.push_back(L'\v'); break; + case L'\\': result.push_back(L'\\'); break; + case L'\'': result.push_back(L'\''); break; + case L'"': result.push_back(L'"'); break; + case L'?': result.push_back(L'?'); break; + case L'0': case L'1': case L'2': case L'3': case L'4': case L'5': case L'6': case L'7': { + size_t j = 0; + wchar_t c = 0; + for (; j < 3 && i+j < str.length() && L'0' <= str[i+j] && str[i+j] <= L'7'; j++) { + c = c * 8 + (str[i+j] - L'0'); + } + if (c <= 0xff) { + result.push_back(c); + } + i += j; + continue; + } + case L'x': { + i++; + if (i >= str.length()) { + errorstream << "Unfinished escape sequence at the end of \"" << wide_to_utf8(str) << "\"" << std::endl; + } + char32_t c = 0; + size_t j = 0; + unsigned char v; + for (; i+j < str.length() && hex_digit_decode((char)str[i+j], v); j++) { + c = c * 16 + v; + } + if (j == 0) { + errorstream << "Invalid escape sequence \\x, ignoring" << std::endl; + continue; + } + // If character fits in 16 bits and is not part of surrogate pair, insert it. + // Otherwise, silently drop it: this is valid since \x escape sequences with + // values above 0xff are implementation-defined + if ((c < 0xd800) || (0xe000 <= c && c <= 0xffff)) { + result.push_back(c); + } + i += j; + continue; + } + case L'u': { + i++; + if (i + 4 > str.length()) { + errorstream << "Unfinished escape sequence at the end of \"" << wide_to_utf8(str) << "\"" << std::endl; + } + char16_t c = 0; + bool ok = true; + for (size_t j = 0; j < 4; j++) { + unsigned char v; + if (str[i+j] <= 0xff && hex_digit_decode((char)str[i+j], v)) { + c = c * 16 + v; + } else { + errorstream << "Invalid unicode escape sequence \"\\u" << wide_to_utf8(str.substr(i, 4)) << "\", ignoring" << std::endl; + ok = false; + break; + } + } + if (ok) { + wide_add_codepoint(result, c); + } + i += 4; + continue; + } + case L'U': { + i++; + if (i + 8 > str.length()) { + errorstream << "Unfinished escape sequence at the end of \"" << wide_to_utf8(str) << "\"" << std::endl; + } + char32_t c = 0; + bool ok = true; + for (size_t j = 0; j < 8; j++) { + unsigned char v; + if (str[i+j] <= 0xff && hex_digit_decode((char)str[i+j], v)) { + c = c * 16 + v; + } else { + errorstream << "Invalid unicode escape sequence \"\\U" << wide_to_utf8(str.substr(i, 8)) << "\", ignoring" << std::endl; + ok = false; + break; + } + } + if (ok) { + wide_add_codepoint(result, c); + } + i += 8; + continue; + } + default: { + errorstream << "Unknown escape sequence \"\\" << str[i] << "\", ignoring" << std::endl; + break; + } + } + i++; + } + return result; +} + +void Translations::loadPoEntry(const std::wstring &basefilename, const GettextPluralForm::Ptr &plural_form, const std::map &entry) +{ + // Process an entry from a PO file and add it to the translation table + // Assumes that entry[L"msgid"] is always defined + std::wstring textdomain; + auto ctx = entry.find(L"msgctxt"); + if (ctx != entry.end()) { + textdomain = ctx->second; + } else { + textdomain = basefilename; + } + std::wstring original = entry.at(L"msgid"); + + auto plural = entry.find(L"msgid_plural"); + if (plural == entry.end()) { + auto translated = entry.find(L"msgstr"); + if (translated == entry.end()) { + errorstream << "Could not load translation: entry for msgid \"" << wide_to_utf8(original) << "\" does not contain a msgstr field" << std::endl; + return; + } + addTranslation(textdomain, original, translated->second); + } else { + std::vector translations; + for (int i = 0; ; i++) { + auto translated = entry.find(L"msgstr[" + std::to_wstring(i) + L"]"); + if (translated == entry.end()) + break; + translations.push_back(translated->second); + } + addPluralTranslation(textdomain, plural_form, original, translations); + addPluralTranslation(textdomain, plural_form, plural->second, translations); + } +} + +bool Translations::inEscape(const std::wstring &line, size_t pos) +{ + if (pos == std::wstring::npos || pos == 0) + return false; + pos--; + size_t count = 0; + for (; line[pos] == L'\\'; pos--) { + count++; + if (pos == 0) + break; + } + return count % 2 == 1; +} + +std::optional> Translations::parsePoLine(const std::string &line) +{ + if (line.empty()) + return std::nullopt; + if (line[0] == '#') + return std::pair(L"#", utf8_to_wide(line.substr(1))); + + std::wstring wline = utf8_to_wide(line); + // Defend against some possibly malformed utf8 string, which + // is empty after converting to wide string + if (wline.empty()) + return std::nullopt; + + std::size_t pos = wline.find(L'"'); + std::wstring s; + if (pos == std::wstring::npos) { + errorstream << "Unable to parse po file line: " << line << std::endl; + return std::nullopt; + } + auto prefix = trim(wline.substr(0, pos)); + auto begin = pos; + while (pos < wline.size()) { + begin = wline.find(L'"', pos); + if (begin == std::wstring::npos) { + if (trim(wline.substr(pos)).empty()) { + break; + } else { + errorstream << "Excessive content at the end of po file line: " << line << std::endl; + return std::nullopt; + } + } + if (!trim(wline.substr(pos, begin-pos)).empty()) { + errorstream << "Excessive content within string concatenation in po file line: " << line << std::endl; + return std::nullopt; + } + auto end = wline.find(L'"', begin+1); + while (inEscape(wline, end)) { + end = wline.find(L'"', end+1); + } + if (end == std::wstring::npos) { + errorstream << "String extends beyond po file line: " << line << std::endl; + return std::nullopt; + } + s.append(unescapeC(wline.substr(begin+1, end-begin-1))); + pos = end+1; + } + return std::pair(prefix, s); +} + +void Translations::loadPoTranslation(const std::string &basefilename, const std::string &data) +{ + std::istringstream is(data); + std::string line; + std::map last_entry; + std::wstring last_key; + std::wstring wbasefilename = utf8_to_wide(basefilename); + GettextPluralForm::Ptr plural; + bool skip = false; + bool skip_last = false; + + while (is.good()) { + std::getline(is, line); + // Trim last character if file was using a \r\n line ending + if (line.length () > 0 && line[line.length() - 1] == '\r') + line.resize(line.length() - 1); + + auto parsed = parsePoLine(line); + if (!parsed) + continue; + auto prefix = parsed->first; + auto s = parsed->second; + + if (prefix == L"#") { + if (s[0] == L',') { + // Skip fuzzy entries + if ((s + L' ').find(L" fuzzy ") != line.npos) { + if (last_entry.empty()) + skip_last = true; + else + skip = true; + } + } + continue; + } + + if (prefix.empty()) { + // Continuation of previous line + if (last_key == L"") { + errorstream << "Unable to parse po file: continuation of non-existant previous line" << std::endl; + continue; + } + + last_entry[last_key].append(s); + continue; + } + + if (prefix == L"msgctxt" || (prefix == L"msgid" && last_entry.find(L"msgid") != last_entry.end())) { + if (last_entry.find(L"msgid") != last_entry.end()) { + if (!skip_last) { + if (last_entry[L"msgid"].empty()) { + if (last_entry.find(L"msgstr") == last_entry.end()) { + errorstream << "Header entry has no \"msgstr\" field" << std::endl; + } else if (plural) { + errorstream << "Attempt to override existing po header entry" << std::endl; + } else { + for (auto &line: str_split(last_entry[L"msgstr"], L'\n')) { + if (str_starts_with(line, L"Plural-Forms:")) { + plural = GettextPluralForm::parseHeaderLine(line); + if (!(plural && *plural)) { + errorstream << "Invalid Plural-Forms line: " << wide_to_utf8(line) << std::endl; + } + } + } + } + } else { + loadPoEntry(wbasefilename, plural, last_entry); + } + } + last_entry.clear(); + skip_last = skip; + } else if (!last_entry.empty()) { + errorstream << "Unable to parse po file: previous entry has no \"msgid\" field but is not empty" << std::endl; + last_entry.clear(); + skip_last = skip; + } + } else { + // prevent malpositioned fuzzy flag from influencing the following entry + skip = false; + } + if (last_entry.find(prefix) != last_entry.end()) { + errorstream << "Unable to parse po file: Key \"" << wide_to_utf8(prefix) << "\" was already present in previous entry" << std::endl; + continue; + } + last_key = prefix; + last_entry[prefix] = s; + } + + if (last_entry.find(L"msgid") != last_entry.end()) { + if (!skip_last && !last_entry[L"msgid"].empty()) + loadPoEntry(wbasefilename, plural, last_entry); + } else if (!last_entry.empty()) { + errorstream << "Unable to parse po file: Last entry has no \"msgid\" field" << std::endl; + } +} + +void Translations::loadMoEntry(const std::wstring &basefilename, const GettextPluralForm::Ptr &plural_form, const std::string &original, const std::string &translated) +{ + std::wstring textdomain = L""; + size_t found; + std::string noriginal = original; + found = original.find('\x04'); // EOT character + if (found != std::string::npos) { + textdomain = utf8_to_wide(original.substr(0, found)); + noriginal = original.substr(found + 1); + } else { + textdomain = basefilename; + } + + found = noriginal.find('\0'); + if (found != std::string::npos) { + std::vector translations = str_split(utf8_to_wide(translated), L'\0'); + addPluralTranslation(textdomain, plural_form, utf8_to_wide(noriginal.substr(0, found)), translations); + addPluralTranslation(textdomain, plural_form, utf8_to_wide(noriginal.substr(found + 1)), translations); + } else { + addTranslation(textdomain, utf8_to_wide(noriginal), utf8_to_wide(translated)); + } +} + +inline u32 readVarEndian(bool is_be, std::string_view data, size_t pos = 0) +{ + if (pos + 4 > data.size()) + return 0; + if (is_be) { + return + ((u32)(unsigned char)data[pos+0] << 24) | ((u32)(unsigned char)data[pos+1] << 16) | + ((u32)(unsigned char)data[pos+2] << 8) | ((u32)(unsigned char)data[pos+3] << 0); + } else { + return + ((u32)(unsigned char)data[pos+0] << 0) | ((u32)(unsigned char)data[pos+1] << 8) | + ((u32)(unsigned char)data[pos+2] << 16) | ((u32)(unsigned char)data[pos+3] << 24); + } +} + +void Translations::loadMoTranslation(const std::string &basefilename, const std::string &data) +{ + size_t length = data.length(); + std::wstring wbasefilename = utf8_to_wide(basefilename); + GettextPluralForm::Ptr plural_form; + + if (length < 20) { + errorstream << "Ignoring too short mo file" << std::endl; + return; + } + + u32 magic = readVarEndian(false, data); + bool is_be; + if (magic == 0x950412de) { + is_be = false; + } else if (magic == 0xde120495) { + is_be = true; + } else { + errorstream << "Bad magic number for mo file: 0x" << hex_encode(data.substr(0, 4)) << std::endl; + return; + } + + u32 revision = readVarEndian(is_be, data, 4); + if (revision != 0) { + errorstream << "Unknown revision " << revision << " for mo file" << std::endl; + return; + } + + u32 nstring = readVarEndian(is_be, data, 8); + u32 original_offset = readVarEndian(is_be, data, 12); + u32 translated_offset = readVarEndian(is_be, data, 16); + + if (length < original_offset + 8 * (u64)nstring || length < translated_offset + 8 * (u64)nstring) { + errorstream << "Ignoring truncated mo file" << std::endl; + return; + } + + for (u32 i = 0; i < nstring; i++) { + u32 original_len = readVarEndian(is_be, data, original_offset + 8 * i); + u32 original_off = readVarEndian(is_be, data, original_offset + 8 * i + 4); + u32 translated_len = readVarEndian(is_be, data, translated_offset + 8 * i); + u32 translated_off = readVarEndian(is_be, data, translated_offset + 8 * i + 4); + + if (length < original_off + (u64)original_len || length < translated_off + (u64)translated_len) { + errorstream << "Ignoring translation out of mo file" << std::endl; + continue; + } + + if (data[original_off+original_len] != '\0' || data[translated_off+translated_len] != '\0') { + errorstream << "String in mo entry does not have a trailing NUL" << std::endl; + continue; + } + + auto original = data.substr(original_off, original_len); + auto translated = data.substr(translated_off, translated_len); + + if (original.empty()) { + if (plural_form) { + errorstream << "Attempt to override existing mo header entry" << std::endl; + } else { + for (auto &line: str_split(translated, '\n')) { + if (str_starts_with(line, "Plural-Forms:")) { + plural_form = GettextPluralForm::parseHeaderLine(utf8_to_wide(line)); + if (!(plural_form && *plural_form)) { + errorstream << "Invalid Plural-Forms line: " << line << std::endl; + } + } + } + } + } else { + loadMoEntry(wbasefilename, plural_form, original, translated); + } + } + + return; +} + +void Translations::loadTranslation(const std::string &filename, const std::string &data) +{ + const char *trExtension[] = { ".tr", NULL }; + const char *poExtension[] = { ".po", NULL }; + const char *moExtension[] = { ".mo", NULL }; + if (!removeStringEnd(filename, trExtension).empty()) { + loadTrTranslation(data); + } else if (!removeStringEnd(filename, poExtension).empty()) { + std::string basefilename = str_split(filename, '.')[0]; + loadPoTranslation(basefilename, data); + } else if (!removeStringEnd(filename, moExtension).empty()) { + std::string basefilename = str_split(filename, '.')[0]; + loadMoTranslation(basefilename, data); + } else { + errorstream << "loadTranslation called with invalid filename: \"" << filename << "\"" << std::endl; } } diff --git a/src/translation.h b/src/translation.h index d7ed15505..972cdafef 100644 --- a/src/translation.h +++ b/src/translation.h @@ -19,8 +19,12 @@ with this program; if not, write to the Free Software Foundation, Inc., #pragma once +#include "gettext_plural_form.h" #include +#include +#include #include +#include class Translations; #ifndef SERVER @@ -30,11 +34,39 @@ extern Translations *g_client_translations; class Translations { public: - void loadTranslation(const std::string &data); + void loadTranslation(const std::string &filename, const std::string &data); void clear(); - const std::wstring &getTranslation(const std::wstring &textdomain, - const std::wstring &s) const; + const std::wstring &getTranslation( + const std::wstring &textdomain, const std::wstring &s) const; + const std::wstring &getPluralTranslation(const std::wstring &textdomain, + const std::wstring &s, unsigned long int number) const; + static const std::string_view getFileLanguage(const std::string &filename); + static inline bool isTranslationFile(const std::string &filename) + { + return getFileLanguage(filename) != ""; + } + // for testing + inline size_t size() + { + return m_translations.size() + m_plural_translations.size()/2; + } private: std::unordered_map m_translations; + std::unordered_map>> m_plural_translations; + + void addTranslation(const std::wstring &textdomain, const std::wstring &original, + const std::wstring &translated); + void addPluralTranslation(const std::wstring &textdomain, + const GettextPluralForm::Ptr &plural, + const std::wstring &original, + std::vector &translated); + std::wstring unescapeC(const std::wstring &str); + std::optional> parsePoLine(const std::string &line); + bool inEscape(const std::wstring &str, size_t pos); + void loadPoEntry(const std::wstring &basefilename, const GettextPluralForm::Ptr &plural_form, const std::map &entry); + void loadMoEntry(const std::wstring &basefilename, const GettextPluralForm::Ptr &plural_form, const std::string &original, const std::string &translated); + void loadTrTranslation(const std::string &data); + void loadPoTranslation(const std::string &basefilename, const std::string &data); + void loadMoTranslation(const std::string &basefilename, const std::string &data); }; diff --git a/src/unittest/CMakeLists.txt b/src/unittest/CMakeLists.txt index f546d150e..46e4f9a18 100644 --- a/src/unittest/CMakeLists.txt +++ b/src/unittest/CMakeLists.txt @@ -37,6 +37,7 @@ set (UNITTEST_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/test_socket.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_servermodmanager.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_threading.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/test_translations.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_utilities.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_voxelarea.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_voxelalgorithms.cpp diff --git a/src/unittest/test_servermodmanager.cpp b/src/unittest/test_servermodmanager.cpp index 03fdc7042..033cbbc49 100644 --- a/src/unittest/test_servermodmanager.cpp +++ b/src/unittest/test_servermodmanager.cpp @@ -122,7 +122,7 @@ void TestServerModManager::testGetMods() ServerModManager sm(m_worlddir); const auto &mods = sm.getMods(); // `ls ./games/devtest/mods | wc -l` + 1 (test mod) - UASSERTEQ(std::size_t, mods.size(), 33 + 1); + UASSERTEQ(std::size_t, mods.size(), 34 + 1); // Ensure we found basenodes mod (part of devtest) // and test_mod (for testing MINETEST_MOD_PATH). diff --git a/src/unittest/test_translations.cpp b/src/unittest/test_translations.cpp new file mode 100644 index 000000000..37fc78ee4 --- /dev/null +++ b/src/unittest/test_translations.cpp @@ -0,0 +1,64 @@ +// Minetest +// SPDX-License-Identifier: LGPL-2.1-or-later + +#include "translation.h" +#include "filesys.h" +#include "content/subgames.h" +#include "catch.h" + +#define CONTEXT L"context" +#define TEXTDOMAIN_PO L"translation_po" +#define TEST_PO_NAME "translation_po.de.po" +#define TEST_MO_NAME "translation_mo.de.mo" + +static std::string read_translation_file(const std::string &filename) +{ + auto gamespec = findSubgame("devtest"); + REQUIRE(gamespec.isValid()); + auto path = gamespec.gamemods_path + (DIR_DELIM "testtranslations" DIR_DELIM "test_locale" DIR_DELIM) + filename; + std::string content; + REQUIRE(fs::ReadFile(path, content)); + return content; +} + +TEST_CASE("test translations") +{ + SECTION("Plural-Forms function for translations") + { + auto form = GettextPluralForm::parseHeaderLine(L"Plural-Forms: nplurals=3; plural= (n-1+1)<=1 ? n||1?0:1 : 1?(!!2):2;"); + REQUIRE(form); + REQUIRE(form->size() == 3); + CHECK((*form)(0) == 0); + CHECK((*form)(1) == 0); + CHECK((*form)(2) == 1); + } + + SECTION("PO file parser") + { + Translations translations; + translations.loadTranslation(TEST_PO_NAME, read_translation_file(TEST_PO_NAME)); + + CHECK(translations.size() == 5); + CHECK(translations.getTranslation(TEXTDOMAIN_PO, L"foo") == L"bar"); + CHECK(translations.getTranslation(TEXTDOMAIN_PO, L"Untranslated") == L"Untranslated"); + CHECK(translations.getTranslation(TEXTDOMAIN_PO, L"Fuzzy") == L"Fuzzy"); + CHECK(translations.getTranslation(TEXTDOMAIN_PO, L"Multi\\line\nstring") == L"Multi\\\"li\\ne\nresult"); + CHECK(translations.getTranslation(TEXTDOMAIN_PO, L"Wrong order") == L"Wrong order"); + CHECK(translations.getPluralTranslation(TEXTDOMAIN_PO, L"Plural form", 1) == L"Singular result"); + CHECK(translations.getPluralTranslation(TEXTDOMAIN_PO, L"Singular form", 0) == L"Plural result"); + CHECK(translations.getPluralTranslation(TEXTDOMAIN_PO, L"Partial translation", 1) == L"Partially translated"); + CHECK(translations.getPluralTranslation(TEXTDOMAIN_PO, L"Partial translations", 2) == L"Partial translations"); + CHECK(translations.getTranslation(CONTEXT, L"With context") == L"Has context"); + } + + SECTION("MO file parser") + { + Translations translations; + translations.loadTranslation(TEST_MO_NAME, read_translation_file(TEST_MO_NAME)); + + CHECK(translations.size() == 2); + CHECK(translations.getTranslation(CONTEXT, L"With context") == L"Has context"); + CHECK(translations.getPluralTranslation(CONTEXT, L"Plural form", 1) == L"Singular result"); + CHECK(translations.getPluralTranslation(CONTEXT, L"Singular form", 0) == L"Plural result"); + } +} diff --git a/src/util/string.cpp b/src/util/string.cpp index 74a360266..b05d993a5 100644 --- a/src/util/string.cpp +++ b/src/util/string.cpp @@ -154,6 +154,16 @@ std::string wide_to_utf8(std::wstring_view input) return out; } +void wide_add_codepoint(std::wstring &result, char32_t codepoint) +{ + if ((0xD800 <= codepoint && codepoint <= 0xDFFF) || (0x10FFFF < codepoint)) { + // Invalid codepoint, replace with unicode replacement character + result.push_back(0xFFFD); + return; + } + result.push_back(codepoint); +} + #else // _WIN32 std::wstring utf8_to_wide(std::string_view input) @@ -180,6 +190,29 @@ std::string wide_to_utf8(std::wstring_view input) return out; } +void wide_add_codepoint(std::wstring &result, char32_t codepoint) +{ + if (codepoint < 0x10000) { + if (0xD800 <= codepoint && codepoint <= 0xDFFF) { + // Invalid codepoint, part of a surrogate pair + // Replace with unicode replacement character + result.push_back(0xFFFD); + return; + } + result.push_back((wchar_t) codepoint); + return; + } + codepoint -= 0x10000; + if (codepoint >= 0x100000) { + // original codepoint was above 0x10FFFF, so invalid + // replace with unicode replacement character + result.push_back(0xFFFD); + return; + } + result.push_back((wchar_t) ((codepoint >> 10) | 0xD800)); + result.push_back((wchar_t) ((codepoint & 0x3FF) | 0xDC00)); +} + #endif // _WIN32 @@ -668,13 +701,20 @@ std::string wrap_rows(std::string_view from, unsigned row_len, bool has_color_co * We get the argument "White", translated, and create a template string with "@1" instead of it. * We finally get the template "@1 Wool" that was used in the beginning, which we translate * before filling it again. + * + * The \x1bT marking the beginning of a translated string allows two '@'-separated arguments: + * - The first one is the textdomain/context in which the string is to be translated. Most often, + * this is the name of the mod which asked for the translation. + * - The second argument, if present, should be an integer; it is used to decide which plural form + * to use, for languages containing several plural forms. */ static void translate_all(std::wstring_view s, size_t &i, Translations *translations, std::wstring &res); static void translate_string(std::wstring_view s, Translations *translations, - const std::wstring &textdomain, size_t &i, std::wstring &res) + const std::wstring &textdomain, size_t &i, std::wstring &res, + bool use_plural, unsigned long int number) { std::vector args; int arg_number = 1; @@ -751,8 +791,17 @@ static void translate_string(std::wstring_view s, Translations *translations, } // Translate the template. - const std::wstring &toutput = translations ? - translations->getTranslation(textdomain, output) : output; + std::wstring toutput; + if (translations != nullptr) { + if (use_plural) + toutput = translations->getPluralTranslation( + textdomain, output, number); + else + toutput = translations->getTranslation( + textdomain, output); + } else { + toutput = output; + } // Put back the arguments in the translated template. size_t j = 0; @@ -835,10 +884,37 @@ static void translate_all(std::wstring_view s, size_t &i, } else if (parts[0] == L"T") { // Beginning of translated string. std::wstring textdomain; + bool use_plural = false; + unsigned long int number = 0; if (parts.size() > 1) textdomain = parts[1]; + if (parts.size() > 2 && parts[2] != L"") { + // parts[2] should contain a number used for selecting + // the plural form. + // However, we can't blindly cast it to an unsigned long int, + // as it might be too large for that. + // + // We follow the advice of gettext and reduce integers larger than 1000000 + // to something in the range [1000000, 2000000), with the same last 6 digits. + // + // https://www.gnu.org/software/gettext/manual/html_node/Plural-forms.html + constexpr unsigned long int max = 1000000; + + use_plural = true; + number = 0; + for (char c : parts[2]) { + if (L'0' <= c && c <= L'9') { + number = (10 * number + (unsigned long int)(c - L'0')); + if (number >= 2 * max) number = (number % max) + max; + } else { + // Invalid number + use_plural = false; + break; + } + } + } std::wstring translated; - translate_string(s, translations, textdomain, i, translated); + translate_string(s, translations, textdomain, i, translated, use_plural, number); res.append(translated); } else { // Another escape sequence, such as colors. Preserve it. diff --git a/src/util/string.h b/src/util/string.h index aae1167b6..50e208966 100644 --- a/src/util/string.h +++ b/src/util/string.h @@ -32,6 +32,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include #include +#include #include class Translations; @@ -87,6 +88,8 @@ struct FlagDesc { std::wstring utf8_to_wide(std::string_view input); std::string wide_to_utf8(std::wstring_view input); +void wide_add_codepoint(std::wstring &result, char32_t codepoint); + std::string urlencode(std::string_view str); std::string urldecode(std::string_view str); @@ -325,19 +328,30 @@ inline std::string lowercase(std::string_view str) } +inline bool my_isspace(const char c) +{ + return std::isspace(c); +} + +inline bool my_isspace(const wchar_t c) +{ + return std::iswspace(c); +} + /** * @param str * @return A view of \p str with leading and trailing whitespace removed. */ -inline std::string_view trim(std::string_view str) +template +inline std::basic_string_view trim(const std::basic_string_view &str) { size_t front = 0; size_t back = str.size(); - while (front < back && std::isspace(str[front])) + while (front < back && my_isspace(str[front])) ++front; - while (back > front && std::isspace(str[back - 1])) + while (back > front && my_isspace(str[back - 1])) --back; return str.substr(front, back - front); @@ -351,16 +365,24 @@ inline std::string_view trim(std::string_view str) * @param str * @return A copy of \p str with leading and trailing whitespace removed. */ -inline std::string trim(std::string &&str) +template +inline std::basic_string trim(std::basic_string &&str) { - std::string ret(trim(std::string_view(str))); + std::basic_string ret(trim(std::basic_string_view(str))); return ret; } -// The above declaration causes ambiguity with char pointers so we have to fix that: -inline std::string_view trim(const char *str) +template +inline std::basic_string_view trim(const std::basic_string &str) { - return trim(std::string_view(str)); + return trim(std::basic_string_view(str)); +} + +// The above declaration causes ambiguity with char pointers so we have to fix that: +template +inline std::basic_string_view trim(const T *str) +{ + return trim(std::basic_string_view(str)); } From 067a5b5ac3225183ad5b44684cbf3ea101314fa2 Mon Sep 17 00:00:00 2001 From: Lars Mueller Date: Sun, 13 Oct 2024 15:42:26 +0200 Subject: [PATCH 015/178] Fix local animations not working (was broken in 06907aa) --- src/network/clientpackethandler.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/network/clientpackethandler.cpp b/src/network/clientpackethandler.cpp index 373e39b4e..310e10e6e 100644 --- a/src/network/clientpackethandler.cpp +++ b/src/network/clientpackethandler.cpp @@ -1527,6 +1527,8 @@ void Client::handleCommand_LocalPlayerAnimations(NetworkPacket* pkt) } } + *pkt >> player->local_animation_speed; + player->last_animation = LocalPlayerAnimation::NO_ANIM; } From ecf8488406e8b2bd25aac007856360789f08b101 Mon Sep 17 00:00:00 2001 From: cx384 Date: Sun, 28 Jan 2024 17:35:31 +0100 Subject: [PATCH 016/178] Fix HUD inventory direction position --- games/devtest/mods/testhud/init.lua | 76 +++++++++++++++++++++++++++-- src/client/hud.cpp | 8 +-- 2 files changed, 77 insertions(+), 7 deletions(-) diff --git a/games/devtest/mods/testhud/init.lua b/games/devtest/mods/testhud/init.lua index 1788ad77e..4afece209 100644 --- a/games/devtest/mods/testhud/init.lua +++ b/games/devtest/mods/testhud/init.lua @@ -272,11 +272,81 @@ minetest.register_chatcommand("hudhotbars", { end }) +-- Inventories + +local hud_inventory_defs = { + { + type = "inventory", + position = {x=0.2, y=0.5}, + direction = 0, + text = "main", + number = 4, + item = 2, + }, + { + type = "inventory", + position = {x=0.2, y=0.5}, + direction = 2, + text = "main", + number = 4, + item = 2, + }, + { + type = "inventory", + position = {x=0.7, y=0.5}, + direction = 1, + text = "main", + number = 4, + item = 2, + }, + { + type = "inventory", + position = {x=0.7, y=0.5}, + direction = 3, + text = "main", + number = 4, + item = 2, + }, +} + +local player_hud_inventories= {} +minetest.register_chatcommand("hudinventories", { + description = "Shows some test Lua HUD elements of type inventory. (add: Adds elements (default). remove: Removes elements)", + params = "[ add | remove ]", + func = function(name, params) + local player = minetest.get_player_by_name(name) + if not player then + return false, "No player." + end + + local id_table = player_hud_inventories[name] + if not id_table then + id_table = {} + player_hud_inventories[name] = id_table + end + + if params == "remove" then + for _, id in ipairs(id_table) do + player:hud_remove(id) + end + return true, "HUD Inventories removed." + end + + -- params == "add" or default + for _, def in ipairs(hud_inventory_defs) do + table.insert(id_table, player:hud_add(def)) + end + return true, #hud_inventory_defs .." HUD Inventories added." + end +}) + minetest.register_on_leaveplayer(function(player) - player_font_huds[player:get_player_name()] = nil - player_waypoints[player:get_player_name()] = nil - player_hud_hotbars[player:get_player_name()] = nil + local playername = player:get_player_name() + player_font_huds[playername] = nil + player_waypoints[playername] = nil + player_hud_hotbars[playername] = nil + player_hud_inventories[playername] = nil end) minetest.register_chatcommand("hudprint", { diff --git a/src/client/hud.cpp b/src/client/hud.cpp index 29fc31ffa..6fd6b7d03 100644 --- a/src/client/hud.cpp +++ b/src/client/hud.cpp @@ -302,20 +302,20 @@ void Hud::drawItems(v2s32 screen_pos, v2s32 screen_offset, s32 itemcount, v2f al // Draw items core::rect imgrect(0, 0, m_hotbar_imagesize, m_hotbar_imagesize); - const s32 list_size = mainlist ? mainlist->getSize() : 0; - for (s32 i = inv_offset; i < itemcount && i < list_size; i++) { + const s32 list_max = std::min(itemcount, (s32) (mainlist ? mainlist->getSize() : 0 )); + for (s32 i = inv_offset; i < list_max; i++) { s32 fullimglen = m_hotbar_imagesize + m_padding * 2; v2s32 steppos; switch (direction) { case HUD_DIR_RIGHT_LEFT: - steppos = v2s32(-(m_padding + (i - inv_offset) * fullimglen), m_padding); + steppos = v2s32(m_padding + (list_max - 1 - i - inv_offset) * fullimglen, m_padding); break; case HUD_DIR_TOP_BOTTOM: steppos = v2s32(m_padding, m_padding + (i - inv_offset) * fullimglen); break; case HUD_DIR_BOTTOM_TOP: - steppos = v2s32(m_padding, -(m_padding + (i - inv_offset) * fullimglen)); + steppos = v2s32(m_padding, m_padding + (list_max - 1 - i - inv_offset) * fullimglen); break; default: steppos = v2s32(m_padding + (i - inv_offset) * fullimglen, m_padding); From 7435ea0d4eae807bfd88e27fbee4521e336af367 Mon Sep 17 00:00:00 2001 From: grorp Date: Mon, 14 Oct 2024 09:43:29 +0200 Subject: [PATCH 017/178] Show warning in the settings menu when shaders are disabled (#15272) --- builtin/mainmenu/settings/dlg_settings.lua | 11 ++++++-- .../settings/shader_warning_component.lua | 26 +++++++++++++++++++ 2 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 builtin/mainmenu/settings/shader_warning_component.lua diff --git a/builtin/mainmenu/settings/dlg_settings.lua b/builtin/mainmenu/settings/dlg_settings.lua index d668fba50..509a6a420 100644 --- a/builtin/mainmenu/settings/dlg_settings.lua +++ b/builtin/mainmenu/settings/dlg_settings.lua @@ -19,6 +19,8 @@ local component_funcs = dofile(core.get_mainmenu_path() .. DIR_DELIM .. "settings" .. DIR_DELIM .. "components.lua") +local shader_warning_component = dofile(core.get_mainmenu_path() .. DIR_DELIM .. + "settings" .. DIR_DELIM .. "shader_warning_component.lua") local shadows_component = dofile(core.get_mainmenu_path() .. DIR_DELIM .. "settings" .. DIR_DELIM .. "shadows_component.lua") @@ -152,7 +154,12 @@ local function load() table.insert(page_by_id.controls_keyboard_and_mouse.content, 1, change_keys) do - local content = page_by_id.graphics_and_audio_effects.content + local content = page_by_id.graphics_and_audio_graphics.content + table.insert(content, 1, shader_warning_component) + + content = page_by_id.graphics_and_audio_effects.content + table.insert(content, 1, shader_warning_component) + local idx = table.indexof(content, "enable_dynamic_shadows") table.insert(content, idx, shadows_component) @@ -706,7 +713,7 @@ local function buttonhandler(this, fields) local function after_setting_change(comp) write_settings_early() - if comp.setting.name == "touch_controls" then + if comp.setting and comp.setting.name == "touch_controls" then -- Changing the "touch_controls" setting may result in a different -- page list. regenerate_page_list(dialogdata) diff --git a/builtin/mainmenu/settings/shader_warning_component.lua b/builtin/mainmenu/settings/shader_warning_component.lua new file mode 100644 index 000000000..d1de0cd4a --- /dev/null +++ b/builtin/mainmenu/settings/shader_warning_component.lua @@ -0,0 +1,26 @@ +-- Minetest +-- SPDX-License-Identifier: LGPL-2.1-or-later + +return { + query_text = "Shaders", + requires = { + shaders_support = true, + shaders = false, + }, + full_width = true, + get_formspec = function(self, avail_w) + local fs = { + "box[0,0;", avail_w, ",1.2;", mt_color_orange, "]", + "label[0.2,0.4;", fgettext("Shaders are disabled."), "]", + "label[0.2,0.8;", fgettext("This is not a recommended configuration."), "]", + "button[", avail_w - 2.2, ",0.2;2,0.8;fix_shader_warning;", fgettext("Enable"), "]", + } + return table.concat(fs, ""), 1.2 + end, + on_submit = function(self, fields) + if fields.fix_shader_warning then + core.settings:remove("enable_shaders") -- default value is true + return true + end + end, +} From 6431ef7324a36cc0752de30b9e96eb2dadda1b58 Mon Sep 17 00:00:00 2001 From: Erich Schubert Date: Mon, 14 Oct 2024 22:09:01 +0200 Subject: [PATCH 018/178] Trivial improvement to `get_item_group` (#15260) One hash table lookup is enough, and this is even easier for the JIT to inline, optimize, etc. --- builtin/game/misc_s.lua | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/builtin/game/misc_s.lua b/builtin/game/misc_s.lua index ab15b230e..440e52d81 100644 --- a/builtin/game/misc_s.lua +++ b/builtin/game/misc_s.lua @@ -25,11 +25,8 @@ end function core.get_item_group(name, group) - if not core.registered_items[name] or not - core.registered_items[name].groups[group] then - return 0 - end - return core.registered_items[name].groups[group] + local def = core.registered_items[name] + return def and def.groups[group] or 0 end From 6d7a5197407460515b68e1ca18052c124b2fe15b Mon Sep 17 00:00:00 2001 From: sfan5 Date: Mon, 14 Oct 2024 22:09:11 +0200 Subject: [PATCH 019/178] Disable SDL2 for 5.10.0 (#15284) see #14545 --- .github/workflows/windows.yml | 2 +- doc/compiling/linux.md | 12 ++++++------ doc/compiling/windows.md | 3 ++- irr/README.md | 2 +- irr/src/CMakeLists.txt | 2 +- util/buildbot/buildwin32.sh | 1 - util/buildbot/buildwin64.sh | 1 - util/buildbot/common.sh | 3 --- util/ci/common.sh | 2 +- 9 files changed, 12 insertions(+), 16 deletions(-) diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 367933148..4b937e80e 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -71,7 +71,7 @@ jobs: env: VCPKG_VERSION: 01f602195983451bc83e72f4214af2cbc495aa94 # 2024.05.24 - vcpkg_packages: zlib zstd curl[winssl] openal-soft libvorbis libogg libjpeg-turbo sqlite3 freetype luajit gmp jsoncpp sdl2 + vcpkg_packages: zlib zstd curl[winssl] openal-soft libvorbis libogg libjpeg-turbo sqlite3 freetype luajit gmp jsoncpp opengl-registry strategy: fail-fast: false matrix: diff --git a/doc/compiling/linux.md b/doc/compiling/linux.md index 573c6908e..3b31250e8 100644 --- a/doc/compiling/linux.md +++ b/doc/compiling/linux.md @@ -21,27 +21,27 @@ For Debian/Ubuntu users: - sudo apt install g++ make libc6-dev cmake libpng-dev libjpeg-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev libzstd-dev libluajit-5.1-dev gettext libsdl2-dev + sudo apt install g++ make libc6-dev cmake libpng-dev libjpeg-dev libxi-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev libzstd-dev libluajit-5.1-dev gettext For Fedora users: - sudo dnf install make automake gcc gcc-c++ kernel-devel cmake libcurl-devel openal-soft-devel libpng-devel libjpeg-devel libvorbis-devel libogg-devel freetype-devel mesa-libGL-devel zlib-devel jsoncpp-devel gmp-devel sqlite-devel luajit-devel leveldb-devel ncurses-devel spatialindex-devel libzstd-devel gettext SDL2-devel + sudo dnf install make automake gcc gcc-c++ kernel-devel cmake libcurl-devel openal-soft-devel libpng-devel libjpeg-devel libvorbis-devel libXi-devel libogg-devel freetype-devel mesa-libGL-devel zlib-devel jsoncpp-devel gmp-devel sqlite-devel luajit-devel leveldb-devel ncurses-devel spatialindex-devel libzstd-devel gettext For openSUSE users: - sudo zypper install gcc gcc-c++ cmake libjpeg8-devel libpng16-devel openal-soft-devel libcurl-devel sqlite3-devel luajit-devel libzstd-devel Mesa-libGL-devel libvorbis-devel freetype2-devel SDL2-devel + sudo zypper install gcc gcc-c++ cmake libjpeg8-devel libpng16-devel openal-soft-devel libcurl-devel sqlite3-devel luajit-devel libzstd-devel Mesa-libGL-devel libXi-devel libvorbis-devel freetype2-devel For Arch users: - sudo pacman -S --needed base-devel libcurl-gnutls cmake libpng sqlite libogg libvorbis openal freetype2 jsoncpp gmp luajit leveldb ncurses zstd gettext sdl2 + sudo pacman -S --needed base-devel libcurl-gnutls cmake libxi libpng sqlite libogg libvorbis openal freetype2 jsoncpp gmp luajit leveldb ncurses zstd gettext For Alpine users: - sudo apk add build-base cmake libpng-dev jpeg-dev mesa-dev sqlite-dev libogg-dev libvorbis-dev openal-soft-dev curl-dev freetype-dev zlib-dev gmp-dev jsoncpp-dev luajit-dev zstd-dev gettext sdl2-dev + sudo apk add build-base cmake libpng-dev jpeg-dev libxi-dev mesa-dev sqlite-dev libogg-dev libvorbis-dev openal-soft-dev curl-dev freetype-dev zlib-dev gmp-dev jsoncpp-dev luajit-dev zstd-dev gettext For Void users: - sudo xbps-install cmake libpng-devel jpeg-devel mesa sqlite-devel libogg-devel libvorbis-devel libopenal-devel libcurl-devel freetype-devel zlib-devel gmp-devel jsoncpp-devel LuaJIT-devel zstd libzstd-devel gettext SDL2-devel + sudo xbps-install cmake libpng-devel jpeg-devel libXi-devel mesa sqlite-devel libogg-devel libvorbis-devel libopenal-devel libcurl-devel freetype-devel zlib-devel gmp-devel jsoncpp-devel LuaJIT-devel zstd libzstd-devel gettext ## Download diff --git a/doc/compiling/windows.md b/doc/compiling/windows.md index eeaf2e4fd..0d3f15e94 100644 --- a/doc/compiling/windows.md +++ b/doc/compiling/windows.md @@ -13,8 +13,9 @@ It is highly recommended to use vcpkg as package manager. After you successfully built vcpkg you can easily install the required libraries: + ```powershell -vcpkg install zlib zstd curl[winssl] openal-soft libvorbis libogg libjpeg-turbo sqlite3 freetype luajit gmp jsoncpp gettext[tools] sdl2 --triplet x64-windows +vcpkg install zlib zstd curl[winssl] openal-soft libvorbis libogg libjpeg-turbo sqlite3 freetype luajit gmp jsoncpp gettext[tools] opengl-registry --triplet x64-windows ``` - `curl` is optional, but required to read the serverlist, `curl[winssl]` is required to use the content store. diff --git a/irr/README.md b/irr/README.md index 50e7338a5..25fff00e5 100644 --- a/irr/README.md +++ b/irr/README.md @@ -21,7 +21,7 @@ Aside from standard search options (`ZLIB_INCLUDE_DIR`, `ZLIB_LIBRARY`, ...) the * `ENABLE_OPENGL` - Enable OpenGL driver * `ENABLE_OPENGL3` (default: `OFF`) - Enable OpenGL 3+ driver * `ENABLE_GLES2` - Enable OpenGL ES 2+ driver -* `USE_SDL2` (default: platform-dependent, usually `ON`) - Use SDL2 instead of older native device code +* `USE_SDL2` (default: ON for Android, OFF for other platforms) - Use SDL2 instead of older native device code However, IrrlichtMt cannot be built or installed separately. diff --git a/irr/src/CMakeLists.txt b/irr/src/CMakeLists.txt index 6e38220be..768ee8d37 100644 --- a/irr/src/CMakeLists.txt +++ b/irr/src/CMakeLists.txt @@ -1,6 +1,6 @@ # When enabling SDL2 by default on macOS, don't forget to change # "NSHighResolutionCapable" to true in "Info.plist". -if(NOT APPLE) +if(ANDROID) set(DEFAULT_SDL2 ON) endif() diff --git a/util/buildbot/buildwin32.sh b/util/buildbot/buildwin32.sh index 34767f707..b070a4343 100755 --- a/util/buildbot/buildwin32.sh +++ b/util/buildbot/buildwin32.sh @@ -42,7 +42,6 @@ download "$libhost/llvm/libleveldb-$leveldb_version-win32.zip" download "$libhost/llvm/openal-soft-$openal_version-win32.zip" download "$libhost/llvm/libjpeg-$libjpeg_version-win32.zip" download "$libhost/llvm/libpng-$libpng_version-win32.zip" -download "$libhost/llvm/sdl2-$sdl2_version-win32.zip" # Set source dir, downloading Minetest as needed get_sources diff --git a/util/buildbot/buildwin64.sh b/util/buildbot/buildwin64.sh index c63a18901..541045a02 100755 --- a/util/buildbot/buildwin64.sh +++ b/util/buildbot/buildwin64.sh @@ -42,7 +42,6 @@ download "$libhost/llvm/libleveldb-$leveldb_version-win64.zip" download "$libhost/llvm/openal-soft-$openal_version-win64.zip" download "$libhost/llvm/libjpeg-$libjpeg_version-win64.zip" download "$libhost/llvm/libpng-$libpng_version-win64.zip" -download "$libhost/llvm/sdl2-$sdl2_version-win64.zip" # Set source dir, downloading Minetest as needed get_sources diff --git a/util/buildbot/common.sh b/util/buildbot/common.sh index ff3aef2e9..32434abdd 100644 --- a/util/buildbot/common.sh +++ b/util/buildbot/common.sh @@ -88,9 +88,6 @@ add_cmake_libs () { -DJPEG_INCLUDE_DIR=$libdir/libjpeg/include -DJPEG_DLL="$(_dlls $libdir/libjpeg/bin/libjpeg*)" - -DCMAKE_PREFIX_PATH=$libdir/sdl2/lib/cmake - -DSDL2_DLL="$(_dlls $libdir/sdl2/bin/*)" - -DZLIB_INCLUDE_DIR=$libdir/zlib/include -DZLIB_LIBRARY=$libdir/zlib/lib/libz.dll.a -DZLIB_DLL=$libdir/zlib/bin/zlib1.dll diff --git a/util/ci/common.sh b/util/ci/common.sh index 201b182f2..bd0220db5 100644 --- a/util/ci/common.sh +++ b/util/ci/common.sh @@ -4,7 +4,7 @@ install_linux_deps() { local pkgs=( cmake gettext postgresql - libpng-dev libjpeg-dev libgl1-mesa-dev libsdl2-dev libfreetype-dev + libpng-dev libjpeg-dev libgl1-mesa-dev libxi-dev libfreetype-dev libsqlite3-dev libhiredis-dev libogg-dev libgmp-dev libvorbis-dev libopenal-dev libpq-dev libleveldb-dev libcurl4-openssl-dev libzstd-dev ) From c7938ce81cb37b22f523e785c3d8e3d95b4670f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lars=20M=C3=BCller?= <34514239+appgurueu@users.noreply.github.com> Date: Tue, 15 Oct 2024 12:19:19 +0200 Subject: [PATCH 020/178] Improve glTF logging (#15274) Also removes all animations but the first one from gltf_frog.gltf to address the corresponding warning. Catches some more possible exceptions (out of bounds, optional access) which might be caused by a broken model to properly log them. --- games/devtest/mods/gltf/models/gltf_frog.gltf | 2 +- irr/src/CGLTFMeshFileLoader.cpp | 109 +++++++++--------- irr/src/CGLTFMeshFileLoader.h | 10 +- src/unittest/test_irr_gltf_mesh_loader.cpp | 1 + 4 files changed, 68 insertions(+), 54 deletions(-) diff --git a/games/devtest/mods/gltf/models/gltf_frog.gltf b/games/devtest/mods/gltf/models/gltf_frog.gltf index 201604fd3..a41e9de71 100644 --- a/games/devtest/mods/gltf/models/gltf_frog.gltf +++ b/games/devtest/mods/gltf/models/gltf_frog.gltf @@ -1 +1 @@ -{"asset":{"version":"2.0","generator":"Blockbench 4.9.4 glTF exporter"},"scenes":[{"nodes":[20],"name":"blockbench_export"}],"scene":0,"nodes":[{"name":"cube","mesh":0},{"name":"cube","mesh":1},{"name":"cube","mesh":2},{"name":"body","children":[0,1,2]},{"translation":[0,0,-0.0625],"name":"cube","mesh":3},{"translation":[0.03125,0,-0.3125],"name":"cube","mesh":4},{"rotation":[0,-0.19509032201612825,0,0.9807852804032304],"translation":[0.01812248876854733,-0.0625,-0.25194388507103505],"name":"cube","mesh":5},{"translation":[0.0625,0,0.3125],"name":"leftleg","children":[4,5,6]},{"translation":[0.0625,0,-0.3125],"name":"cube","mesh":6},{"translation":[-0.03125,0,-0.3125],"name":"cube","mesh":7},{"rotation":[0,0.19509032201612825,0,0.9807852804032304],"translation":[-0.01812248876854733,-0.0625,-0.25194388507103505],"name":"cube","mesh":8},{"translation":[-0.0625,0,0.3125],"name":"rightleg","children":[8,9,10]},{"translation":[-0.125,-0.0625,0.125],"name":"cube","mesh":9},{"rotation":[0,0.5372996083468239,0,0.8433914458128857],"translation":[0.10431178959951112,-0.0625,0.2349474087973531],"name":"cube","mesh":10},{"rotation":[0,0.5372996083468239,0,0.8433914458128857],"translation":[0.10431178959951112,-0.0625,0.2349474087973531],"name":"cube","mesh":11},{"translation":[0.125,0.0625,-0.125],"name":"leftarm","children":[12,13,14]},{"translation":[0.125,-0.0625,0.125],"name":"cube","mesh":12},{"rotation":[0,-0.5372996083468239,0,0.8433914458128857],"translation":[-0.10431178959951112,-0.0625,0.2349474087973531],"name":"cube","mesh":13},{"rotation":[0,-0.5372996083468239,0,0.8433914458128857],"translation":[-0.10431178959951112,-0.0625,0.2349474087973531],"name":"cube","mesh":14},{"translation":[-0.125,0.0625,-0.125],"name":"rightarm","children":[16,17,18]},{"children":[3,7,11,15,19]}],"bufferViews":[{"buffer":0,"byteOffset":0,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":288,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":576,"byteLength":192,"target":34962,"byteStride":8},{"buffer":0,"byteOffset":768,"byteLength":72,"target":34963},{"buffer":0,"byteOffset":840,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":1128,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":1416,"byteLength":192,"target":34962,"byteStride":8},{"buffer":0,"byteOffset":1608,"byteLength":72,"target":34963},{"buffer":0,"byteOffset":1680,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":1968,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":2256,"byteLength":192,"target":34962,"byteStride":8},{"buffer":0,"byteOffset":2448,"byteLength":72,"target":34963},{"buffer":0,"byteOffset":2520,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":2808,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":3096,"byteLength":192,"target":34962,"byteStride":8},{"buffer":0,"byteOffset":3288,"byteLength":72,"target":34963},{"buffer":0,"byteOffset":3360,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":3648,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":3936,"byteLength":192,"target":34962,"byteStride":8},{"buffer":0,"byteOffset":4128,"byteLength":72,"target":34963},{"buffer":0,"byteOffset":4200,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":4488,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":4776,"byteLength":192,"target":34962,"byteStride":8},{"buffer":0,"byteOffset":4968,"byteLength":72,"target":34963},{"buffer":0,"byteOffset":5040,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":5328,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":5616,"byteLength":192,"target":34962,"byteStride":8},{"buffer":0,"byteOffset":5808,"byteLength":72,"target":34963},{"buffer":0,"byteOffset":5880,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":6168,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":6456,"byteLength":192,"target":34962,"byteStride":8},{"buffer":0,"byteOffset":6648,"byteLength":72,"target":34963},{"buffer":0,"byteOffset":6720,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":7008,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":7296,"byteLength":192,"target":34962,"byteStride":8},{"buffer":0,"byteOffset":7488,"byteLength":72,"target":34963},{"buffer":0,"byteOffset":7560,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":7848,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":8136,"byteLength":192,"target":34962,"byteStride":8},{"buffer":0,"byteOffset":8328,"byteLength":72,"target":34963},{"buffer":0,"byteOffset":8400,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":8688,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":8976,"byteLength":192,"target":34962,"byteStride":8},{"buffer":0,"byteOffset":9168,"byteLength":72,"target":34963},{"buffer":0,"byteOffset":9240,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":9528,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":9816,"byteLength":192,"target":34962,"byteStride":8},{"buffer":0,"byteOffset":10008,"byteLength":72,"target":34963},{"buffer":0,"byteOffset":10080,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":10368,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":10656,"byteLength":192,"target":34962,"byteStride":8},{"buffer":0,"byteOffset":10848,"byteLength":72,"target":34963},{"buffer":0,"byteOffset":10920,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":11208,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":11496,"byteLength":192,"target":34962,"byteStride":8},{"buffer":0,"byteOffset":11688,"byteLength":72,"target":34963},{"buffer":0,"byteOffset":11760,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":12048,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":12336,"byteLength":192,"target":34962,"byteStride":8},{"buffer":0,"byteOffset":12528,"byteLength":72,"target":34963},{"buffer":0,"byteOffset":12600,"byteLength":12},{"buffer":0,"byteOffset":12612,"byteLength":48},{"buffer":0,"byteOffset":12660,"byteLength":12},{"buffer":0,"byteOffset":12672,"byteLength":48},{"buffer":0,"byteOffset":12720,"byteLength":12},{"buffer":0,"byteOffset":12732,"byteLength":48},{"buffer":0,"byteOffset":12780,"byteLength":12},{"buffer":0,"byteOffset":12792,"byteLength":48},{"buffer":0,"byteOffset":12840,"byteLength":12},{"buffer":0,"byteOffset":12852,"byteLength":48},{"buffer":0,"byteOffset":12900,"byteLength":12},{"buffer":0,"byteOffset":12912,"byteLength":48},{"buffer":0,"byteOffset":12960,"byteLength":12},{"buffer":0,"byteOffset":12972,"byteLength":48},{"buffer":0,"byteOffset":13020,"byteLength":12},{"buffer":0,"byteOffset":13032,"byteLength":48},{"buffer":0,"byteOffset":13080,"byteLength":12},{"buffer":0,"byteOffset":13092,"byteLength":48},{"buffer":0,"byteOffset":13140,"byteLength":4},{"buffer":0,"byteOffset":13144,"byteLength":16},{"buffer":0,"byteOffset":13160,"byteLength":4},{"buffer":0,"byteOffset":13164,"byteLength":16}],"buffers":[{"byteLength":13180,"uri":"data:application/octet-stream;base64,AAAgPgAAAD4AAIA+AAAgPgAAAD4AAIC9AAAgPgAAAAAAAIA+AAAgPgAAAAAAAIC9AAAgvgAAAD4AAIC9AAAgvgAAAD4AAIA+AAAgvgAAAAAAAIC9AAAgvgAAAAAAAIA+AAAgvgAAAD4AAIC9AAAgPgAAAD4AAIC9AAAgvgAAAD4AAIA+AAAgPgAAAD4AAIA+AAAgvgAAAAAAAIA+AAAgPgAAAAAAAIA+AAAgvgAAAAAAAIC9AAAgPgAAAAAAAIC9AAAgvgAAAD4AAIA+AAAgPgAAAD4AAIA+AAAgvgAAAAAAAIA+AAAgPgAAAAAAAIA+AAAgPgAAAD4AAIC9AAAgvgAAAD4AAIC9AAAgPgAAAAAAAIC9AAAgvgAAAAAAAIC9AACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAOgCAID4AgB8+AIAgPgAAADoAgF8+AIAfPgCAXz4AQKA+AIAgPgDA7z4AgCA+AECgPgCAXz4AwO8+AIBfPgDAnz4AgB8+AIAgPgCAHz4AwJ8+AAAAOgCAID4AAAA6AMDvPgAAADoAQKA+AAAAOgDA7z4AgB8+AECgPgCAHz4AQPA+AIAgPgDgHz8AgCA+AEDwPgCAXz4A4B8/AIBfPgCAID4AgCA+AMCfPgCAID4AgCA+AIBfPgDAnz4AgF8+AAACAAEAAgADAAEABAAGAAUABgAHAAUACAAKAAkACgALAAkADAAOAA0ADgAPAA0AEAASABEAEgATABEAFAAWABUAFgAXABUAAAAAPgAAAD4AAIC9AAAAPgAAAD4AAKC+AAAAPgAAAAAAAIC9AAAAPgAAAAAAAKC+AAAAvgAAAD4AAKC+AAAAvgAAAD4AAIC9AAAAvgAAAAAAAKC+AAAAvgAAAAAAAIC9AAAAvgAAAD4AAKC+AAAAPgAAAD4AAKC+AAAAvgAAAD4AAIC9AAAAPgAAAD4AAIC9AAAAvgAAAAAAAIC9AAAAPgAAAAAAAIC9AAAAvgAAAAAAAKC+AAAAPgAAAAAAAKC+AAAAvgAAAD4AAIC9AAAAPgAAAD4AAIC9AAAAvgAAAAAAAIC9AAAAPgAAAAAAAIC9AAAAPgAAAD4AAKC+AAAAvgAAAD4AAKC+AAAAPgAAAAAAAKC+AAAAvgAAAAAAAKC+AACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAOgBAsD4AAP89AECwPgAAADoAwM8+AAD/PQDAzz4AQIA+AECwPgDAvz4AQLA+AECAPgDAzz4AwL8+AMDPPgCAfz4AwK8+AIAAPgDArz4AgH8+AIBgPgCAAD4AgGA+AMC/PgCAYD4AQIA+AIBgPgDAvz4AwK8+AECAPgDArz4AQMA+AECwPgDA/z4AQLA+AEDAPgDAzz4AwP8+AMDPPgCAAD4AQLA+AIB/PgBAsD4AgAA+AMDPPgCAfz4AwM8+AAACAAEAAgADAAEABAAGAAUABgAHAAUACAAKAAkACgALAAkADAAOAA0ADgAPAA0AEAASABEAEgATABEAFAAWABUAFgAXABUAAAAAPQAAAD4AAKA+AAAAPQAAAD4AAIA+AAAAPQAAAAAAAKA+AAAAPQAAAAAAAIA+AAAAvQAAAD4AAIA+AAAAvQAAAD4AAKA+AAAAvQAAAAAAAIA+AAAAvQAAAAAAAKA+AAAAvQAAAD4AAIA+AAAAPQAAAD4AAIA+AAAAvQAAAD4AAKA+AAAAPQAAAD4AAKA+AAAAvQAAAAAAAKA+AAAAPQAAAAAAAKA+AAAAvQAAAAAAAIA+AAAAPQAAAAAAAIA+AAAAvQAAAD4AAKA+AAAAPQAAAD4AAKA+AAAAvQAAAAAAAKA+AAAAPQAAAAAAAKA+AAAAPQAAAD4AAIA+AAAAvQAAAD4AAIA+AAAAPQAAAAAAAIA+AAAAvQAAAAAAAIA+AACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AEDwPgAAAj0AwP8+AAACPQBA8D4AAL89AMD/PgAAvz0AIAg/AAACPQDgDz8AAAI9ACAIPwAAvz0A4A8/AAC/PQDgBz8AAPw8ACAAPwAA/DwA4Ac/AAAAOgAgAD8AAAA6AOAPPwAAADoAIAg/AAAAOgDgDz8AAPw8ACAIPwAA/DwAIBA/AAACPQDgFz8AAAI9ACAQPwAAvz0A4Bc/AAC/PQAgAD8AAAI9AOAHPwAAAj0AIAA/AAC/PQDgBz8AAL89AAACAAEAAgADAAEABAAGAAUABgAHAAUACAAKAAkACgALAAkADAAOAA0ADgAPAA0AEAASABEAEgATABEAFAAWABUAFgAXABUAAABgPgAAAD4AAEA+AABgPgAAAD4AAAAAAABgPgAAAAAAAEA+AABgPgAAAAAAAAAAAAAAvQAAAD4AAAAAAAAAvQAAAD4AAEA+AAAAvQAAAAAAAAAAAAAAvQAAAAAAAEA+AAAAvQAAAD4AAAAAAABgPgAAAD4AAAAAAAAAvQAAAD4AAEA+AABgPgAAAD4AAEA+AAAAvQAAAAAAAEA+AABgPgAAAAAAAEA+AAAAvQAAAAAAAAAAAABgPgAAAAAAAAAAAAAAvQAAAD4AAEA+AABgPgAAAD4AAEA+AAAAvQAAAAAAAEA+AABgPgAAAAAAAEA+AABgPgAAAD4AAAAAAAAAvQAAAD4AAAAAAABgPgAAAAAAAAAAAAAAvQAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AEDQPgBA0D4AwP8+AEDQPgBA0D4AwO8+AMD/PgDA7z4AICA/AEDQPgDgNz8AQNA+ACAgPwDA7z4A4Dc/AMDvPgDgHz8AwM8+ACAAPwDAzz4A4B8/AECgPgAgAD8AQKA+AOA/PwBAoD4AICA/AECgPgDgPz8AwM8+ACAgPwDAzz4AIDg/AEDQPgDgVz8AQNA+ACA4PwDA7z4A4Fc/AMDvPgAgAD8AQNA+AOAfPwBA0D4AIAA/AMDvPgDgHz8AwO8+AAACAAEAAgADAAEABAAGAAUABgAHAAUACAAKAAkACgALAAkADAAOAA0ADgAPAA0AEAASABEAEgATABEAFAAWABUAFgAXABUAAABgPgAAwD0AABA/AABgPgAAwD0AAKA+AABgPgAAAD0AABA/AABgPgAAAD0AAKA+AADAPQAAwD0AAKA+AADAPQAAwD0AABA/AADAPQAAAD0AAKA+AADAPQAAAD0AABA/AADAPQAAwD0AAKA+AABgPgAAwD0AAKA+AADAPQAAwD0AABA/AABgPgAAwD0AABA/AADAPQAAAD0AABA/AABgPgAAAD0AABA/AADAPQAAAD0AAKA+AABgPgAAAD0AAKA+AADAPQAAwD0AABA/AABgPgAAwD0AABA/AADAPQAAAD0AABA/AABgPgAAAD0AABA/AABgPgAAwD0AAKA+AADAPQAAwD0AAKA+AABgPgAAAD0AAKA+AADAPQAAAD0AAKA+AACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AECgPgAgGD8AwN8+ACAYPwBAoD4A4B8/AMDfPgDgHz8AIAA/ACAYPwDgHz8AIBg/ACAAPwDgHz8A4B8/AOAfPwDA/z4A4Bc/AEDgPgDgFz8AwP8+AEDwPgBA4D4AQPA+AOAPPwBA8D4AIAA/AEDwPgDgDz8A4Bc/ACAAPwDgFz8AICA/ACAYPwDgLz8AIBg/ACAgPwDgHz8A4C8/AOAfPwBA4D4AIBg/AMD/PgAgGD8AQOA+AOAfPwDA/z4A4B8/AAACAAEAAgADAAEABAAGAAUABgAHAAUACAAKAAkACgALAAkADAAOAA0ADgAPAA0AEAASABEAEgATABEAFAAWABUAFgAXABUAMQjQPgAAQD4AAMA+MQjQPgAAQD4AAIA+MQjQPgAAgD0AAMA+MQjQPgAAgD0AAIA+AADQPgAAQD4AAIA+AADQPgAAQD4AAMA+AADQPgAAgD0AAIA+AADQPgAAgD0AAMA+AADQPgAAQD4AAIA+MQjQPgAAQD4AAIA+AADQPgAAQD4AAMA+MQjQPgAAQD4AAMA+AADQPgAAgD0AAMA+MQjQPgAAgD0AAMA+AADQPgAAgD0AAIA+MQjQPgAAgD0AAIA+AADQPgAAQD4AAMA+MQjQPgAAQD4AAMA+AADQPgAAgD0AAMA+MQjQPgAAgD0AAMA+MQjQPgAAQD4AAIA+AADQPgAAQD4AAIA+MQjQPgAAgD0AAIA+AADQPgAAgD0AAIA+AACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAOgCAYD4AAH49AIBgPgAAADoAwI8+AAB+PQDAjz4AAIE9AIBgPgAA/z0AgGA+AACBPQDAjz4AAP89AMCPPgAAgT0AgF8+AAB+PQCAXz4AAIE9AIAgPgAAfj0AgCA+AACBPQCAID4AAH49AIAgPgAAgT0AgF8+AAB+PQCAXz4AgAA+AIBgPgAA/z0AgGA+AIAAPgDAjz4AAP89AMCPPgAAgT0AgGA+AAB+PQCAYD4AAIE9AMCPPgAAfj0AwI8+AAACAAEAAgADAAEABAAGAAUABgAHAAUACAAKAAkACgALAAkADAAOAA0ADgAPAA0AEAASABEAEgATABEAFAAWABUAFgAXABUAAAAAvQAAAD4AAOA+AAAAvQAAAD4AAIA+AAAAvQAAAAAAAOA+AAAAvQAAAAAAAIA+AACQvgAAAD4AAIA+AACQvgAAAD4AAOA+AACQvgAAAAAAAIA+AACQvgAAAAAAAOA+AACQvgAAAD4AAIA+AAAAvQAAAD4AAIA+AACQvgAAAD4AAOA+AAAAvQAAAD4AAOA+AACQvgAAAAAAAOA+AAAAvQAAAAAAAOA+AACQvgAAAAAAAIA+AAAAvQAAAAAAAIA+AACQvgAAAD4AAOA+AAAAvQAAAD4AAOA+AACQvgAAAAAAAOA+AAAAvQAAAAAAAOA+AAAAvQAAAD4AAIA+AACQvgAAAD4AAIA+AAAAvQAAAAAAAIA+AACQvgAAAAAAAIA+AACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAOgAgAD8AAL89ACAAPwAAADoA4A8/AAC/PQDgDz8AgGA+ACAAPwDAnz4AIAA/AIBgPgDgDz8AwJ8+AOAPPwCAXz4AwP8+AADBPQDA/z4AgF8+AEDQPgAAwT0AQNA+AMCvPgBA0D4AgGA+AEDQPgDArz4AwP8+AIBgPgDA/z4AQKA+ACAAPwDA3z4AIAA/AECgPgDgDz8AwN8+AOAPPwAAwT0AIAA/AIBfPgAgAD8AAME9AOAPPwCAXz4A4A8/AAACAAEAAgADAAEABAAGAAUABgAHAAUACAAKAAkACgALAAkADAAOAA0ADgAPAA0AEAASABEAEgATABEAFAAWABUAFgAXABUAAADAvQAAwD0AABA/AADAvQAAwD0AAKA+AADAvQAAAD0AABA/AADAvQAAAD0AAKA+AABgvgAAwD0AAKA+AABgvgAAwD0AABA/AABgvgAAAD0AAKA+AABgvgAAAD0AABA/AABgvgAAwD0AAKA+AADAvQAAwD0AAKA+AABgvgAAwD0AABA/AADAvQAAwD0AABA/AABgvgAAAD0AABA/AADAvQAAAD0AABA/AABgvgAAAD0AAKA+AADAvQAAAD0AAKA+AABgvgAAwD0AABA/AADAvQAAwD0AABA/AABgvgAAAD0AABA/AADAvQAAAD0AABA/AADAvQAAwD0AAKA+AABgvgAAwD0AAKA+AADAvQAAAD0AAKA+AABgvgAAAD0AAKA+AACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AEDwPgCAAD4A4Bc/AIAAPgBA8D4AgB8+AOAXPwCAHz4AICg/AIAAPgDgRz8AgAA+ACAoPwCAHz4A4Ec/AIAfPgDgJz8AAP89ACAYPwAA/z0A4Cc/AAAAOgAgGD8AAAA6AOA3PwAAADoAICg/AAAAOgDgNz8AAP89ACAoPwAA/z0AIEg/AIAAPgDgVz8AgAA+ACBIPwCAHz4A4Fc/AIAfPgAgGD8AgAA+AOAnPwCAAD4AIBg/AIAfPgDgJz8AgB8+AAACAAEAAgADAAEABAAGAAUABgAHAAUACAAKAAkACgALAAkADAAOAA0ADgAPAA0AEAASABEAEgATABEAFAAWABUAFgAXABUAz/fPvgAAQD4AAMA+z/fPvgAAQD4AAIA+z/fPvgAAgD0AAMA+z/fPvgAAgD0AAIA+AADQvgAAQD4AAIA+AADQvgAAQD4AAMA+AADQvgAAgD0AAIA+AADQvgAAgD0AAMA+AADQvgAAQD4AAIA+z/fPvgAAQD4AAIA+AADQvgAAQD4AAMA+z/fPvgAAQD4AAMA+AADQvgAAgD0AAMA+z/fPvgAAgD0AAMA+AADQvgAAgD0AAIA+z/fPvgAAgD0AAIA+AADQvgAAQD4AAMA+z/fPvgAAQD4AAMA+AADQvgAAgD0AAMA+z/fPvgAAgD0AAMA+z/fPvgAAQD4AAIA+AADQvgAAQD4AAIA+z/fPvgAAgD0AAIA+AADQvgAAgD0AAIA+AACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAOgAAgT0AAH49AACBPQAAADoAAP89AAB+PQAA/z0AAIE9AACBPQAA/z0AAIE9AACBPQAA/z0AAP89AAD/PQAAgT0AAH49AAB+PQAAfj0AAIE9AAAAOgAAfj0AAAA6AACBPQAAADoAAH49AAAAOgAAgT0AAH49AAB+PQAAfj0AgAA+AACBPQAA/z0AAIE9AIAAPgAA/z0AAP89AAD/PQAAgT0AAIE9AAB+PQAAgT0AAIE9AAD/PQAAfj0AAP89AAACAAEAAgADAAEABAAGAAUABgAHAAUACAAKAAkACgALAAkADAAOAA0ADgAPAA0AEAASABEAEgATABEAFAAWABUAFgAXABUAAACAPgAAwD0AAMC9AACAPgAAwD0AACC+AACAPgAAAD0AAMC9AACAPgAAAD0AACC+AAAAPgAAwD0AACC+AAAAPgAAwD0AAMC9AAAAPgAAAD0AACC+AAAAPgAAAD0AAMC9AAAAPgAAwD0AACC+AACAPgAAwD0AACC+AAAAPgAAwD0AAMC9AACAPgAAwD0AAMC9AAAAPgAAAD0AAMC9AACAPgAAAD0AAMC9AAAAPgAAAD0AACC+AACAPgAAAD0AACC+AAAAPgAAwD0AAMC9AACAPgAAwD0AAMC9AAAAPgAAAD0AAMC9AACAPgAAAD0AAMC9AACAPgAAwD0AACC+AAAAPgAAwD0AACC+AACAPgAAAD0AACC+AAAAPgAAAD0AACC+AACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/ACAIPwBAkD4A4A8/AECQPgAgCD8AwJ8+AOAPPwDAnz4AICA/AECQPgDgJz8AQJA+ACAgPwDAnz4A4Cc/AMCfPgDgHz8AwI8+ACAQPwDAjz4A4B8/AECAPgAgED8AQIA+AOAvPwBAgD4AICA/AECAPgDgLz8AwI8+ACAgPwDAjz4AICg/AECQPgDgNz8AQJA+ACAoPwDAnz4A4Dc/AMCfPgAgED8AQJA+AOAfPwBAkD4AIBA/AMCfPgDgHz8AwJ8+AAACAAEAAgADAAEABAAGAAUABgAHAAUACAAKAAkACgALAAkADAAOAA0ADgAPAA0AEAASABEAEgATABEAFAAWABUAFgAXABUAAACQPgAAwD0AAMC9AACQPgAAwD0AACC+AACQPgAAAD0AAMC9AACQPgAAAD0AACC+AABgPgAAwD0AACC+AABgPgAAwD0AAMC9AABgPgAAAD0AACC+AABgPgAAAD0AAMC9AABgPgAAwD0AACC+AACQPgAAwD0AACC+AABgPgAAwD0AAMC9AACQPgAAwD0AAMC9AABgPgAAAD0AAMC9AACQPgAAAD0AAMC9AABgPgAAAD0AACC+AACQPgAAAD0AACC+AABgPgAAwD0AAMC9AACQPgAAwD0AAMC9AABgPgAAAD0AAMC9AACQPgAAAD0AAMC9AACQPgAAwD0AACC+AABgPgAAwD0AACC+AACQPgAAAD0AACC+AABgPgAAAD0AACC+AACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAOgBAoD4AAPw8AECgPgAAADoAwK8+AAD8PADArz4AAIE9AECgPgAAvz0AQKA+AACBPQDArz4AAL89AMCvPgAAfj0AwJ8+AAACPQDAnz4AAH49AECQPgAAAj0AQJA+AAC/PQBAkD4AAIE9AECQPgAAvz0AwJ8+AACBPQDAnz4AAME9AECgPgAA/z0AQKA+AADBPQDArz4AAP89AMCvPgAAAj0AQKA+AAB+PQBAoD4AAAI9AMCvPgAAfj0AwK8+AAACAAEAAgADAAEABAAGAAUABgAHAAUACAAKAAkACgALAAkADAAOAA0ADgAPAA0AEAASABEAEgATABEAFAAWABUAFgAXABUAAACwPsUggD0AAMC9AACwPsUggD0AACC+AACwPgAAgD0AAMC9AACwPgAAgD0AACC+AACQPsUggD0AACC+AACQPsUggD0AAMC9AACQPgAAgD0AACC+AACQPgAAgD0AAMC9AACQPsUggD0AACC+AACwPsUggD0AACC+AACQPsUggD0AAMC9AACwPsUggD0AAMC9AACQPgAAgD0AAMC9AACwPgAAgD0AAMC9AACQPgAAgD0AACC+AACwPgAAgD0AACC+AACQPsUggD0AAMC9AACwPsUggD0AAMC9AACQPgAAgD0AAMC9AACwPgAAgD0AAMC9AACwPsUggD0AACC+AACQPsUggD0AACC+AACwPgAAgD0AACC+AACQPgAAgD0AACC+AACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAOgCAID4AAPw8AIAgPgAAADoAgB8+AAD8PACAHz4AAIE9AIAgPgAAvz0AgCA+AACBPQCAHz4AAL89AIAfPgAAfj0AgB8+AAACPQCAHz4AAH49AIAAPgAAAj0AgAA+AAC/PQCAAD4AAIE9AIAAPgAAvz0AgB8+AACBPQCAHz4AAME9AIAgPgAA/z0AgCA+AADBPQCAHz4AAP89AIAfPgAAAj0AgCA+AAB+PQCAID4AAAI9AIAfPgAAfj0AgB8+AAACAAEAAgADAAEABAAGAAUABgAHAAUACAAKAAkACgALAAkADAAOAA0ADgAPAA0AEAASABEAEgATABEAFAAWABUAFgAXABUAAAAAvgAAwD0AAMC9AAAAvgAAwD0AACC+AAAAvgAAAD0AAMC9AAAAvgAAAD0AACC+AACAvgAAwD0AACC+AACAvgAAwD0AAMC9AACAvgAAAD0AACC+AACAvgAAAD0AAMC9AACAvgAAwD0AACC+AAAAvgAAwD0AACC+AACAvgAAwD0AAMC9AAAAvgAAwD0AAMC9AACAvgAAAD0AAMC9AAAAvgAAAD0AAMC9AACAvgAAAD0AACC+AAAAvgAAAD0AACC+AACAvgAAwD0AAMC9AAAAvgAAwD0AAMC9AACAvgAAAD0AAMC9AAAAvgAAAD0AAMC9AAAAvgAAwD0AACC+AACAvgAAwD0AACC+AAAAvgAAAD0AACC+AACAvgAAAD0AACC+AACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AEDAPgBAgD4AwM8+AECAPgBAwD4AwI8+AMDPPgDAjz4AQPA+AECAPgDA/z4AQIA+AEDwPgDAjz4AwP8+AMCPPgDA7z4AgH8+AEDQPgCAfz4AwO8+AIBgPgBA0D4AgGA+AOAHPwCAYD4AQPA+AIBgPgDgBz8AgH8+AEDwPgCAfz4AIAA/AECAPgDgDz8AQIA+ACAAPwDAjz4A4A8/AMCPPgBA0D4AQIA+AMDvPgBAgD4AQNA+AMCPPgDA7z4AwI8+AAACAAEAAgADAAEABAAGAAUABgAHAAUACAAKAAkACgALAAkADAAOAA0ADgAPAA0AEAASABEAEgATABEAFAAWABUAFgAXABUAAABgvgAAwD0AAMC9AABgvgAAwD0AACC+AABgvgAAAD0AAMC9AABgvgAAAD0AACC+AACQvgAAwD0AACC+AACQvgAAwD0AAMC9AACQvgAAAD0AACC+AACQvgAAAD0AAMC9AACQvgAAwD0AACC+AABgvgAAwD0AACC+AACQvgAAwD0AAMC9AABgvgAAwD0AAMC9AACQvgAAAD0AAMC9AABgvgAAAD0AAMC9AACQvgAAAD0AACC+AABgvgAAAD0AACC+AACQvgAAwD0AAMC9AABgvgAAwD0AAMC9AACQvgAAAD0AAMC9AABgvgAAAD0AAMC9AABgvgAAwD0AACC+AACQvgAAwD0AACC+AABgvgAAAD0AACC+AACQvgAAAD0AACC+AACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAOgAAAj0AAPw8AAACPQAAADoAAH49AAD8PAAAfj0AAIE9AAACPQAAvz0AAAI9AACBPQAAfj0AAL89AAB+PQAAfj0AAPw8AAACPQAA/DwAAH49AAAAOgAAAj0AAAA6AAC/PQAAADoAAIE9AAAAOgAAvz0AAPw8AACBPQAA/DwAAME9AAACPQAA/z0AAAI9AADBPQAAfj0AAP89AAB+PQAAAj0AAAI9AAB+PQAAAj0AAAI9AAB+PQAAfj0AAH49AAACAAEAAgADAAEABAAGAAUABgAHAAUACAAKAAkACgALAAkADAAOAA0ADgAPAA0AEAASABEAEgATABEAFAAWABUAFgAXABUAAACQvsUggD0AAMC9AACQvsUggD0AACC+AACQvgAAgD0AAMC9AACQvgAAgD0AACC+AACwvsUggD0AACC+AACwvsUggD0AAMC9AACwvgAAgD0AACC+AACwvgAAgD0AAMC9AACwvsUggD0AACC+AACQvsUggD0AACC+AACwvsUggD0AAMC9AACQvsUggD0AAMC9AACwvgAAgD0AAMC9AACQvgAAgD0AAMC9AACwvgAAgD0AACC+AACQvgAAgD0AACC+AACwvsUggD0AAMC9AACQvsUggD0AAMC9AACwvgAAgD0AAMC9AACQvgAAgD0AAMC9AACQvsUggD0AACC+AACwvsUggD0AACC+AACQvgAAgD0AACC+AACwvgAAgD0AACC+AACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AACBPQAAAj0AAL89AAACPQAAgT0AAPw8AAC/PQAA/DwAgAA+AAACPQCAHz4AAAI9AIAAPgAA/DwAgB8+AAD8PAAA/z0AAPw8AADBPQAA/DwAAP89AAAAOgAAwT0AAAA6AIAfPgAAADoAgAA+AAAAOgCAHz4AAPw8AIAAPgAA/DwAgCA+AAACPQCAPz4AAAI9AIAgPgAA/DwAgD8+AAD8PAAAwT0AAAI9AAD/PQAAAj0AAME9AAD8PAAA/z0AAPw8AAACAAEAAgADAAEABAAGAAUABgAHAAUACAAKAAkACgALAAkADAAOAA0ADgAPAA0AEAASABEAEgATABEAFAAWABUAFgAXABUAAAAAAAAAwD4AAEA/AAAAAAAAAAAAAAAAAACAPxPyhT0AAAAAAAAAAK9zfz8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAwD4AAEA/AAAAAAAAAAAAAAAAAACAPwAAAADug4Q+AAAAAOpGdz8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAwD4AAEA/AAAAAAAAAAAAAAAAAACAPwAAAADug4S+AAAAAOpGdz8AAAAAIbWyvAAAAABn8H8/AAAAAAAAwD4AAEA/AAAAAAAAAAAAAAAAAACAPwAAAACoqAU+AAAAAFXPfT8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAwD4AAEA/AAAAAAAAAAAAAAAAAACAPwAAAACoqAW+AAAAAFXPfT8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAD+rqko/AAAAAAAAAAAAAAAAAACAPwAAAAAhtbI8AAAAAGfwfz8AAAAAx71QPAAAAACu+n8/AAAAAAAAAD+rqko/AAAAAAAAAAAAAAAAAACAPwAAAAAhtbK8AAAAAGfwfz8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAQD8AAMA/AAAAAAAAAAAAAAAAAACAPwAAAAC2frK9AAAAAJ4Gfz8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAQD8AAMA/AAAAAAAAAAAAAAAAAACAPwAAAAC2frI9AAAAAJ4Gfz8AAAAAAAAAAAAAAAAAAIA/AAAAAKioBb4AAAAAAAAAAFXPfT8AAIA+qKgFvgAAAAAAAAAAVc99Pw=="}],"accessors":[{"bufferView":0,"componentType":5126,"count":24,"max":[0.15625,0.125,0.25],"min":[-0.15625,0,-0.0625],"type":"VEC3"},{"bufferView":1,"componentType":5126,"count":24,"max":[1,1,1],"min":[-1,-1,-1],"type":"VEC3"},{"bufferView":2,"componentType":5126,"count":24,"max":[0.62451171875,0.21826171875],"min":[0.00048828125,0.00048828125],"type":"VEC2"},{"bufferView":3,"componentType":5123,"count":36,"max":[23],"min":[0],"type":"SCALAR"},{"bufferView":4,"componentType":5126,"count":24,"max":[0.125,0.125,-0.0625],"min":[-0.125,0,-0.3125],"type":"VEC3"},{"bufferView":5,"componentType":5126,"count":24,"max":[1,1,1],"min":[-1,-1,-1],"type":"VEC3"},{"bufferView":6,"componentType":5126,"count":24,"max":[0.49951171875,0.40576171875],"min":[0.00048828125,0.21923828125],"type":"VEC2"},{"bufferView":7,"componentType":5123,"count":36,"max":[23],"min":[0],"type":"SCALAR"},{"bufferView":8,"componentType":5126,"count":24,"max":[0.03125,0.125,0.3125],"min":[-0.03125,0,0.25],"type":"VEC3"},{"bufferView":9,"componentType":5126,"count":24,"max":[1,1,1],"min":[-1,-1,-1],"type":"VEC3"},{"bufferView":10,"componentType":5126,"count":24,"max":[0.59326171875,0.09326171875],"min":[0.46923828125,0.00048828125],"type":"VEC2"},{"bufferView":11,"componentType":5123,"count":36,"max":[23],"min":[0],"type":"SCALAR"},{"bufferView":12,"componentType":5126,"count":24,"max":[0.21875,0.125,0.1875],"min":[-0.03125,0,0],"type":"VEC3"},{"bufferView":13,"componentType":5126,"count":24,"max":[1,1,1],"min":[-1,-1,-1],"type":"VEC3"},{"bufferView":14,"componentType":5126,"count":24,"max":[0.84326171875,0.46826171875],"min":[0.40673828125,0.31298828125],"type":"VEC2"},{"bufferView":15,"componentType":5123,"count":36,"max":[23],"min":[0],"type":"SCALAR"},{"bufferView":16,"componentType":5126,"count":24,"max":[0.21875,0.09375,0.5625],"min":[0.09375,0.03125,0.3125],"type":"VEC3"},{"bufferView":17,"componentType":5126,"count":24,"max":[1,1,1],"min":[-1,-1,-1],"type":"VEC3"},{"bufferView":18,"componentType":5126,"count":24,"max":[0.68701171875,0.62451171875],"min":[0.31298828125,0.46923828125],"type":"VEC2"},{"bufferView":19,"componentType":5123,"count":36,"max":[23],"min":[0],"type":"SCALAR"},{"bufferView":20,"componentType":5126,"count":24,"max":[0.406312495470047,0.1875,0.375],"min":[0.40625,0.0625,0.25],"type":"VEC3"},{"bufferView":21,"componentType":5126,"count":24,"max":[1,1,1],"min":[-1,-1,-1],"type":"VEC3"},{"bufferView":22,"componentType":5126,"count":24,"max":[0.12548828125,0.28076171875],"min":[0.00048828125,0.15673828125],"type":"VEC2"},{"bufferView":23,"componentType":5123,"count":36,"max":[23],"min":[0],"type":"SCALAR"},{"bufferView":24,"componentType":5126,"count":24,"max":[-0.03125,0.125,0.4375],"min":[-0.28125,0,0.25],"type":"VEC3"},{"bufferView":25,"componentType":5126,"count":24,"max":[1,1,1],"min":[-1,-1,-1],"type":"VEC3"},{"bufferView":26,"componentType":5126,"count":24,"max":[0.43701171875,0.56201171875],"min":[0.00048828125,0.40673828125],"type":"VEC2"},{"bufferView":27,"componentType":5123,"count":36,"max":[23],"min":[0],"type":"SCALAR"},{"bufferView":28,"componentType":5126,"count":24,"max":[-0.09375,0.09375,0.5625],"min":[-0.21875,0.03125,0.3125],"type":"VEC3"},{"bufferView":29,"componentType":5126,"count":24,"max":[1,1,1],"min":[-1,-1,-1],"type":"VEC3"},{"bufferView":30,"componentType":5126,"count":24,"max":[0.84326171875,0.15576171875],"min":[0.46923828125,0.00048828125],"type":"VEC2"},{"bufferView":31,"componentType":5123,"count":36,"max":[23],"min":[0],"type":"SCALAR"},{"bufferView":32,"componentType":5126,"count":24,"max":[-0.406187504529953,0.1875,0.375],"min":[-0.40625,0.0625,0.25],"type":"VEC3"},{"bufferView":33,"componentType":5126,"count":24,"max":[1,1,1],"min":[-1,-1,-1],"type":"VEC3"},{"bufferView":34,"componentType":5126,"count":24,"max":[0.12548828125,0.12451171875],"min":[0.00048828125,0.00048828125],"type":"VEC2"},{"bufferView":35,"componentType":5123,"count":36,"max":[23],"min":[0],"type":"SCALAR"},{"bufferView":36,"componentType":5126,"count":24,"max":[0.25,0.09375,-0.09375],"min":[0.125,0.03125,-0.15625],"type":"VEC3"},{"bufferView":37,"componentType":5126,"count":24,"max":[1,1,1],"min":[-1,-1,-1],"type":"VEC3"},{"bufferView":38,"componentType":5126,"count":24,"max":[0.71826171875,0.31201171875],"min":[0.53173828125,0.25048828125],"type":"VEC2"},{"bufferView":39,"componentType":5123,"count":36,"max":[23],"min":[0],"type":"SCALAR"},{"bufferView":40,"componentType":5126,"count":24,"max":[0.28125,0.09375,-0.09375],"min":[0.21875,0.03125,-0.15625],"type":"VEC3"},{"bufferView":41,"componentType":5126,"count":24,"max":[1,1,1],"min":[-1,-1,-1],"type":"VEC3"},{"bufferView":42,"componentType":5126,"count":24,"max":[0.12451171875,0.34326171875],"min":[0.00048828125,0.28173828125],"type":"VEC2"},{"bufferView":43,"componentType":5123,"count":36,"max":[23],"min":[0],"type":"SCALAR"},{"bufferView":44,"componentType":5126,"count":24,"max":[0.34375,0.0625625029206276,-0.09375],"min":[0.28125,0.0625,-0.15625],"type":"VEC3"},{"bufferView":45,"componentType":5126,"count":24,"max":[1,1,1],"min":[-1,-1,-1],"type":"VEC3"},{"bufferView":46,"componentType":5126,"count":24,"max":[0.12451171875,0.15673828125],"min":[0.00048828125,0.12548828125],"type":"VEC2"},{"bufferView":47,"componentType":5123,"count":36,"max":[23],"min":[0],"type":"SCALAR"},{"bufferView":48,"componentType":5126,"count":24,"max":[-0.125,0.09375,-0.09375],"min":[-0.25,0.03125,-0.15625],"type":"VEC3"},{"bufferView":49,"componentType":5126,"count":24,"max":[1,1,1],"min":[-1,-1,-1],"type":"VEC3"},{"bufferView":50,"componentType":5126,"count":24,"max":[0.56201171875,0.28076171875],"min":[0.37548828125,0.21923828125],"type":"VEC2"},{"bufferView":51,"componentType":5123,"count":36,"max":[23],"min":[0],"type":"SCALAR"},{"bufferView":52,"componentType":5126,"count":24,"max":[-0.21875,0.09375,-0.09375],"min":[-0.28125,0.03125,-0.15625],"type":"VEC3"},{"bufferView":53,"componentType":5126,"count":24,"max":[1,1,1],"min":[-1,-1,-1],"type":"VEC3"},{"bufferView":54,"componentType":5126,"count":24,"max":[0.12451171875,0.06201171875],"min":[0.00048828125,0.00048828125],"type":"VEC2"},{"bufferView":55,"componentType":5123,"count":36,"max":[23],"min":[0],"type":"SCALAR"},{"bufferView":56,"componentType":5126,"count":24,"max":[-0.28125,0.0625625029206276,-0.09375],"min":[-0.34375,0.0625,-0.15625],"type":"VEC3"},{"bufferView":57,"componentType":5126,"count":24,"max":[1,1,1],"min":[-1,-1,-1],"type":"VEC3"},{"bufferView":58,"componentType":5126,"count":24,"max":[0.18701171875,0.03173828125],"min":[0.06298828125,0.00048828125],"type":"VEC2"},{"bufferView":59,"componentType":5123,"count":36,"max":[23],"min":[0],"type":"SCALAR"},{"bufferView":60,"componentType":5126,"count":3,"max":[0.75],"min":[0],"type":"SCALAR"},{"bufferView":61,"componentType":5126,"count":3,"max":[0.06540312618017197,0,0,1],"min":[0,0,0,0.9978589415550232],"type":"VEC4"},{"bufferView":62,"componentType":5126,"count":3,"max":[0.75],"min":[0],"type":"SCALAR"},{"bufferView":63,"componentType":5126,"count":3,"max":[0,0.258819043636322,0,1],"min":[0,0,0,0.9659258127212524],"type":"VEC4"},{"bufferView":64,"componentType":5126,"count":3,"max":[0.75],"min":[0],"type":"SCALAR"},{"bufferView":65,"componentType":5126,"count":3,"max":[0,0,0,1],"min":[0,-0.258819043636322,0,0.9659258127212524],"type":"VEC4"},{"bufferView":66,"componentType":5126,"count":3,"max":[0.75],"min":[0],"type":"SCALAR"},{"bufferView":67,"componentType":5126,"count":3,"max":[0,0.13052618503570557,0,1],"min":[0,0,0,0.9914448857307434],"type":"VEC4"},{"bufferView":68,"componentType":5126,"count":3,"max":[0.75],"min":[0],"type":"SCALAR"},{"bufferView":69,"componentType":5126,"count":3,"max":[0,0,0,1],"min":[0,-0.13052618503570557,0,0.9914448857307434],"type":"VEC4"},{"bufferView":70,"componentType":5126,"count":3,"max":[0.7916666865348816],"min":[0],"type":"SCALAR"},{"bufferView":71,"componentType":5126,"count":3,"max":[0,0.02181488461792469,0,1],"min":[0,0,0,0.9997619986534119],"type":"VEC4"},{"bufferView":72,"componentType":5126,"count":3,"max":[0.7916666865348816],"min":[0],"type":"SCALAR"},{"bufferView":73,"componentType":5126,"count":3,"max":[0,0,0,1],"min":[0,-0.02181488461792469,0,0.9997619986534119],"type":"VEC4"},{"bufferView":74,"componentType":5126,"count":3,"max":[1.5],"min":[0],"type":"SCALAR"},{"bufferView":75,"componentType":5126,"count":3,"max":[0,0,0,1],"min":[0,-0.08715574443340302,0,0.9961947202682495],"type":"VEC4"},{"bufferView":76,"componentType":5126,"count":3,"max":[1.5],"min":[0],"type":"SCALAR"},{"bufferView":77,"componentType":5126,"count":3,"max":[0,0.08715574443340302,0,1],"min":[0,0,0,0.9961947202682495],"type":"VEC4"},{"bufferView":78,"componentType":5126,"count":1,"max":[0],"min":[0],"type":"SCALAR"},{"bufferView":79,"componentType":5126,"count":1,"max":[-0.13052618503570557,0,0,0.9914448857307434],"min":[-0.13052618503570557,0,0,0.9914448857307434],"type":"VEC4"},{"bufferView":80,"componentType":5126,"count":1,"max":[0.25],"min":[0.25],"type":"SCALAR"},{"bufferView":81,"componentType":5126,"count":1,"max":[-0.13052618503570557,0,0,0.9914448857307434],"min":[-0.13052618503570557,0,0,0.9914448857307434],"type":"VEC4"}],"materials":[{"pbrMetallicRoughness":{"metallicFactor":0,"roughnessFactor":1,"baseColorTexture":{"index":0}},"alphaMode":"MASK","alphaCutoff":0.05,"doubleSided":true}],"textures":[{"sampler":0}],"samplers":[{"magFilter":9728,"minFilter":9728,"wrapS":33071,"wrapT":33071}],"meshes":[{"primitives":[{"mode":4,"attributes":{"POSITION":0,"NORMAL":1,"TEXCOORD_0":2},"indices":3,"material":0}]},{"primitives":[{"mode":4,"attributes":{"POSITION":4,"NORMAL":5,"TEXCOORD_0":6},"indices":7,"material":0}]},{"primitives":[{"mode":4,"attributes":{"POSITION":8,"NORMAL":9,"TEXCOORD_0":10},"indices":11,"material":0}]},{"primitives":[{"mode":4,"attributes":{"POSITION":12,"NORMAL":13,"TEXCOORD_0":14},"indices":15,"material":0}]},{"primitives":[{"mode":4,"attributes":{"POSITION":16,"NORMAL":17,"TEXCOORD_0":18},"indices":19,"material":0}]},{"primitives":[{"mode":4,"attributes":{"POSITION":20,"NORMAL":21,"TEXCOORD_0":22},"indices":23,"material":0}]},{"primitives":[{"mode":4,"attributes":{"POSITION":24,"NORMAL":25,"TEXCOORD_0":26},"indices":27,"material":0}]},{"primitives":[{"mode":4,"attributes":{"POSITION":28,"NORMAL":29,"TEXCOORD_0":30},"indices":31,"material":0}]},{"primitives":[{"mode":4,"attributes":{"POSITION":32,"NORMAL":33,"TEXCOORD_0":34},"indices":35,"material":0}]},{"primitives":[{"mode":4,"attributes":{"POSITION":36,"NORMAL":37,"TEXCOORD_0":38},"indices":39,"material":0}]},{"primitives":[{"mode":4,"attributes":{"POSITION":40,"NORMAL":41,"TEXCOORD_0":42},"indices":43,"material":0}]},{"primitives":[{"mode":4,"attributes":{"POSITION":44,"NORMAL":45,"TEXCOORD_0":46},"indices":47,"material":0}]},{"primitives":[{"mode":4,"attributes":{"POSITION":48,"NORMAL":49,"TEXCOORD_0":50},"indices":51,"material":0}]},{"primitives":[{"mode":4,"attributes":{"POSITION":52,"NORMAL":53,"TEXCOORD_0":54},"indices":55,"material":0}]},{"primitives":[{"mode":4,"attributes":{"POSITION":56,"NORMAL":57,"TEXCOORD_0":58},"indices":59,"material":0}]}],"animations":[{"name":"animation.model.walk","samplers":[{"input":60,"output":61,"interpolation":"LINEAR"},{"input":62,"output":63,"interpolation":"LINEAR"},{"input":64,"output":65,"interpolation":"LINEAR"},{"input":66,"output":67,"interpolation":"LINEAR"},{"input":68,"output":69,"interpolation":"LINEAR"}],"channels":[{"sampler":0,"target":{"node":3,"path":"rotation"}},{"sampler":1,"target":{"node":7,"path":"rotation"}},{"sampler":2,"target":{"node":11,"path":"rotation"}},{"sampler":3,"target":{"node":15,"path":"rotation"}},{"sampler":4,"target":{"node":19,"path":"rotation"}}]},{"name":"animation.model.idle","samplers":[{"input":70,"output":71,"interpolation":"LINEAR"},{"input":72,"output":73,"interpolation":"LINEAR"},{"input":74,"output":75,"interpolation":"LINEAR"},{"input":76,"output":77,"interpolation":"LINEAR"}],"channels":[{"sampler":0,"target":{"node":7,"path":"rotation"}},{"sampler":1,"target":{"node":11,"path":"rotation"}},{"sampler":2,"target":{"node":15,"path":"rotation"}},{"sampler":3,"target":{"node":19,"path":"rotation"}}]},{"name":"animation.model.back","samplers":[{"input":78,"output":79,"interpolation":"LINEAR"},{"input":80,"output":81,"interpolation":"LINEAR"}],"channels":[{"sampler":0,"target":{"node":15,"path":"rotation"}},{"sampler":1,"target":{"node":19,"path":"rotation"}}]}]} +{"asset":{"version":"2.0","generator":"Blockbench 4.9.4 glTF exporter"},"scenes":[{"nodes":[20],"name":"blockbench_export"}],"scene":0,"nodes":[{"name":"cube","mesh":0},{"name":"cube","mesh":1},{"name":"cube","mesh":2},{"name":"body","children":[0,1,2]},{"translation":[0,0,-0.0625],"name":"cube","mesh":3},{"translation":[0.03125,0,-0.3125],"name":"cube","mesh":4},{"rotation":[0,-0.19509032201612825,0,0.9807852804032304],"translation":[0.01812248876854733,-0.0625,-0.25194388507103505],"name":"cube","mesh":5},{"translation":[0.0625,0,0.3125],"name":"leftleg","children":[4,5,6]},{"translation":[0.0625,0,-0.3125],"name":"cube","mesh":6},{"translation":[-0.03125,0,-0.3125],"name":"cube","mesh":7},{"rotation":[0,0.19509032201612825,0,0.9807852804032304],"translation":[-0.01812248876854733,-0.0625,-0.25194388507103505],"name":"cube","mesh":8},{"translation":[-0.0625,0,0.3125],"name":"rightleg","children":[8,9,10]},{"translation":[-0.125,-0.0625,0.125],"name":"cube","mesh":9},{"rotation":[0,0.5372996083468239,0,0.8433914458128857],"translation":[0.10431178959951112,-0.0625,0.2349474087973531],"name":"cube","mesh":10},{"rotation":[0,0.5372996083468239,0,0.8433914458128857],"translation":[0.10431178959951112,-0.0625,0.2349474087973531],"name":"cube","mesh":11},{"translation":[0.125,0.0625,-0.125],"name":"leftarm","children":[12,13,14]},{"translation":[0.125,-0.0625,0.125],"name":"cube","mesh":12},{"rotation":[0,-0.5372996083468239,0,0.8433914458128857],"translation":[-0.10431178959951112,-0.0625,0.2349474087973531],"name":"cube","mesh":13},{"rotation":[0,-0.5372996083468239,0,0.8433914458128857],"translation":[-0.10431178959951112,-0.0625,0.2349474087973531],"name":"cube","mesh":14},{"translation":[-0.125,0.0625,-0.125],"name":"rightarm","children":[16,17,18]},{"children":[3,7,11,15,19]}],"bufferViews":[{"buffer":0,"byteOffset":0,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":288,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":576,"byteLength":192,"target":34962,"byteStride":8},{"buffer":0,"byteOffset":768,"byteLength":72,"target":34963},{"buffer":0,"byteOffset":840,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":1128,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":1416,"byteLength":192,"target":34962,"byteStride":8},{"buffer":0,"byteOffset":1608,"byteLength":72,"target":34963},{"buffer":0,"byteOffset":1680,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":1968,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":2256,"byteLength":192,"target":34962,"byteStride":8},{"buffer":0,"byteOffset":2448,"byteLength":72,"target":34963},{"buffer":0,"byteOffset":2520,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":2808,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":3096,"byteLength":192,"target":34962,"byteStride":8},{"buffer":0,"byteOffset":3288,"byteLength":72,"target":34963},{"buffer":0,"byteOffset":3360,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":3648,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":3936,"byteLength":192,"target":34962,"byteStride":8},{"buffer":0,"byteOffset":4128,"byteLength":72,"target":34963},{"buffer":0,"byteOffset":4200,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":4488,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":4776,"byteLength":192,"target":34962,"byteStride":8},{"buffer":0,"byteOffset":4968,"byteLength":72,"target":34963},{"buffer":0,"byteOffset":5040,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":5328,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":5616,"byteLength":192,"target":34962,"byteStride":8},{"buffer":0,"byteOffset":5808,"byteLength":72,"target":34963},{"buffer":0,"byteOffset":5880,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":6168,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":6456,"byteLength":192,"target":34962,"byteStride":8},{"buffer":0,"byteOffset":6648,"byteLength":72,"target":34963},{"buffer":0,"byteOffset":6720,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":7008,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":7296,"byteLength":192,"target":34962,"byteStride":8},{"buffer":0,"byteOffset":7488,"byteLength":72,"target":34963},{"buffer":0,"byteOffset":7560,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":7848,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":8136,"byteLength":192,"target":34962,"byteStride":8},{"buffer":0,"byteOffset":8328,"byteLength":72,"target":34963},{"buffer":0,"byteOffset":8400,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":8688,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":8976,"byteLength":192,"target":34962,"byteStride":8},{"buffer":0,"byteOffset":9168,"byteLength":72,"target":34963},{"buffer":0,"byteOffset":9240,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":9528,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":9816,"byteLength":192,"target":34962,"byteStride":8},{"buffer":0,"byteOffset":10008,"byteLength":72,"target":34963},{"buffer":0,"byteOffset":10080,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":10368,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":10656,"byteLength":192,"target":34962,"byteStride":8},{"buffer":0,"byteOffset":10848,"byteLength":72,"target":34963},{"buffer":0,"byteOffset":10920,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":11208,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":11496,"byteLength":192,"target":34962,"byteStride":8},{"buffer":0,"byteOffset":11688,"byteLength":72,"target":34963},{"buffer":0,"byteOffset":11760,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":12048,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":12336,"byteLength":192,"target":34962,"byteStride":8},{"buffer":0,"byteOffset":12528,"byteLength":72,"target":34963},{"buffer":0,"byteOffset":12600,"byteLength":12},{"buffer":0,"byteOffset":12612,"byteLength":48},{"buffer":0,"byteOffset":12660,"byteLength":12},{"buffer":0,"byteOffset":12672,"byteLength":48},{"buffer":0,"byteOffset":12720,"byteLength":12},{"buffer":0,"byteOffset":12732,"byteLength":48},{"buffer":0,"byteOffset":12780,"byteLength":12},{"buffer":0,"byteOffset":12792,"byteLength":48},{"buffer":0,"byteOffset":12840,"byteLength":12},{"buffer":0,"byteOffset":12852,"byteLength":48},{"buffer":0,"byteOffset":12900,"byteLength":12},{"buffer":0,"byteOffset":12912,"byteLength":48},{"buffer":0,"byteOffset":12960,"byteLength":12},{"buffer":0,"byteOffset":12972,"byteLength":48},{"buffer":0,"byteOffset":13020,"byteLength":12},{"buffer":0,"byteOffset":13032,"byteLength":48},{"buffer":0,"byteOffset":13080,"byteLength":12},{"buffer":0,"byteOffset":13092,"byteLength":48},{"buffer":0,"byteOffset":13140,"byteLength":4},{"buffer":0,"byteOffset":13144,"byteLength":16},{"buffer":0,"byteOffset":13160,"byteLength":4},{"buffer":0,"byteOffset":13164,"byteLength":16}],"buffers":[{"byteLength":13180,"uri":"data:application/octet-stream;base64,AAAgPgAAAD4AAIA+AAAgPgAAAD4AAIC9AAAgPgAAAAAAAIA+AAAgPgAAAAAAAIC9AAAgvgAAAD4AAIC9AAAgvgAAAD4AAIA+AAAgvgAAAAAAAIC9AAAgvgAAAAAAAIA+AAAgvgAAAD4AAIC9AAAgPgAAAD4AAIC9AAAgvgAAAD4AAIA+AAAgPgAAAD4AAIA+AAAgvgAAAAAAAIA+AAAgPgAAAAAAAIA+AAAgvgAAAAAAAIC9AAAgPgAAAAAAAIC9AAAgvgAAAD4AAIA+AAAgPgAAAD4AAIA+AAAgvgAAAAAAAIA+AAAgPgAAAAAAAIA+AAAgPgAAAD4AAIC9AAAgvgAAAD4AAIC9AAAgPgAAAAAAAIC9AAAgvgAAAAAAAIC9AACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAOgCAID4AgB8+AIAgPgAAADoAgF8+AIAfPgCAXz4AQKA+AIAgPgDA7z4AgCA+AECgPgCAXz4AwO8+AIBfPgDAnz4AgB8+AIAgPgCAHz4AwJ8+AAAAOgCAID4AAAA6AMDvPgAAADoAQKA+AAAAOgDA7z4AgB8+AECgPgCAHz4AQPA+AIAgPgDgHz8AgCA+AEDwPgCAXz4A4B8/AIBfPgCAID4AgCA+AMCfPgCAID4AgCA+AIBfPgDAnz4AgF8+AAACAAEAAgADAAEABAAGAAUABgAHAAUACAAKAAkACgALAAkADAAOAA0ADgAPAA0AEAASABEAEgATABEAFAAWABUAFgAXABUAAAAAPgAAAD4AAIC9AAAAPgAAAD4AAKC+AAAAPgAAAAAAAIC9AAAAPgAAAAAAAKC+AAAAvgAAAD4AAKC+AAAAvgAAAD4AAIC9AAAAvgAAAAAAAKC+AAAAvgAAAAAAAIC9AAAAvgAAAD4AAKC+AAAAPgAAAD4AAKC+AAAAvgAAAD4AAIC9AAAAPgAAAD4AAIC9AAAAvgAAAAAAAIC9AAAAPgAAAAAAAIC9AAAAvgAAAAAAAKC+AAAAPgAAAAAAAKC+AAAAvgAAAD4AAIC9AAAAPgAAAD4AAIC9AAAAvgAAAAAAAIC9AAAAPgAAAAAAAIC9AAAAPgAAAD4AAKC+AAAAvgAAAD4AAKC+AAAAPgAAAAAAAKC+AAAAvgAAAAAAAKC+AACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAOgBAsD4AAP89AECwPgAAADoAwM8+AAD/PQDAzz4AQIA+AECwPgDAvz4AQLA+AECAPgDAzz4AwL8+AMDPPgCAfz4AwK8+AIAAPgDArz4AgH8+AIBgPgCAAD4AgGA+AMC/PgCAYD4AQIA+AIBgPgDAvz4AwK8+AECAPgDArz4AQMA+AECwPgDA/z4AQLA+AEDAPgDAzz4AwP8+AMDPPgCAAD4AQLA+AIB/PgBAsD4AgAA+AMDPPgCAfz4AwM8+AAACAAEAAgADAAEABAAGAAUABgAHAAUACAAKAAkACgALAAkADAAOAA0ADgAPAA0AEAASABEAEgATABEAFAAWABUAFgAXABUAAAAAPQAAAD4AAKA+AAAAPQAAAD4AAIA+AAAAPQAAAAAAAKA+AAAAPQAAAAAAAIA+AAAAvQAAAD4AAIA+AAAAvQAAAD4AAKA+AAAAvQAAAAAAAIA+AAAAvQAAAAAAAKA+AAAAvQAAAD4AAIA+AAAAPQAAAD4AAIA+AAAAvQAAAD4AAKA+AAAAPQAAAD4AAKA+AAAAvQAAAAAAAKA+AAAAPQAAAAAAAKA+AAAAvQAAAAAAAIA+AAAAPQAAAAAAAIA+AAAAvQAAAD4AAKA+AAAAPQAAAD4AAKA+AAAAvQAAAAAAAKA+AAAAPQAAAAAAAKA+AAAAPQAAAD4AAIA+AAAAvQAAAD4AAIA+AAAAPQAAAAAAAIA+AAAAvQAAAAAAAIA+AACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AEDwPgAAAj0AwP8+AAACPQBA8D4AAL89AMD/PgAAvz0AIAg/AAACPQDgDz8AAAI9ACAIPwAAvz0A4A8/AAC/PQDgBz8AAPw8ACAAPwAA/DwA4Ac/AAAAOgAgAD8AAAA6AOAPPwAAADoAIAg/AAAAOgDgDz8AAPw8ACAIPwAA/DwAIBA/AAACPQDgFz8AAAI9ACAQPwAAvz0A4Bc/AAC/PQAgAD8AAAI9AOAHPwAAAj0AIAA/AAC/PQDgBz8AAL89AAACAAEAAgADAAEABAAGAAUABgAHAAUACAAKAAkACgALAAkADAAOAA0ADgAPAA0AEAASABEAEgATABEAFAAWABUAFgAXABUAAABgPgAAAD4AAEA+AABgPgAAAD4AAAAAAABgPgAAAAAAAEA+AABgPgAAAAAAAAAAAAAAvQAAAD4AAAAAAAAAvQAAAD4AAEA+AAAAvQAAAAAAAAAAAAAAvQAAAAAAAEA+AAAAvQAAAD4AAAAAAABgPgAAAD4AAAAAAAAAvQAAAD4AAEA+AABgPgAAAD4AAEA+AAAAvQAAAAAAAEA+AABgPgAAAAAAAEA+AAAAvQAAAAAAAAAAAABgPgAAAAAAAAAAAAAAvQAAAD4AAEA+AABgPgAAAD4AAEA+AAAAvQAAAAAAAEA+AABgPgAAAAAAAEA+AABgPgAAAD4AAAAAAAAAvQAAAD4AAAAAAABgPgAAAAAAAAAAAAAAvQAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AEDQPgBA0D4AwP8+AEDQPgBA0D4AwO8+AMD/PgDA7z4AICA/AEDQPgDgNz8AQNA+ACAgPwDA7z4A4Dc/AMDvPgDgHz8AwM8+ACAAPwDAzz4A4B8/AECgPgAgAD8AQKA+AOA/PwBAoD4AICA/AECgPgDgPz8AwM8+ACAgPwDAzz4AIDg/AEDQPgDgVz8AQNA+ACA4PwDA7z4A4Fc/AMDvPgAgAD8AQNA+AOAfPwBA0D4AIAA/AMDvPgDgHz8AwO8+AAACAAEAAgADAAEABAAGAAUABgAHAAUACAAKAAkACgALAAkADAAOAA0ADgAPAA0AEAASABEAEgATABEAFAAWABUAFgAXABUAAABgPgAAwD0AABA/AABgPgAAwD0AAKA+AABgPgAAAD0AABA/AABgPgAAAD0AAKA+AADAPQAAwD0AAKA+AADAPQAAwD0AABA/AADAPQAAAD0AAKA+AADAPQAAAD0AABA/AADAPQAAwD0AAKA+AABgPgAAwD0AAKA+AADAPQAAwD0AABA/AABgPgAAwD0AABA/AADAPQAAAD0AABA/AABgPgAAAD0AABA/AADAPQAAAD0AAKA+AABgPgAAAD0AAKA+AADAPQAAwD0AABA/AABgPgAAwD0AABA/AADAPQAAAD0AABA/AABgPgAAAD0AABA/AABgPgAAwD0AAKA+AADAPQAAwD0AAKA+AABgPgAAAD0AAKA+AADAPQAAAD0AAKA+AACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AECgPgAgGD8AwN8+ACAYPwBAoD4A4B8/AMDfPgDgHz8AIAA/ACAYPwDgHz8AIBg/ACAAPwDgHz8A4B8/AOAfPwDA/z4A4Bc/AEDgPgDgFz8AwP8+AEDwPgBA4D4AQPA+AOAPPwBA8D4AIAA/AEDwPgDgDz8A4Bc/ACAAPwDgFz8AICA/ACAYPwDgLz8AIBg/ACAgPwDgHz8A4C8/AOAfPwBA4D4AIBg/AMD/PgAgGD8AQOA+AOAfPwDA/z4A4B8/AAACAAEAAgADAAEABAAGAAUABgAHAAUACAAKAAkACgALAAkADAAOAA0ADgAPAA0AEAASABEAEgATABEAFAAWABUAFgAXABUAMQjQPgAAQD4AAMA+MQjQPgAAQD4AAIA+MQjQPgAAgD0AAMA+MQjQPgAAgD0AAIA+AADQPgAAQD4AAIA+AADQPgAAQD4AAMA+AADQPgAAgD0AAIA+AADQPgAAgD0AAMA+AADQPgAAQD4AAIA+MQjQPgAAQD4AAIA+AADQPgAAQD4AAMA+MQjQPgAAQD4AAMA+AADQPgAAgD0AAMA+MQjQPgAAgD0AAMA+AADQPgAAgD0AAIA+MQjQPgAAgD0AAIA+AADQPgAAQD4AAMA+MQjQPgAAQD4AAMA+AADQPgAAgD0AAMA+MQjQPgAAgD0AAMA+MQjQPgAAQD4AAIA+AADQPgAAQD4AAIA+MQjQPgAAgD0AAIA+AADQPgAAgD0AAIA+AACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAOgCAYD4AAH49AIBgPgAAADoAwI8+AAB+PQDAjz4AAIE9AIBgPgAA/z0AgGA+AACBPQDAjz4AAP89AMCPPgAAgT0AgF8+AAB+PQCAXz4AAIE9AIAgPgAAfj0AgCA+AACBPQCAID4AAH49AIAgPgAAgT0AgF8+AAB+PQCAXz4AgAA+AIBgPgAA/z0AgGA+AIAAPgDAjz4AAP89AMCPPgAAgT0AgGA+AAB+PQCAYD4AAIE9AMCPPgAAfj0AwI8+AAACAAEAAgADAAEABAAGAAUABgAHAAUACAAKAAkACgALAAkADAAOAA0ADgAPAA0AEAASABEAEgATABEAFAAWABUAFgAXABUAAAAAvQAAAD4AAOA+AAAAvQAAAD4AAIA+AAAAvQAAAAAAAOA+AAAAvQAAAAAAAIA+AACQvgAAAD4AAIA+AACQvgAAAD4AAOA+AACQvgAAAAAAAIA+AACQvgAAAAAAAOA+AACQvgAAAD4AAIA+AAAAvQAAAD4AAIA+AACQvgAAAD4AAOA+AAAAvQAAAD4AAOA+AACQvgAAAAAAAOA+AAAAvQAAAAAAAOA+AACQvgAAAAAAAIA+AAAAvQAAAAAAAIA+AACQvgAAAD4AAOA+AAAAvQAAAD4AAOA+AACQvgAAAAAAAOA+AAAAvQAAAAAAAOA+AAAAvQAAAD4AAIA+AACQvgAAAD4AAIA+AAAAvQAAAAAAAIA+AACQvgAAAAAAAIA+AACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAOgAgAD8AAL89ACAAPwAAADoA4A8/AAC/PQDgDz8AgGA+ACAAPwDAnz4AIAA/AIBgPgDgDz8AwJ8+AOAPPwCAXz4AwP8+AADBPQDA/z4AgF8+AEDQPgAAwT0AQNA+AMCvPgBA0D4AgGA+AEDQPgDArz4AwP8+AIBgPgDA/z4AQKA+ACAAPwDA3z4AIAA/AECgPgDgDz8AwN8+AOAPPwAAwT0AIAA/AIBfPgAgAD8AAME9AOAPPwCAXz4A4A8/AAACAAEAAgADAAEABAAGAAUABgAHAAUACAAKAAkACgALAAkADAAOAA0ADgAPAA0AEAASABEAEgATABEAFAAWABUAFgAXABUAAADAvQAAwD0AABA/AADAvQAAwD0AAKA+AADAvQAAAD0AABA/AADAvQAAAD0AAKA+AABgvgAAwD0AAKA+AABgvgAAwD0AABA/AABgvgAAAD0AAKA+AABgvgAAAD0AABA/AABgvgAAwD0AAKA+AADAvQAAwD0AAKA+AABgvgAAwD0AABA/AADAvQAAwD0AABA/AABgvgAAAD0AABA/AADAvQAAAD0AABA/AABgvgAAAD0AAKA+AADAvQAAAD0AAKA+AABgvgAAwD0AABA/AADAvQAAwD0AABA/AABgvgAAAD0AABA/AADAvQAAAD0AABA/AADAvQAAwD0AAKA+AABgvgAAwD0AAKA+AADAvQAAAD0AAKA+AABgvgAAAD0AAKA+AACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AEDwPgCAAD4A4Bc/AIAAPgBA8D4AgB8+AOAXPwCAHz4AICg/AIAAPgDgRz8AgAA+ACAoPwCAHz4A4Ec/AIAfPgDgJz8AAP89ACAYPwAA/z0A4Cc/AAAAOgAgGD8AAAA6AOA3PwAAADoAICg/AAAAOgDgNz8AAP89ACAoPwAA/z0AIEg/AIAAPgDgVz8AgAA+ACBIPwCAHz4A4Fc/AIAfPgAgGD8AgAA+AOAnPwCAAD4AIBg/AIAfPgDgJz8AgB8+AAACAAEAAgADAAEABAAGAAUABgAHAAUACAAKAAkACgALAAkADAAOAA0ADgAPAA0AEAASABEAEgATABEAFAAWABUAFgAXABUAz/fPvgAAQD4AAMA+z/fPvgAAQD4AAIA+z/fPvgAAgD0AAMA+z/fPvgAAgD0AAIA+AADQvgAAQD4AAIA+AADQvgAAQD4AAMA+AADQvgAAgD0AAIA+AADQvgAAgD0AAMA+AADQvgAAQD4AAIA+z/fPvgAAQD4AAIA+AADQvgAAQD4AAMA+z/fPvgAAQD4AAMA+AADQvgAAgD0AAMA+z/fPvgAAgD0AAMA+AADQvgAAgD0AAIA+z/fPvgAAgD0AAIA+AADQvgAAQD4AAMA+z/fPvgAAQD4AAMA+AADQvgAAgD0AAMA+z/fPvgAAgD0AAMA+z/fPvgAAQD4AAIA+AADQvgAAQD4AAIA+z/fPvgAAgD0AAIA+AADQvgAAgD0AAIA+AACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAOgAAgT0AAH49AACBPQAAADoAAP89AAB+PQAA/z0AAIE9AACBPQAA/z0AAIE9AACBPQAA/z0AAP89AAD/PQAAgT0AAH49AAB+PQAAfj0AAIE9AAAAOgAAfj0AAAA6AACBPQAAADoAAH49AAAAOgAAgT0AAH49AAB+PQAAfj0AgAA+AACBPQAA/z0AAIE9AIAAPgAA/z0AAP89AAD/PQAAgT0AAIE9AAB+PQAAgT0AAIE9AAD/PQAAfj0AAP89AAACAAEAAgADAAEABAAGAAUABgAHAAUACAAKAAkACgALAAkADAAOAA0ADgAPAA0AEAASABEAEgATABEAFAAWABUAFgAXABUAAACAPgAAwD0AAMC9AACAPgAAwD0AACC+AACAPgAAAD0AAMC9AACAPgAAAD0AACC+AAAAPgAAwD0AACC+AAAAPgAAwD0AAMC9AAAAPgAAAD0AACC+AAAAPgAAAD0AAMC9AAAAPgAAwD0AACC+AACAPgAAwD0AACC+AAAAPgAAwD0AAMC9AACAPgAAwD0AAMC9AAAAPgAAAD0AAMC9AACAPgAAAD0AAMC9AAAAPgAAAD0AACC+AACAPgAAAD0AACC+AAAAPgAAwD0AAMC9AACAPgAAwD0AAMC9AAAAPgAAAD0AAMC9AACAPgAAAD0AAMC9AACAPgAAwD0AACC+AAAAPgAAwD0AACC+AACAPgAAAD0AACC+AAAAPgAAAD0AACC+AACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/ACAIPwBAkD4A4A8/AECQPgAgCD8AwJ8+AOAPPwDAnz4AICA/AECQPgDgJz8AQJA+ACAgPwDAnz4A4Cc/AMCfPgDgHz8AwI8+ACAQPwDAjz4A4B8/AECAPgAgED8AQIA+AOAvPwBAgD4AICA/AECAPgDgLz8AwI8+ACAgPwDAjz4AICg/AECQPgDgNz8AQJA+ACAoPwDAnz4A4Dc/AMCfPgAgED8AQJA+AOAfPwBAkD4AIBA/AMCfPgDgHz8AwJ8+AAACAAEAAgADAAEABAAGAAUABgAHAAUACAAKAAkACgALAAkADAAOAA0ADgAPAA0AEAASABEAEgATABEAFAAWABUAFgAXABUAAACQPgAAwD0AAMC9AACQPgAAwD0AACC+AACQPgAAAD0AAMC9AACQPgAAAD0AACC+AABgPgAAwD0AACC+AABgPgAAwD0AAMC9AABgPgAAAD0AACC+AABgPgAAAD0AAMC9AABgPgAAwD0AACC+AACQPgAAwD0AACC+AABgPgAAwD0AAMC9AACQPgAAwD0AAMC9AABgPgAAAD0AAMC9AACQPgAAAD0AAMC9AABgPgAAAD0AACC+AACQPgAAAD0AACC+AABgPgAAwD0AAMC9AACQPgAAwD0AAMC9AABgPgAAAD0AAMC9AACQPgAAAD0AAMC9AACQPgAAwD0AACC+AABgPgAAwD0AACC+AACQPgAAAD0AACC+AABgPgAAAD0AACC+AACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAOgBAoD4AAPw8AECgPgAAADoAwK8+AAD8PADArz4AAIE9AECgPgAAvz0AQKA+AACBPQDArz4AAL89AMCvPgAAfj0AwJ8+AAACPQDAnz4AAH49AECQPgAAAj0AQJA+AAC/PQBAkD4AAIE9AECQPgAAvz0AwJ8+AACBPQDAnz4AAME9AECgPgAA/z0AQKA+AADBPQDArz4AAP89AMCvPgAAAj0AQKA+AAB+PQBAoD4AAAI9AMCvPgAAfj0AwK8+AAACAAEAAgADAAEABAAGAAUABgAHAAUACAAKAAkACgALAAkADAAOAA0ADgAPAA0AEAASABEAEgATABEAFAAWABUAFgAXABUAAACwPsUggD0AAMC9AACwPsUggD0AACC+AACwPgAAgD0AAMC9AACwPgAAgD0AACC+AACQPsUggD0AACC+AACQPsUggD0AAMC9AACQPgAAgD0AACC+AACQPgAAgD0AAMC9AACQPsUggD0AACC+AACwPsUggD0AACC+AACQPsUggD0AAMC9AACwPsUggD0AAMC9AACQPgAAgD0AAMC9AACwPgAAgD0AAMC9AACQPgAAgD0AACC+AACwPgAAgD0AACC+AACQPsUggD0AAMC9AACwPsUggD0AAMC9AACQPgAAgD0AAMC9AACwPgAAgD0AAMC9AACwPsUggD0AACC+AACQPsUggD0AACC+AACwPgAAgD0AACC+AACQPgAAgD0AACC+AACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAOgCAID4AAPw8AIAgPgAAADoAgB8+AAD8PACAHz4AAIE9AIAgPgAAvz0AgCA+AACBPQCAHz4AAL89AIAfPgAAfj0AgB8+AAACPQCAHz4AAH49AIAAPgAAAj0AgAA+AAC/PQCAAD4AAIE9AIAAPgAAvz0AgB8+AACBPQCAHz4AAME9AIAgPgAA/z0AgCA+AADBPQCAHz4AAP89AIAfPgAAAj0AgCA+AAB+PQCAID4AAAI9AIAfPgAAfj0AgB8+AAACAAEAAgADAAEABAAGAAUABgAHAAUACAAKAAkACgALAAkADAAOAA0ADgAPAA0AEAASABEAEgATABEAFAAWABUAFgAXABUAAAAAvgAAwD0AAMC9AAAAvgAAwD0AACC+AAAAvgAAAD0AAMC9AAAAvgAAAD0AACC+AACAvgAAwD0AACC+AACAvgAAwD0AAMC9AACAvgAAAD0AACC+AACAvgAAAD0AAMC9AACAvgAAwD0AACC+AAAAvgAAwD0AACC+AACAvgAAwD0AAMC9AAAAvgAAwD0AAMC9AACAvgAAAD0AAMC9AAAAvgAAAD0AAMC9AACAvgAAAD0AACC+AAAAvgAAAD0AACC+AACAvgAAwD0AAMC9AAAAvgAAwD0AAMC9AACAvgAAAD0AAMC9AAAAvgAAAD0AAMC9AAAAvgAAwD0AACC+AACAvgAAwD0AACC+AAAAvgAAAD0AACC+AACAvgAAAD0AACC+AACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AEDAPgBAgD4AwM8+AECAPgBAwD4AwI8+AMDPPgDAjz4AQPA+AECAPgDA/z4AQIA+AEDwPgDAjz4AwP8+AMCPPgDA7z4AgH8+AEDQPgCAfz4AwO8+AIBgPgBA0D4AgGA+AOAHPwCAYD4AQPA+AIBgPgDgBz8AgH8+AEDwPgCAfz4AIAA/AECAPgDgDz8AQIA+ACAAPwDAjz4A4A8/AMCPPgBA0D4AQIA+AMDvPgBAgD4AQNA+AMCPPgDA7z4AwI8+AAACAAEAAgADAAEABAAGAAUABgAHAAUACAAKAAkACgALAAkADAAOAA0ADgAPAA0AEAASABEAEgATABEAFAAWABUAFgAXABUAAABgvgAAwD0AAMC9AABgvgAAwD0AACC+AABgvgAAAD0AAMC9AABgvgAAAD0AACC+AACQvgAAwD0AACC+AACQvgAAwD0AAMC9AACQvgAAAD0AACC+AACQvgAAAD0AAMC9AACQvgAAwD0AACC+AABgvgAAwD0AACC+AACQvgAAwD0AAMC9AABgvgAAwD0AAMC9AACQvgAAAD0AAMC9AABgvgAAAD0AAMC9AACQvgAAAD0AACC+AABgvgAAAD0AACC+AACQvgAAwD0AAMC9AABgvgAAwD0AAMC9AACQvgAAAD0AAMC9AABgvgAAAD0AAMC9AABgvgAAwD0AACC+AACQvgAAwD0AACC+AABgvgAAAD0AACC+AACQvgAAAD0AACC+AACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAOgAAAj0AAPw8AAACPQAAADoAAH49AAD8PAAAfj0AAIE9AAACPQAAvz0AAAI9AACBPQAAfj0AAL89AAB+PQAAfj0AAPw8AAACPQAA/DwAAH49AAAAOgAAAj0AAAA6AAC/PQAAADoAAIE9AAAAOgAAvz0AAPw8AACBPQAA/DwAAME9AAACPQAA/z0AAAI9AADBPQAAfj0AAP89AAB+PQAAAj0AAAI9AAB+PQAAAj0AAAI9AAB+PQAAfj0AAH49AAACAAEAAgADAAEABAAGAAUABgAHAAUACAAKAAkACgALAAkADAAOAA0ADgAPAA0AEAASABEAEgATABEAFAAWABUAFgAXABUAAACQvsUggD0AAMC9AACQvsUggD0AACC+AACQvgAAgD0AAMC9AACQvgAAgD0AACC+AACwvsUggD0AACC+AACwvsUggD0AAMC9AACwvgAAgD0AACC+AACwvgAAgD0AAMC9AACwvsUggD0AACC+AACQvsUggD0AACC+AACwvsUggD0AAMC9AACQvsUggD0AAMC9AACwvgAAgD0AAMC9AACQvgAAgD0AAMC9AACwvgAAgD0AACC+AACQvgAAgD0AACC+AACwvsUggD0AAMC9AACQvsUggD0AAMC9AACwvgAAgD0AAMC9AACQvgAAgD0AAMC9AACQvsUggD0AACC+AACwvsUggD0AACC+AACQvgAAgD0AACC+AACwvgAAgD0AACC+AACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AACBPQAAAj0AAL89AAACPQAAgT0AAPw8AAC/PQAA/DwAgAA+AAACPQCAHz4AAAI9AIAAPgAA/DwAgB8+AAD8PAAA/z0AAPw8AADBPQAA/DwAAP89AAAAOgAAwT0AAAA6AIAfPgAAADoAgAA+AAAAOgCAHz4AAPw8AIAAPgAA/DwAgCA+AAACPQCAPz4AAAI9AIAgPgAA/DwAgD8+AAD8PAAAwT0AAAI9AAD/PQAAAj0AAME9AAD8PAAA/z0AAPw8AAACAAEAAgADAAEABAAGAAUABgAHAAUACAAKAAkACgALAAkADAAOAA0ADgAPAA0AEAASABEAEgATABEAFAAWABUAFgAXABUAAAAAAAAAwD4AAEA/AAAAAAAAAAAAAAAAAACAPxPyhT0AAAAAAAAAAK9zfz8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAwD4AAEA/AAAAAAAAAAAAAAAAAACAPwAAAADug4Q+AAAAAOpGdz8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAwD4AAEA/AAAAAAAAAAAAAAAAAACAPwAAAADug4S+AAAAAOpGdz8AAAAAIbWyvAAAAABn8H8/AAAAAAAAwD4AAEA/AAAAAAAAAAAAAAAAAACAPwAAAACoqAU+AAAAAFXPfT8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAwD4AAEA/AAAAAAAAAAAAAAAAAACAPwAAAACoqAW+AAAAAFXPfT8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAD+rqko/AAAAAAAAAAAAAAAAAACAPwAAAAAhtbI8AAAAAGfwfz8AAAAAx71QPAAAAACu+n8/AAAAAAAAAD+rqko/AAAAAAAAAAAAAAAAAACAPwAAAAAhtbK8AAAAAGfwfz8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAQD8AAMA/AAAAAAAAAAAAAAAAAACAPwAAAAC2frK9AAAAAJ4Gfz8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAQD8AAMA/AAAAAAAAAAAAAAAAAACAPwAAAAC2frI9AAAAAJ4Gfz8AAAAAAAAAAAAAAAAAAIA/AAAAAKioBb4AAAAAAAAAAFXPfT8AAIA+qKgFvgAAAAAAAAAAVc99Pw=="}],"accessors":[{"bufferView":0,"componentType":5126,"count":24,"max":[0.15625,0.125,0.25],"min":[-0.15625,0,-0.0625],"type":"VEC3"},{"bufferView":1,"componentType":5126,"count":24,"max":[1,1,1],"min":[-1,-1,-1],"type":"VEC3"},{"bufferView":2,"componentType":5126,"count":24,"max":[0.62451171875,0.21826171875],"min":[0.00048828125,0.00048828125],"type":"VEC2"},{"bufferView":3,"componentType":5123,"count":36,"max":[23],"min":[0],"type":"SCALAR"},{"bufferView":4,"componentType":5126,"count":24,"max":[0.125,0.125,-0.0625],"min":[-0.125,0,-0.3125],"type":"VEC3"},{"bufferView":5,"componentType":5126,"count":24,"max":[1,1,1],"min":[-1,-1,-1],"type":"VEC3"},{"bufferView":6,"componentType":5126,"count":24,"max":[0.49951171875,0.40576171875],"min":[0.00048828125,0.21923828125],"type":"VEC2"},{"bufferView":7,"componentType":5123,"count":36,"max":[23],"min":[0],"type":"SCALAR"},{"bufferView":8,"componentType":5126,"count":24,"max":[0.03125,0.125,0.3125],"min":[-0.03125,0,0.25],"type":"VEC3"},{"bufferView":9,"componentType":5126,"count":24,"max":[1,1,1],"min":[-1,-1,-1],"type":"VEC3"},{"bufferView":10,"componentType":5126,"count":24,"max":[0.59326171875,0.09326171875],"min":[0.46923828125,0.00048828125],"type":"VEC2"},{"bufferView":11,"componentType":5123,"count":36,"max":[23],"min":[0],"type":"SCALAR"},{"bufferView":12,"componentType":5126,"count":24,"max":[0.21875,0.125,0.1875],"min":[-0.03125,0,0],"type":"VEC3"},{"bufferView":13,"componentType":5126,"count":24,"max":[1,1,1],"min":[-1,-1,-1],"type":"VEC3"},{"bufferView":14,"componentType":5126,"count":24,"max":[0.84326171875,0.46826171875],"min":[0.40673828125,0.31298828125],"type":"VEC2"},{"bufferView":15,"componentType":5123,"count":36,"max":[23],"min":[0],"type":"SCALAR"},{"bufferView":16,"componentType":5126,"count":24,"max":[0.21875,0.09375,0.5625],"min":[0.09375,0.03125,0.3125],"type":"VEC3"},{"bufferView":17,"componentType":5126,"count":24,"max":[1,1,1],"min":[-1,-1,-1],"type":"VEC3"},{"bufferView":18,"componentType":5126,"count":24,"max":[0.68701171875,0.62451171875],"min":[0.31298828125,0.46923828125],"type":"VEC2"},{"bufferView":19,"componentType":5123,"count":36,"max":[23],"min":[0],"type":"SCALAR"},{"bufferView":20,"componentType":5126,"count":24,"max":[0.406312495470047,0.1875,0.375],"min":[0.40625,0.0625,0.25],"type":"VEC3"},{"bufferView":21,"componentType":5126,"count":24,"max":[1,1,1],"min":[-1,-1,-1],"type":"VEC3"},{"bufferView":22,"componentType":5126,"count":24,"max":[0.12548828125,0.28076171875],"min":[0.00048828125,0.15673828125],"type":"VEC2"},{"bufferView":23,"componentType":5123,"count":36,"max":[23],"min":[0],"type":"SCALAR"},{"bufferView":24,"componentType":5126,"count":24,"max":[-0.03125,0.125,0.4375],"min":[-0.28125,0,0.25],"type":"VEC3"},{"bufferView":25,"componentType":5126,"count":24,"max":[1,1,1],"min":[-1,-1,-1],"type":"VEC3"},{"bufferView":26,"componentType":5126,"count":24,"max":[0.43701171875,0.56201171875],"min":[0.00048828125,0.40673828125],"type":"VEC2"},{"bufferView":27,"componentType":5123,"count":36,"max":[23],"min":[0],"type":"SCALAR"},{"bufferView":28,"componentType":5126,"count":24,"max":[-0.09375,0.09375,0.5625],"min":[-0.21875,0.03125,0.3125],"type":"VEC3"},{"bufferView":29,"componentType":5126,"count":24,"max":[1,1,1],"min":[-1,-1,-1],"type":"VEC3"},{"bufferView":30,"componentType":5126,"count":24,"max":[0.84326171875,0.15576171875],"min":[0.46923828125,0.00048828125],"type":"VEC2"},{"bufferView":31,"componentType":5123,"count":36,"max":[23],"min":[0],"type":"SCALAR"},{"bufferView":32,"componentType":5126,"count":24,"max":[-0.406187504529953,0.1875,0.375],"min":[-0.40625,0.0625,0.25],"type":"VEC3"},{"bufferView":33,"componentType":5126,"count":24,"max":[1,1,1],"min":[-1,-1,-1],"type":"VEC3"},{"bufferView":34,"componentType":5126,"count":24,"max":[0.12548828125,0.12451171875],"min":[0.00048828125,0.00048828125],"type":"VEC2"},{"bufferView":35,"componentType":5123,"count":36,"max":[23],"min":[0],"type":"SCALAR"},{"bufferView":36,"componentType":5126,"count":24,"max":[0.25,0.09375,-0.09375],"min":[0.125,0.03125,-0.15625],"type":"VEC3"},{"bufferView":37,"componentType":5126,"count":24,"max":[1,1,1],"min":[-1,-1,-1],"type":"VEC3"},{"bufferView":38,"componentType":5126,"count":24,"max":[0.71826171875,0.31201171875],"min":[0.53173828125,0.25048828125],"type":"VEC2"},{"bufferView":39,"componentType":5123,"count":36,"max":[23],"min":[0],"type":"SCALAR"},{"bufferView":40,"componentType":5126,"count":24,"max":[0.28125,0.09375,-0.09375],"min":[0.21875,0.03125,-0.15625],"type":"VEC3"},{"bufferView":41,"componentType":5126,"count":24,"max":[1,1,1],"min":[-1,-1,-1],"type":"VEC3"},{"bufferView":42,"componentType":5126,"count":24,"max":[0.12451171875,0.34326171875],"min":[0.00048828125,0.28173828125],"type":"VEC2"},{"bufferView":43,"componentType":5123,"count":36,"max":[23],"min":[0],"type":"SCALAR"},{"bufferView":44,"componentType":5126,"count":24,"max":[0.34375,0.0625625029206276,-0.09375],"min":[0.28125,0.0625,-0.15625],"type":"VEC3"},{"bufferView":45,"componentType":5126,"count":24,"max":[1,1,1],"min":[-1,-1,-1],"type":"VEC3"},{"bufferView":46,"componentType":5126,"count":24,"max":[0.12451171875,0.15673828125],"min":[0.00048828125,0.12548828125],"type":"VEC2"},{"bufferView":47,"componentType":5123,"count":36,"max":[23],"min":[0],"type":"SCALAR"},{"bufferView":48,"componentType":5126,"count":24,"max":[-0.125,0.09375,-0.09375],"min":[-0.25,0.03125,-0.15625],"type":"VEC3"},{"bufferView":49,"componentType":5126,"count":24,"max":[1,1,1],"min":[-1,-1,-1],"type":"VEC3"},{"bufferView":50,"componentType":5126,"count":24,"max":[0.56201171875,0.28076171875],"min":[0.37548828125,0.21923828125],"type":"VEC2"},{"bufferView":51,"componentType":5123,"count":36,"max":[23],"min":[0],"type":"SCALAR"},{"bufferView":52,"componentType":5126,"count":24,"max":[-0.21875,0.09375,-0.09375],"min":[-0.28125,0.03125,-0.15625],"type":"VEC3"},{"bufferView":53,"componentType":5126,"count":24,"max":[1,1,1],"min":[-1,-1,-1],"type":"VEC3"},{"bufferView":54,"componentType":5126,"count":24,"max":[0.12451171875,0.06201171875],"min":[0.00048828125,0.00048828125],"type":"VEC2"},{"bufferView":55,"componentType":5123,"count":36,"max":[23],"min":[0],"type":"SCALAR"},{"bufferView":56,"componentType":5126,"count":24,"max":[-0.28125,0.0625625029206276,-0.09375],"min":[-0.34375,0.0625,-0.15625],"type":"VEC3"},{"bufferView":57,"componentType":5126,"count":24,"max":[1,1,1],"min":[-1,-1,-1],"type":"VEC3"},{"bufferView":58,"componentType":5126,"count":24,"max":[0.18701171875,0.03173828125],"min":[0.06298828125,0.00048828125],"type":"VEC2"},{"bufferView":59,"componentType":5123,"count":36,"max":[23],"min":[0],"type":"SCALAR"},{"bufferView":60,"componentType":5126,"count":3,"max":[0.75],"min":[0],"type":"SCALAR"},{"bufferView":61,"componentType":5126,"count":3,"max":[0.06540312618017197,0,0,1],"min":[0,0,0,0.9978589415550232],"type":"VEC4"},{"bufferView":62,"componentType":5126,"count":3,"max":[0.75],"min":[0],"type":"SCALAR"},{"bufferView":63,"componentType":5126,"count":3,"max":[0,0.258819043636322,0,1],"min":[0,0,0,0.9659258127212524],"type":"VEC4"},{"bufferView":64,"componentType":5126,"count":3,"max":[0.75],"min":[0],"type":"SCALAR"},{"bufferView":65,"componentType":5126,"count":3,"max":[0,0,0,1],"min":[0,-0.258819043636322,0,0.9659258127212524],"type":"VEC4"},{"bufferView":66,"componentType":5126,"count":3,"max":[0.75],"min":[0],"type":"SCALAR"},{"bufferView":67,"componentType":5126,"count":3,"max":[0,0.13052618503570557,0,1],"min":[0,0,0,0.9914448857307434],"type":"VEC4"},{"bufferView":68,"componentType":5126,"count":3,"max":[0.75],"min":[0],"type":"SCALAR"},{"bufferView":69,"componentType":5126,"count":3,"max":[0,0,0,1],"min":[0,-0.13052618503570557,0,0.9914448857307434],"type":"VEC4"}],"materials":[{"pbrMetallicRoughness":{"metallicFactor":0,"roughnessFactor":1,"baseColorTexture":{"index":0}},"alphaMode":"MASK","alphaCutoff":0.05,"doubleSided":true}],"textures":[{"sampler":0}],"samplers":[{"magFilter":9728,"minFilter":9728,"wrapS":33071,"wrapT":33071}],"meshes":[{"primitives":[{"mode":4,"attributes":{"POSITION":0,"NORMAL":1,"TEXCOORD_0":2},"indices":3,"material":0}]},{"primitives":[{"mode":4,"attributes":{"POSITION":4,"NORMAL":5,"TEXCOORD_0":6},"indices":7,"material":0}]},{"primitives":[{"mode":4,"attributes":{"POSITION":8,"NORMAL":9,"TEXCOORD_0":10},"indices":11,"material":0}]},{"primitives":[{"mode":4,"attributes":{"POSITION":12,"NORMAL":13,"TEXCOORD_0":14},"indices":15,"material":0}]},{"primitives":[{"mode":4,"attributes":{"POSITION":16,"NORMAL":17,"TEXCOORD_0":18},"indices":19,"material":0}]},{"primitives":[{"mode":4,"attributes":{"POSITION":20,"NORMAL":21,"TEXCOORD_0":22},"indices":23,"material":0}]},{"primitives":[{"mode":4,"attributes":{"POSITION":24,"NORMAL":25,"TEXCOORD_0":26},"indices":27,"material":0}]},{"primitives":[{"mode":4,"attributes":{"POSITION":28,"NORMAL":29,"TEXCOORD_0":30},"indices":31,"material":0}]},{"primitives":[{"mode":4,"attributes":{"POSITION":32,"NORMAL":33,"TEXCOORD_0":34},"indices":35,"material":0}]},{"primitives":[{"mode":4,"attributes":{"POSITION":36,"NORMAL":37,"TEXCOORD_0":38},"indices":39,"material":0}]},{"primitives":[{"mode":4,"attributes":{"POSITION":40,"NORMAL":41,"TEXCOORD_0":42},"indices":43,"material":0}]},{"primitives":[{"mode":4,"attributes":{"POSITION":44,"NORMAL":45,"TEXCOORD_0":46},"indices":47,"material":0}]},{"primitives":[{"mode":4,"attributes":{"POSITION":48,"NORMAL":49,"TEXCOORD_0":50},"indices":51,"material":0}]},{"primitives":[{"mode":4,"attributes":{"POSITION":52,"NORMAL":53,"TEXCOORD_0":54},"indices":55,"material":0}]},{"primitives":[{"mode":4,"attributes":{"POSITION":56,"NORMAL":57,"TEXCOORD_0":58},"indices":59,"material":0}]}],"animations":[{"name":"animation.model.walk","samplers":[{"input":60,"output":61,"interpolation":"LINEAR"},{"input":62,"output":63,"interpolation":"LINEAR"},{"input":64,"output":65,"interpolation":"LINEAR"},{"input":66,"output":67,"interpolation":"LINEAR"},{"input":68,"output":69,"interpolation":"LINEAR"}],"channels":[{"sampler":0,"target":{"node":3,"path":"rotation"}},{"sampler":1,"target":{"node":7,"path":"rotation"}},{"sampler":2,"target":{"node":11,"path":"rotation"}},{"sampler":3,"target":{"node":15,"path":"rotation"}},{"sampler":4,"target":{"node":19,"path":"rotation"}}]}]} \ No newline at end of file diff --git a/irr/src/CGLTFMeshFileLoader.cpp b/irr/src/CGLTFMeshFileLoader.cpp index 54d207e5f..e727b0410 100644 --- a/irr/src/CGLTFMeshFileLoader.cpp +++ b/irr/src/CGLTFMeshFileLoader.cpp @@ -9,6 +9,7 @@ #include "IAnimatedMesh.h" #include "IReadFile.h" #include "irrTypes.h" +#include "irr_ptr.h" #include "matrix4.h" #include "path.h" #include "quaternion.h" @@ -27,7 +28,6 @@ #include #include #include -#include namespace irr { @@ -341,40 +341,24 @@ bool SelfType::isALoadableFileExtension( */ IAnimatedMesh* SelfType::createMesh(io::IReadFile* file) { - if (file->getSize() <= 0) { - return nullptr; - } - std::optional model = tryParseGLTF(file); - if (!model.has_value()) { - return nullptr; - } - if (model->extensionsRequired) { - os::Printer::log("glTF loader", - "model requires extensions, but we support none", ELL_ERROR); - return nullptr; - } - - if (!(model->buffers.has_value() - && model->bufferViews.has_value() - && model->accessors.has_value() - && model->meshes.has_value() - && model->nodes.has_value())) { - os::Printer::log("glTF loader", "missing required fields", ELL_ERROR); - return nullptr; - } - - auto *mesh = new CSkinnedMesh(); - MeshExtractor parser(std::move(model.value()), mesh); + const char *filename = file->getFileName().c_str(); try { - parser.load(); - } catch (std::runtime_error &e) { - os::Printer::log("glTF loader", e.what(), ELL_ERROR); - mesh->drop(); - return nullptr; + tiniergltf::GlTF model = parseGLTF(file); + irr_ptr mesh(new CSkinnedMesh()); + MeshExtractor extractor(std::move(model), mesh.get()); + try { + extractor.load(); + for (const auto &warning : extractor.getWarnings()) { + os::Printer::log(filename, warning.c_str(), ELL_WARNING); + } + return mesh.release(); + } catch (const std::runtime_error &e) { + os::Printer::log("error converting gltf to irrlicht mesh", e.what(), ELL_ERROR); + } + } catch (const std::runtime_error &e) { + os::Printer::log("error parsing gltf", e.what(), ELL_ERROR); } - if (model->images.has_value()) - os::Printer::log("glTF loader", "embedded images are not supported", ELL_WARNING); - return mesh; + return nullptr; } static void transformVertices(std::vector &vertices, const core::matrix4 &transform) @@ -730,20 +714,40 @@ void SelfType::MeshExtractor::loadAnimation(const std::size_t animIdx) void SelfType::MeshExtractor::load() { - loadNodes(); - for (const auto &load_mesh : m_mesh_loaders) { - load_mesh(); + if (m_gltf_model.extensionsRequired) + throw std::runtime_error("model requires extensions, but we support none"); + + if (!(m_gltf_model.buffers.has_value() + && m_gltf_model.bufferViews.has_value() + && m_gltf_model.accessors.has_value() + && m_gltf_model.meshes.has_value() + && m_gltf_model.nodes.has_value())) { + throw std::runtime_error("missing required fields"); } - loadSkins(); - // Load the first animation, if there is one. - if (m_gltf_model.animations.has_value()) { - if (m_gltf_model.animations->size() > 1) { - os::Printer::log("glTF loader", - "multiple animations are not supported", ELL_WARNING); + + if (m_gltf_model.images.has_value()) + warn("embedded images are not supported"); + + try { + loadNodes(); + for (const auto &load_mesh : m_mesh_loaders) { + load_mesh(); } - loadAnimation(0); - m_irr_model->setAnimationSpeed(1); + loadSkins(); + // Load the first animation, if there is one. + if (m_gltf_model.animations.has_value()) { + if (m_gltf_model.animations->size() > 1) + warn("multiple animations are not supported"); + + loadAnimation(0); + m_irr_model->setAnimationSpeed(1); + } + } catch (const std::out_of_range &e) { + throw std::runtime_error(e.what()); + } catch (const std::bad_optional_access &e) { + throw std::runtime_error(e.what()); } + m_irr_model->finalize(); } @@ -905,15 +909,18 @@ void SelfType::MeshExtractor::copyTCoords( /** * This is where the actual model's GLTF file is loaded and parsed by tiniergltf. */ -std::optional SelfType::tryParseGLTF(io::IReadFile* file) +tiniergltf::GlTF SelfType::parseGLTF(io::IReadFile* file) { const bool isGlb = core::hasFileExtension(file->getFileName(), "glb"); auto size = file->getSize(); if (size < 0) // this can happen if `ftell` fails - return std::nullopt; + throw std::runtime_error("error reading file"); + if (size == 0) + throw std::runtime_error("file is empty"); + std::unique_ptr buf(new char[size + 1]); if (file->read(buf.get(), size) != static_cast(size)) - return std::nullopt; + throw std::runtime_error("file ended prematurely"); // We probably don't need this, but add it just to be sure. buf[size] = '\0'; try { @@ -921,12 +928,10 @@ std::optional SelfType::tryParseGLTF(io::IReadFile* file) return tiniergltf::readGlb(buf.get(), size); else return tiniergltf::readGlTF(buf.get(), size); - } catch (const std::runtime_error &e) { - os::Printer::log("glTF loader", e.what(), ELL_ERROR); - return std::nullopt; } catch (const std::out_of_range &e) { - os::Printer::log("glTF loader", e.what(), ELL_ERROR); - return std::nullopt; + throw std::runtime_error(e.what()); + } catch (const std::bad_optional_access &e) { + throw std::runtime_error(e.what()); } } diff --git a/irr/src/CGLTFMeshFileLoader.h b/irr/src/CGLTFMeshFileLoader.h index 7674fd46a..ae178565d 100644 --- a/irr/src/CGLTFMeshFileLoader.h +++ b/irr/src/CGLTFMeshFileLoader.h @@ -118,6 +118,9 @@ private: std::size_t getPrimitiveCount(const std::size_t meshIdx) const; void load(); + const std::vector &getWarnings() { + return warnings; + } private: const tiniergltf::GlTF m_gltf_model; @@ -126,6 +129,11 @@ private: std::vector> m_mesh_loaders; std::vector m_loaded_nodes; + std::vector warnings; + void warn(const std::string &warning) { + warnings.push_back(warning); + } + void copyPositions(const std::size_t accessorIdx, std::vector& vertices) const; @@ -152,7 +160,7 @@ private: void loadAnimation(const std::size_t animIdx); }; - std::optional tryParseGLTF(io::IReadFile *file); + tiniergltf::GlTF parseGLTF(io::IReadFile *file); }; } // namespace scene diff --git a/src/unittest/test_irr_gltf_mesh_loader.cpp b/src/unittest/test_irr_gltf_mesh_loader.cpp index 674f3c0dd..6125ab026 100644 --- a/src/unittest/test_irr_gltf_mesh_loader.cpp +++ b/src/unittest/test_irr_gltf_mesh_loader.cpp @@ -1,6 +1,7 @@ // Minetest // SPDX-License-Identifier: LGPL-2.1-or-later +#include "EDriverTypes.h" #include "content/subgames.h" #include "filesys.h" From 4c419c4020018a01e6175f94fee0c89e9fbe34f4 Mon Sep 17 00:00:00 2001 From: Lars Mueller Date: Sat, 12 Oct 2024 23:24:47 +0200 Subject: [PATCH 021/178] Improve `minetest.parse_json` Let modders handle parsing errors, get rid of two unnecessary copies. --- doc/lua_api.md | 6 ++- games/devtest/mods/unittests/misc.lua | 23 ++++++++---- src/script/lua_api/l_util.cpp | 54 ++++++++++++++------------- 3 files changed, 48 insertions(+), 35 deletions(-) diff --git a/doc/lua_api.md b/doc/lua_api.md index 2c827d7ad..622993b7a 100644 --- a/doc/lua_api.md +++ b/doc/lua_api.md @@ -7404,11 +7404,13 @@ Misc. * Gets the internal content ID of `name` * `minetest.get_name_from_content_id(content_id)`: returns a string * Gets the name of the content with that content ID -* `minetest.parse_json(string[, nullvalue])`: returns something +* `minetest.parse_json(string[, nullvalue, return_error])`: returns something * Convert a string containing JSON data into the Lua equivalent * `nullvalue`: returned in place of the JSON null; defaults to `nil` * On success returns a table, a string, a number, a boolean or `nullvalue` - * On failure outputs an error message and returns `nil` + * On failure: If `return_error` is not set or is `false`, + outputs an error message and returns `nil`. + Otherwise returns `nil, err` (error message). * Example: `parse_json("[10, {\"a\":false}]")`, returns `{10, {a = false}}` * `minetest.write_json(data[, styled])`: returns a string or `nil` and an error message. diff --git a/games/devtest/mods/unittests/misc.lua b/games/devtest/mods/unittests/misc.lua index a807a390f..67473b8b5 100644 --- a/games/devtest/mods/unittests/misc.lua +++ b/games/devtest/mods/unittests/misc.lua @@ -155,13 +155,22 @@ unittests.register("test_urlencode", test_urlencode) local function test_parse_json() local raw = "{\"how\\u0000weird\":\n\"yes\\u0000really\",\"n\":-1234567891011,\"z\":null}" - local data = core.parse_json(raw) - assert(data["how\000weird"] == "yes\000really") - assert(data.n == -1234567891011) - assert(data.z == nil) - local null = {} - data = core.parse_json(raw, null) - assert(data.z == null) + do + local data = core.parse_json(raw) + assert(data["how\000weird"] == "yes\000really") + assert(data.n == -1234567891011) + assert(data.z == nil) + end + do + local null = {} + local data = core.parse_json(raw, null) + assert(data.z == null) + end + do + local data, err = core.parse_json('"ceci n\'est pas un json', nil, true) + assert(data == nil) + assert(type(err) == "string") + end end unittests.register("test_parse_json", test_parse_json) diff --git a/src/script/lua_api/l_util.cpp b/src/script/lua_api/l_util.cpp index c899e55f4..6ead0a067 100644 --- a/src/script/lua_api/l_util.cpp +++ b/src/script/lua_api/l_util.cpp @@ -93,12 +93,12 @@ int ModApiUtil::l_get_us_time(lua_State *L) return 1; } -// parse_json(str[, nullvalue]) +// parse_json(str[, nullvalue, return_error]) int ModApiUtil::l_parse_json(lua_State *L) { NO_MAP_LOCK_REQUIRED; - const char *jsonstr = luaL_checkstring(L, 1); + const auto jsonstr = readParam(L, 1); // Use passed nullvalue or default to nil int nullindex = 2; @@ -107,36 +107,38 @@ int ModApiUtil::l_parse_json(lua_State *L) nullindex = lua_gettop(L); } + bool return_error = lua_toboolean(L, 3); + const auto handle_error = [&](const char *errmsg) { + if (return_error) { + lua_pushnil(L); + lua_pushstring(L, errmsg); + return 2; + } + errorstream << "Failed to parse json data: " << errmsg << std::endl; + errorstream << "data: \""; + if (jsonstr.size() <= 100) { + errorstream << jsonstr << "\""; + } else { + errorstream << jsonstr.substr(0, 100) << "\"... (truncated)"; + } + errorstream << std::endl; + lua_pushnil(L); + return 1; + }; + Json::Value root; - { - std::istringstream stream(jsonstr); - Json::CharReaderBuilder builder; builder.settings_["collectComments"] = false; - std::string errs; - - if (!Json::parseFromStream(builder, stream, &root, &errs)) { - errorstream << "Failed to parse json data " << errs << std::endl; - size_t jlen = strlen(jsonstr); - if (jlen > 100) { - errorstream << "Data (" << jlen - << " bytes) printed to warningstream." << std::endl; - warningstream << "data: \"" << jsonstr << "\"" << std::endl; - } else { - errorstream << "data: \"" << jsonstr << "\"" << std::endl; - } - lua_pushnil(L); - return 1; - } + const std::unique_ptr reader(builder.newCharReader()); + std::string errmsg; + if (!reader->parse(jsonstr.begin(), jsonstr.end(), &root, &errmsg)) + return handle_error(errmsg.c_str()); } - if (!push_json_value(L, root, nullindex)) { - errorstream << "Failed to parse json data, " - << "depth exceeds lua stack limit" << std::endl; - errorstream << "data: \"" << jsonstr << "\"" << std::endl; - lua_pushnil(L); - } + if (!push_json_value(L, root, nullindex)) + return handle_error("depth exceeds lua stack limit"); + return 1; } From e2ea359925c36e499b1c35161ff4ce7ceecbd32d Mon Sep 17 00:00:00 2001 From: Lars Mueller Date: Mon, 14 Oct 2024 15:46:25 +0200 Subject: [PATCH 022/178] JSON: Support consistent larger max. depth of 1024 --- games/devtest/mods/unittests/misc.lua | 15 +++++++++++++++ src/script/common/c_content.cpp | 12 +++++++----- src/script/common/c_content.h | 2 +- src/script/lua_api/l_util.cpp | 9 +++++++-- 4 files changed, 30 insertions(+), 8 deletions(-) diff --git a/games/devtest/mods/unittests/misc.lua b/games/devtest/mods/unittests/misc.lua index 67473b8b5..b26ec753f 100644 --- a/games/devtest/mods/unittests/misc.lua +++ b/games/devtest/mods/unittests/misc.lua @@ -174,6 +174,21 @@ local function test_parse_json() end unittests.register("test_parse_json", test_parse_json) +local function test_write_json() + -- deeply nested structures should be preserved + local leaf = 42 + local data = leaf + for i = 1, 1000 do + data = {data} + end + local roundtripped = minetest.parse_json(minetest.write_json(data)) + for i = 1, 1000 do + roundtripped = roundtripped[1] + end + assert(roundtripped == 42) +end +unittests.register("test_write_json", test_write_json) + local function test_game_info() local info = minetest.get_game_info() local game_conf = Settings(info.path .. "/game.conf") diff --git a/src/script/common/c_content.cpp b/src/script/common/c_content.cpp index 348c2559a..65525eed5 100644 --- a/src/script/common/c_content.cpp +++ b/src/script/common/c_content.cpp @@ -2149,11 +2149,11 @@ bool push_json_value(lua_State *L, const Json::Value &value, int nullindex) } // Converts Lua table --> JSON -void read_json_value(lua_State *L, Json::Value &root, int index, u8 recursion) +void read_json_value(lua_State *L, Json::Value &root, int index, u16 max_depth) { - if (recursion > 16) { - throw SerializationError("Maximum recursion depth exceeded"); - } + if (max_depth == 0) + throw SerializationError("depth exceeds MAX_JSON_DEPTH"); + int type = lua_type(L, index); if (type == LUA_TBOOLEAN) { root = (bool) lua_toboolean(L, index); @@ -2164,11 +2164,13 @@ void read_json_value(lua_State *L, Json::Value &root, int index, u8 recursion) const char *str = lua_tolstring(L, index, &len); root = std::string(str, len); } else if (type == LUA_TTABLE) { + // Reserve two slots for key and value. + lua_checkstack(L, 2); lua_pushnil(L); while (lua_next(L, index)) { // Key is at -2 and value is at -1 Json::Value value; - read_json_value(L, value, lua_gettop(L), recursion + 1); + read_json_value(L, value, lua_gettop(L), max_depth - 1); Json::ValueType roottype = root.type(); int keytype = lua_type(L, -1); diff --git a/src/script/common/c_content.h b/src/script/common/c_content.h index 178a86cf4..3bcc5109e 100644 --- a/src/script/common/c_content.h +++ b/src/script/common/c_content.h @@ -200,7 +200,7 @@ bool push_json_value (lua_State *L, const Json::Value &value, int nullindex); void read_json_value (lua_State *L, Json::Value &root, - int index, u8 recursion = 0); + int index, u16 max_depth); /*! * Pushes a Lua `pointed_thing` to the given Lua stack. diff --git a/src/script/lua_api/l_util.cpp b/src/script/lua_api/l_util.cpp index 6ead0a067..e78ac6d3f 100644 --- a/src/script/lua_api/l_util.cpp +++ b/src/script/lua_api/l_util.cpp @@ -93,6 +93,10 @@ int ModApiUtil::l_get_us_time(lua_State *L) return 1; } +// Maximum depth of a JSON object: +// Reading and writing should not overflow the Lua, C, or jsoncpp stacks. +constexpr static u16 MAX_JSON_DEPTH = 1024; + // parse_json(str[, nullvalue, return_error]) int ModApiUtil::l_parse_json(lua_State *L) { @@ -129,10 +133,11 @@ int ModApiUtil::l_parse_json(lua_State *L) Json::Value root; { Json::CharReaderBuilder builder; + builder.settings_["stackLimit"] = MAX_JSON_DEPTH; builder.settings_["collectComments"] = false; const std::unique_ptr reader(builder.newCharReader()); std::string errmsg; - if (!reader->parse(jsonstr.begin(), jsonstr.end(), &root, &errmsg)) + if (!reader->parse(jsonstr.data(), jsonstr.data() + jsonstr.size(), &root, &errmsg)) return handle_error(errmsg.c_str()); } @@ -155,7 +160,7 @@ int ModApiUtil::l_write_json(lua_State *L) Json::Value root; try { - read_json_value(L, root, 1); + read_json_value(L, root, 1, MAX_JSON_DEPTH); } catch (SerializationError &e) { lua_pushnil(L); lua_pushstring(L, e.what()); From 37095f3e49acd6fa35389b69c417b981fb9c4e6e Mon Sep 17 00:00:00 2001 From: sfan5 Date: Tue, 15 Oct 2024 15:47:23 +0200 Subject: [PATCH 023/178] Change the preprocessor macro that differs server/client builds --- src/CMakeLists.txt | 4 +-- src/benchmark/benchmark_mapblock.cpp | 2 +- src/client/client.h | 3 +- src/client/clientenvironment.h | 3 +- src/client/game.h | 3 +- src/client/renderingengine.h | 3 +- src/client/sound.h | 3 +- src/clientdynamicinfo.cpp | 4 +-- src/clientdynamicinfo.h | 3 +- src/collision.cpp | 4 +-- src/config.h | 42 ++++++++++++++++++++++++++++ src/content/subgames.cpp | 4 +-- src/filesys.cpp | 4 +-- src/filesys.h | 3 +- src/gettext.cpp | 2 +- src/irrlichttypes_extrabloated.h | 3 +- src/itemdef.cpp | 10 +++---- src/itemdef.h | 4 +-- src/light.cpp | 2 +- src/light.h | 5 ++-- src/main.cpp | 8 +++--- src/mapblock.cpp | 4 +-- src/mapblock.h | 2 +- src/nodedef.cpp | 14 +++++----- src/nodedef.h | 8 +++--- src/player.cpp | 2 +- src/player.h | 2 +- src/porting.cpp | 2 +- src/porting_android.cpp | 2 -- src/porting_android.h | 2 -- src/script/common/c_content.cpp | 2 +- src/script/cpp_api/s_base.cpp | 10 +++---- src/script/cpp_api/s_base.h | 12 ++++---- src/script/cpp_api/s_security.cpp | 6 ++-- src/script/lua_api/l_base.cpp | 4 +-- src/script/lua_api/l_base.h | 4 +-- src/script/lua_api/l_env.cpp | 10 +++---- src/script/lua_api/l_http.cpp | 2 +- src/script/lua_api/l_internal.h | 2 +- src/script/lua_api/l_settings.cpp | 2 +- src/translation.cpp | 2 +- src/translation.h | 3 +- src/util/string.cpp | 2 +- src/util/string.h | 5 ++-- src/version.cpp | 2 +- 45 files changed, 137 insertions(+), 88 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 6dd4c05d2..153a45dae 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -602,6 +602,7 @@ if(BUILD_CLIENT) # on other platforms, only IrrlichtMt depends on SDL2 "$<$:${SDL2_LIBRARIES}>" ) + target_compile_definitions(${PROJECT_NAME} PRIVATE "MT_BUILDTARGET=1") if(NOT USE_LUAJIT) set_target_properties(${PROJECT_NAME} PROPERTIES # This is necessary for dynamic Lua modules @@ -679,8 +680,7 @@ if(BUILD_SERVER) ${GMP_LIBRARY} ${PLATFORM_LIBS} ) - set_target_properties(${PROJECT_NAME}server PROPERTIES - COMPILE_DEFINITIONS "SERVER") + target_compile_definitions(${PROJECT_NAME}server PRIVATE "MT_BUILDTARGET=2") if(NOT USE_LUAJIT) set_target_properties(${PROJECT_NAME}server PROPERTIES # This is necessary for dynamic Lua modules diff --git a/src/benchmark/benchmark_mapblock.cpp b/src/benchmark/benchmark_mapblock.cpp index 0b3f7c921..0f52c1d96 100644 --- a/src/benchmark/benchmark_mapblock.cpp +++ b/src/benchmark/benchmark_mapblock.cpp @@ -49,7 +49,7 @@ static inline void freeAll(MBContainer &vec) { freeSome(vec, vec.size()); } static void workOnMetadata(const MBContainer &vec) { for (MapBlock *block : vec) { -#ifndef SERVER +#if CHECK_CLIENT_BUILD() bool foo = !!block->mesh; #else bool foo = true; diff --git a/src/client/client.h b/src/client/client.h index 0b26ff94d..0f9a8dafe 100644 --- a/src/client/client.h +++ b/src/client/client.h @@ -36,8 +36,9 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "script/common/c_types.h" // LuaError #include "util/numeric.h" #include "util/string.h" // StringMap +#include "config.h" -#ifdef SERVER +#if !IS_CLIENT_BUILD #error Do not include in server builds #endif diff --git a/src/client/clientenvironment.h b/src/client/clientenvironment.h index db31e69f2..a47cb7b5b 100644 --- a/src/client/clientenvironment.h +++ b/src/client/clientenvironment.h @@ -23,9 +23,10 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "util/numeric.h" // IntervalLimiter #include "activeobjectmgr.h" // client::ActiveObjectMgr #include "irr_ptr.h" +#include "config.h" #include -#ifdef SERVER +#if !IS_CLIENT_BUILD #error Do not include in server builds #endif diff --git a/src/client/game.h b/src/client/game.h index 0282e5ea9..a487d12f4 100644 --- a/src/client/game.h +++ b/src/client/game.h @@ -20,9 +20,10 @@ with this program; if not, write to the Free Software Foundation, Inc., #pragma once #include "irrlichttypes.h" +#include "config.h" #include -#ifdef SERVER +#if !IS_CLIENT_BUILD #error Do not include in server builds #endif diff --git a/src/client/renderingengine.h b/src/client/renderingengine.h index ffdda636c..5aa630350 100644 --- a/src/client/renderingengine.h +++ b/src/client/renderingengine.h @@ -26,13 +26,14 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "client/inputhandler.h" #include "irrlichttypes_extrabloated.h" #include "debug.h" +#include "config.h" #include "client/shader.h" #include "client/render/core.h" // include the shadow mapper classes too #include "client/shadows/dynamicshadowsrender.h" #include -#ifdef SERVER +#if !IS_CLIENT_BUILD #error Do not include in server builds #endif diff --git a/src/client/sound.h b/src/client/sound.h index 8b19f7761..294a0db7d 100644 --- a/src/client/sound.h +++ b/src/client/sound.h @@ -20,13 +20,14 @@ with this program; if not, write to the Free Software Foundation, Inc., #pragma once #include "irr_v3d.h" +#include "config.h" #include #include #include #include #include -#ifdef SERVER +#if !IS_CLIENT_BUILD #error Do not include in server builds #endif diff --git a/src/clientdynamicinfo.cpp b/src/clientdynamicinfo.cpp index 12bc23abd..d0930c15c 100644 --- a/src/clientdynamicinfo.cpp +++ b/src/clientdynamicinfo.cpp @@ -17,10 +17,10 @@ with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#ifndef SERVER - #include "clientdynamicinfo.h" +#if CHECK_CLIENT_BUILD() + #include "settings.h" #include "client/renderingengine.h" #include "gui/guiFormSpecMenu.h" diff --git a/src/clientdynamicinfo.h b/src/clientdynamicinfo.h index c43fcb8d8..ae10ef745 100644 --- a/src/clientdynamicinfo.h +++ b/src/clientdynamicinfo.h @@ -20,6 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #pragma once #include "irrlichttypes_bloated.h" +#include "config.h" struct ClientDynamicInfo @@ -38,7 +39,7 @@ public: touch_controls == other.touch_controls; } -#ifndef SERVER +#if CHECK_CLIENT_BUILD() static ClientDynamicInfo getCurrent(); private: diff --git a/src/collision.cpp b/src/collision.cpp index f554dac80..47a03fba9 100644 --- a/src/collision.cpp +++ b/src/collision.cpp @@ -23,7 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "map.h" #include "nodedef.h" #include "gamedef.h" -#ifndef SERVER +#if CHECK_CLIENT_BUILD() #include "client/clientenvironment.h" #include "client/localplayer.h" #endif @@ -285,7 +285,7 @@ static void add_object_boxes(Environment *env, const f32 distance = speed_f.getLength() * dtime + box_0.getExtent().getLength() + 1.5f * BS; -#ifndef SERVER +#if CHECK_CLIENT_BUILD() ClientEnvironment *c_env = dynamic_cast(env); if (c_env) { std::vector clientobjects; diff --git a/src/config.h b/src/config.h index 30e290acf..d573a0fab 100644 --- a/src/config.h +++ b/src/config.h @@ -5,3 +5,45 @@ #else #warning Missing configuration #endif + +/* + * There are three ways a Minetest source file can be built: + * 1) we are currently building it for exclusively linking into the client + * 2) we are currently building it for exclusively linking into the server + * 3) we are building it only once for linking into both the client and server + * In case of 1 and 2 that means a single source file may be built twice if + * both a client and server build was requested. + * + * These options map to the following macros: + * 1) IS_CLIENT_BUILD = 1 and CHECK_CLIENT_BUILD() = 1 + * 2) IS_CLIENT_BUILD = 0 and CHECK_CLIENT_BUILD() = 0 + * 3) IS_CLIENT_BUILD = 0 and CHECK_CLIENT_BUILD() undefined + * As a function style macro CHECK_CLIENT_BUILD() has the special property that it + * cause a compile error if it used but not defined. + * + * v v v v v v v v v READ THIS PART v v v v v v v v v + * So that object files can be safely shared, these macros need to be used like so: + * - use IS_CLIENT_BUILD to exclude optional helpers in header files or similar + * - use CHECK_CLIENT_BUILD() in all source files, or in headers where it + * influences program behavior or e.g. class structure + * In practice this means any shared object files (case 3) cannot include any + * code that references CHECK_CLIENT_BUILD(), because a compiler error will occur. + * ^ ^ ^ ^ ^ ^ ^ ^ ^ READ THIS PART ^ ^ ^ ^ ^ ^ ^ ^ ^ + * + * The background is that for any files built only once, we need to ensure that + * they are perfectly ABI-compatible between client/server or it will not work. + * This manifests either as a linker error (good case) or insidious memory corruption + * that causes obscure runtime behavior (bad case). + * Finally, note that the best option is to split code in such a way that usage + * of these macros is not necessary. + */ +#if MT_BUILDTARGET == 1 +#define IS_CLIENT_BUILD 1 +#define CHECK_CLIENT_BUILD() 1 +#elif MT_BUILDTARGET == 2 +#define IS_CLIENT_BUILD 0 +#define CHECK_CLIENT_BUILD() 0 +#else +#define IS_CLIENT_BUILD 0 +#endif +#undef MT_BUILDTARGET diff --git a/src/content/subgames.cpp b/src/content/subgames.cpp index 9d5d528a8..f522ec5c5 100644 --- a/src/content/subgames.cpp +++ b/src/content/subgames.cpp @@ -28,7 +28,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "map_settings_manager.h" #include "util/string.h" -#ifndef SERVER +#if CHECK_CLIENT_BUILD() #include "client/texturepaths.h" #endif @@ -192,7 +192,7 @@ SubgameSpec findSubgame(const std::string &id) } std::string menuicon_path; -#ifndef SERVER +#if CHECK_CLIENT_BUILD() menuicon_path = getImagePath( game_path + DIR_DELIM + "menu" + DIR_DELIM + "icon.png"); #endif diff --git a/src/filesys.cpp b/src/filesys.cpp index b0a1f318e..ad0b4b49e 100644 --- a/src/filesys.cpp +++ b/src/filesys.cpp @@ -30,7 +30,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "log.h" #include "config.h" #include "porting.h" -#ifndef SERVER +#if CHECK_CLIENT_BUILD() #include "irr_ptr.h" #include #include @@ -945,7 +945,7 @@ bool safeWriteToFile(const std::string &path, std::string_view content) return true; } -#ifndef SERVER +#if CHECK_CLIENT_BUILD() bool extractZipFile(io::IFileSystem *fs, const char *filename, const std::string &destination) { // Be careful here not to touch the global file hierarchy in Irrlicht diff --git a/src/filesys.h b/src/filesys.h index bb71f22e5..c36428c9c 100644 --- a/src/filesys.h +++ b/src/filesys.h @@ -19,6 +19,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #pragma once +#include "config.h" #include #include #include @@ -154,7 +155,7 @@ const char *GetFilenameFromPath(const char *path); // logs and returns false on error bool safeWriteToFile(const std::string &path, std::string_view content); -#ifndef SERVER +#if IS_CLIENT_BUILD bool extractZipFile(irr::io::IFileSystem *fs, const char *filename, const std::string &destination); #endif diff --git a/src/gettext.cpp b/src/gettext.cpp index bb99e39bc..f60eaae23 100644 --- a/src/gettext.cpp +++ b/src/gettext.cpp @@ -184,7 +184,7 @@ void init_gettext(const char *path, const std::string &configured_language, setenv("LANGUAGE", configured_language.c_str(), 1); SetEnvironmentVariableA("LANGUAGE", configured_language.c_str()); -#ifndef SERVER +#if CHECK_CLIENT_BUILD() // Hack to force gettext to see the right environment if (current_language != configured_language) MSVC_LocaleWorkaround(argc, argv); diff --git a/src/irrlichttypes_extrabloated.h b/src/irrlichttypes_extrabloated.h index a3de2c3c8..35e33d9ce 100644 --- a/src/irrlichttypes_extrabloated.h +++ b/src/irrlichttypes_extrabloated.h @@ -20,8 +20,9 @@ with this program; if not, write to the Free Software Foundation, Inc., #pragma once #include "irrlichttypes_bloated.h" +#include "config.h" // IS_CLIENT_BUILD -#ifndef SERVER +#if IS_CLIENT_BUILD #include #include #include diff --git a/src/itemdef.cpp b/src/itemdef.cpp index 220c6fbb6..0bb90929e 100644 --- a/src/itemdef.cpp +++ b/src/itemdef.cpp @@ -23,7 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "nodedef.h" #include "tool.h" #include "inventory.h" -#ifndef SERVER +#if CHECK_CLIENT_BUILD() #include "client/mapblock_mesh.h" #include "client/mesh.h" #include "client/wieldmesh.h" @@ -374,7 +374,7 @@ void ItemDefinition::deSerialize(std::istream &is, u16 protocol_version) class CItemDefManager: public IWritableItemDefManager { -#ifndef SERVER +#if CHECK_CLIENT_BUILD() struct ClientCached { video::ITexture *inventory_texture; @@ -399,7 +399,7 @@ public: CItemDefManager() { -#ifndef SERVER +#if CHECK_CLIENT_BUILD() m_main_thread = std::this_thread::get_id(); #endif clear(); @@ -448,7 +448,7 @@ public: // Get the definition return m_item_definitions.find(name) != m_item_definitions.cend(); } -#ifndef SERVER +#if CHECK_CLIENT_BUILD() public: ClientCached* createClientCachedDirect(const ItemStack &item, Client *client) const { @@ -678,7 +678,7 @@ private: std::map m_item_definitions; // Aliases StringMap m_aliases; -#ifndef SERVER +#if CHECK_CLIENT_BUILD() // The id of the thread that is allowed to use irrlicht directly std::thread::id m_main_thread; // Cached textures and meshes diff --git a/src/itemdef.h b/src/itemdef.h index 44fab8d91..1cfd475e5 100644 --- a/src/itemdef.h +++ b/src/itemdef.h @@ -35,7 +35,7 @@ with this program; if not, write to the Free Software Foundation, Inc., class IGameDef; class Client; struct ToolCapabilities; -#ifndef SERVER +#if CHECK_CLIENT_BUILD() #include "client/texturesource.h" struct ItemMesh; struct ItemStack; @@ -155,7 +155,7 @@ public: virtual void getAll(std::set &result) const=0; // Check if item is known virtual bool isKnown(const std::string &name) const=0; -#ifndef SERVER +#if CHECK_CLIENT_BUILD() // Get item inventory texture virtual video::ITexture* getInventoryTexture(const ItemStack &item, Client *client) const=0; diff --git a/src/light.cpp b/src/light.cpp index d5389b450..f159a2bed 100644 --- a/src/light.cpp +++ b/src/light.cpp @@ -23,7 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "util/numeric.h" #include "settings.h" -#ifndef SERVER +#if CHECK_CLIENT_BUILD() static u8 light_LUT[LIGHT_SUN + 1]; diff --git a/src/light.h b/src/light.h index 44082a163..285ea4d9b 100644 --- a/src/light.h +++ b/src/light.h @@ -19,6 +19,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #pragma once #include +#include "config.h" #include "irrlichttypes.h" /* @@ -35,7 +36,7 @@ with this program; if not, write to the Free Software Foundation, Inc., // This brightness is reserved for sunlight #define LIGHT_SUN 15 -#ifndef SERVER +#if IS_CLIENT_BUILD /** * \internal @@ -67,7 +68,7 @@ float decode_light_f(float light_f); void set_light_table(float gamma); -#endif // ifndef SERVER +#endif // 0 <= daylight_factor <= 1000 // 0 <= lightday, lightnight <= LIGHT_SUN diff --git a/src/main.cpp b/src/main.cpp index 803f3c6b0..6928b5c74 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -44,7 +44,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #if USE_CURSES #include "terminal_chat_console.h" #endif -#ifndef SERVER +#if CHECK_CLIENT_BUILD() #include "gui/guiMainMenu.h" #include "client/clientlauncher.h" #include "gui/guiEngine.h" @@ -243,7 +243,7 @@ int main(int argc, char *argv[]) } GameStartData game_params; -#ifdef SERVER +#if !CHECK_CLIENT_BUILD() porting::attachOrCreateConsole(); game_params.is_dedicated_server = true; #else @@ -261,7 +261,7 @@ int main(int argc, char *argv[]) if (game_params.is_dedicated_server) return run_dedicated_server(game_params, cmd_args) ? 0 : 1; -#ifndef SERVER +#if CHECK_CLIENT_BUILD() retval = ClientLauncher().run(game_params, cmd_args) ? 0 : 1; #else retval = 0; @@ -377,7 +377,7 @@ static void set_allowed_options(OptionList *allowed_options) _("Feature an interactive terminal (Only works when using minetestserver or with --server)")))); allowed_options->insert(std::make_pair("recompress", ValueSpec(VALUETYPE_FLAG, _("Recompress the blocks of the given map database.")))); -#ifndef SERVER +#if CHECK_CLIENT_BUILD() allowed_options->insert(std::make_pair("address", ValueSpec(VALUETYPE_STRING, _("Address to connect to. ('' = local game)")))); allowed_options->insert(std::make_pair("random-input", ValueSpec(VALUETYPE_FLAG, diff --git a/src/mapblock.cpp b/src/mapblock.cpp index 714b47ec1..04e2a56dc 100644 --- a/src/mapblock.cpp +++ b/src/mapblock.cpp @@ -31,7 +31,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "content_mapnode.h" // For legacy name-id mapping #include "content_nodemeta.h" // For legacy deserialization #include "serialization.h" -#ifndef SERVER +#if CHECK_CLIENT_BUILD() #include "client/mapblock_mesh.h" #endif #include "porting.h" @@ -77,7 +77,7 @@ MapBlock::MapBlock(v3s16 pos, IGameDef *gamedef): MapBlock::~MapBlock() { -#ifndef SERVER +#if CHECK_CLIENT_BUILD() { delete mesh; mesh = nullptr; diff --git a/src/mapblock.h b/src/mapblock.h index 044c104bc..a9e6386e1 100644 --- a/src/mapblock.h +++ b/src/mapblock.h @@ -460,7 +460,7 @@ private: */ public: -#ifndef SERVER // Only on client +#if CHECK_CLIENT_BUILD() // Only on client MapBlockMesh *mesh = nullptr; // marks the sides which are opaque: 00+Z-Z+Y-Y+X-X diff --git a/src/nodedef.cpp b/src/nodedef.cpp index 811753c89..2b3b3b1fb 100644 --- a/src/nodedef.cpp +++ b/src/nodedef.cpp @@ -20,7 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "nodedef.h" #include "itemdef.h" -#ifndef SERVER +#if CHECK_CLIENT_BUILD() #include "client/mesh.h" #include "client/shader.h" #include "client/client.h" @@ -332,7 +332,7 @@ ContentFeatures::ContentFeatures() ContentFeatures::~ContentFeatures() { -#ifndef SERVER +#if CHECK_CLIENT_BUILD() for (u16 j = 0; j < 6; j++) { delete tiles[j].layers[0].frames; delete tiles[j].layers[1].frames; @@ -347,7 +347,7 @@ void ContentFeatures::reset() /* Cached stuff */ -#ifndef SERVER +#if CHECK_CLIENT_BUILD() solidness = 2; visual_solidness = 0; backface_culling = true; @@ -370,7 +370,7 @@ void ContentFeatures::reset() groups["dig_immediate"] = 2; drawtype = NDT_NORMAL; mesh.clear(); -#ifndef SERVER +#if CHECK_CLIENT_BUILD() for (auto &i : mesh_ptr) i = NULL; minimap_color = video::SColor(0, 0, 0, 0); @@ -686,7 +686,7 @@ void ContentFeatures::deSerialize(std::istream &is, u16 protocol_version) } catch (SerializationError &e) {}; } -#ifndef SERVER +#if CHECK_CLIENT_BUILD() static void fillTileAttribs(ITextureSource *tsrc, TileLayer *layer, const TileSpec &tile, const TileDef &tiledef, video::SColor color, u8 material_type, u32 shader_id, bool backface_culling, @@ -1026,7 +1026,7 @@ NodeDefManager::NodeDefManager() NodeDefManager::~NodeDefManager() { -#ifndef SERVER +#if CHECK_CLIENT_BUILD() for (ContentFeatures &f : m_content_features) { for (auto &j : f.mesh_ptr) { if (j) @@ -1479,7 +1479,7 @@ void NodeDefManager::applyTextureOverrides(const std::vector &o void NodeDefManager::updateTextures(IGameDef *gamedef, void *progress_callback_args) { -#ifndef SERVER +#if CHECK_CLIENT_BUILD() infostream << "NodeDefManager::updateTextures(): Updating " "textures in node definitions" << std::endl; diff --git a/src/nodedef.h b/src/nodedef.h index de713a1ad..ac583dfd3 100644 --- a/src/nodedef.h +++ b/src/nodedef.h @@ -25,7 +25,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include "mapnode.h" #include "nameidmapping.h" -#ifndef SERVER +#if CHECK_CLIENT_BUILD() #include "client/tile.h" #include class Client; @@ -315,7 +315,7 @@ struct ContentFeatures /* Cached stuff */ -#ifndef SERVER +#if CHECK_CLIENT_BUILD() // 0 1 2 3 4 5 // up down right left back front TileSpec tiles[6]; @@ -351,7 +351,7 @@ struct ContentFeatures enum NodeDrawType drawtype; std::string mesh; -#ifndef SERVER +#if CHECK_CLIENT_BUILD() scene::IMesh *mesh_ptr[24]; video::SColor minimap_color; #endif @@ -530,7 +530,7 @@ struct ContentFeatures return itemgroup_get(groups, group); } -#ifndef SERVER +#if CHECK_CLIENT_BUILD() void updateTextures(ITextureSource *tsrc, IShaderSource *shdsrc, scene::IMeshManipulator *meshmanip, Client *client, const TextureSettings &tsettings); #endif diff --git a/src/player.cpp b/src/player.cpp index 7361549e0..d784b0c12 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -209,7 +209,7 @@ void PlayerControl::setMovementFromKeys() movement_direction = std::atan2(x, y); } -#ifndef SERVER +#if CHECK_CLIENT_BUILD() u32 PlayerControl::getKeysPressed() const { diff --git a/src/player.h b/src/player.h index c729f98a0..d2687a099 100644 --- a/src/player.h +++ b/src/player.h @@ -91,7 +91,7 @@ struct PlayerControl // joystick input. void setMovementFromKeys(); -#ifndef SERVER +#if CHECK_CLIENT_BUILD() // For client use u32 getKeysPressed() const; inline bool isMoving() const { return movement_speed > 0.001f; } diff --git a/src/porting.cpp b/src/porting.cpp index f6409c56c..6b7952836 100644 --- a/src/porting.cpp +++ b/src/porting.cpp @@ -80,7 +80,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include -#if !defined(SERVER) && defined(_WIN32) +#if CHECK_CLIENT_BUILD() && defined(_WIN32) // On Windows export some driver-specific variables to encourage Minetest to be // executed on the discrete GPU in case of systems with two. Portability is fun. extern "C" { diff --git a/src/porting_android.cpp b/src/porting_android.cpp index 760feedfe..142aeb652 100644 --- a/src/porting_android.cpp +++ b/src/porting_android.cpp @@ -249,7 +249,6 @@ int getInputDialogSelection() return jnienv->CallIntMethod(activity, dialogvalue); } -#ifndef SERVER float getDisplayDensity() { static bool firstrun = true; @@ -325,5 +324,4 @@ bool hasPhysicalKeyboardAndroid() return result; } -#endif // ndef SERVER } diff --git a/src/porting_android.h b/src/porting_android.h index 8b015553b..efc1a19c2 100644 --- a/src/porting_android.h +++ b/src/porting_android.h @@ -97,9 +97,7 @@ int getInputDialogSelection(); bool hasPhysicalKeyboardAndroid(); -#ifndef SERVER float getDisplayDensity(); v2u32 getDisplaySize(); -#endif } diff --git a/src/script/common/c_content.cpp b/src/script/common/c_content.cpp index 65525eed5..1016f373e 100644 --- a/src/script/common/c_content.cpp +++ b/src/script/common/c_content.cpp @@ -998,7 +998,7 @@ void push_content_features(lua_State *L, const ContentFeatures &c) lua_pushstring(L, c.mesh.c_str()); lua_setfield(L, -2, "mesh"); } -#ifndef SERVER +#if CHECK_CLIENT_BUILD() push_ARGB8(L, c.minimap_color); // I know this is not set-able w/ register_node, lua_setfield(L, -2, "minimap_color"); // but the people need to know! #endif diff --git a/src/script/cpp_api/s_base.cpp b/src/script/cpp_api/s_base.cpp index cd74b7cfd..0c287be67 100644 --- a/src/script/cpp_api/s_base.cpp +++ b/src/script/cpp_api/s_base.cpp @@ -28,7 +28,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "porting.h" #include "util/string.h" #include "server.h" -#ifndef SERVER +#if CHECK_CLIENT_BUILD() #include "client/client.h" #endif @@ -185,7 +185,7 @@ int ScriptApiBase::luaPanic(lua_State *L) return 0; } -#ifndef SERVER +#if CHECK_CLIENT_BUILD() void ScriptApiBase::clientOpenLibs(lua_State *L) { static const std::vector> m_libs = { @@ -305,7 +305,7 @@ void ScriptApiBase::loadScript(const std::string &script_path) lua_pop(L, 1); // Pop error handler } -#ifndef SERVER +#if CHECK_CLIENT_BUILD() void ScriptApiBase::loadModFromMemory(const std::string &mod_name) { ModNameStorer mod_name_storer(getStack(), mod_name); @@ -351,7 +351,7 @@ void ScriptApiBase::loadModFromMemory(const std::string &mod_name) void ScriptApiBase::runCallbacksRaw(int nargs, RunCallbacksMode mode, const char *fxn) { -#ifndef SERVER +#if CHECK_CLIENT_BUILD() // Hard fail for bad guarded callbacks // Only run callbacks when the scripting enviroment is loaded FATAL_ERROR_IF(m_type == ScriptingType::Client && @@ -565,7 +565,7 @@ Server* ScriptApiBase::getServer() return dynamic_cast(m_gamedef); } -#ifndef SERVER +#if CHECK_CLIENT_BUILD() Client* ScriptApiBase::getClient() { return dynamic_cast(m_gamedef); diff --git a/src/script/cpp_api/s_base.h b/src/script/cpp_api/s_base.h index ac74c2e68..d232edc64 100644 --- a/src/script/cpp_api/s_base.h +++ b/src/script/cpp_api/s_base.h @@ -66,7 +66,7 @@ enum class ScriptingType: u8 { }; class Server; -#ifndef SERVER +#if CHECK_CLIENT_BUILD() class Client; #endif class EmergeThread; @@ -91,7 +91,7 @@ public: void loadMod(const std::string &script_path, const std::string &mod_name); void loadScript(const std::string &script_path); -#ifndef SERVER +#if CHECK_CLIENT_BUILD() void loadModFromMemory(const std::string &mod_name); #endif @@ -106,7 +106,7 @@ public: IGameDef *getGameDef() { return m_gamedef; } Server* getServer(); -#ifndef SERVER +#if CHECK_CLIENT_BUILD() Client* getClient(); #endif @@ -128,7 +128,7 @@ public: // returns "" on error static std::string getCurrentModName(lua_State *L); -#ifdef SERVER +#if !CHECK_CLIENT_BUILD() inline void clientOpenLibs(lua_State *L) { assert(false); } #else void clientOpenLibs(lua_State *L); @@ -172,7 +172,7 @@ protected: Environment* getEnv() { return m_environment; } void setEnv(Environment* env) { m_environment = env; } -#ifndef SERVER +#if CHECK_CLIENT_BUILD() GUIEngine* getGuiEngine() { return m_guiengine; } void setGuiEngine(GUIEngine* guiengine) { m_guiengine = guiengine; } #endif @@ -199,7 +199,7 @@ private: IGameDef *m_gamedef = nullptr; Environment *m_environment = nullptr; -#ifndef SERVER +#if CHECK_CLIENT_BUILD() GUIEngine *m_guiengine = nullptr; #endif EmergeThread *m_emerge = nullptr; diff --git a/src/script/cpp_api/s_security.cpp b/src/script/cpp_api/s_security.cpp index 9a4b0763b..11db1c0ef 100644 --- a/src/script/cpp_api/s_security.cpp +++ b/src/script/cpp_api/s_security.cpp @@ -22,7 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "filesys.h" #include "porting.h" #include "server.h" -#ifndef SERVER +#if CHECK_CLIENT_BUILD() #include "client/client.h" #endif #include "settings.h" @@ -423,7 +423,7 @@ void ScriptApiSecurity::setLuaEnv(lua_State *L, int thread) bool ScriptApiSecurity::isSecure(lua_State *L) { -#ifndef SERVER +#if CHECK_CLIENT_BUILD() auto script = ModApiBase::getScriptApiBase(L); // CSM keeps no globals backup but is always secure if (script->getType() == ScriptingType::Client) @@ -743,7 +743,7 @@ int ScriptApiSecurity::sl_g_load(lua_State *L) int ScriptApiSecurity::sl_g_loadfile(lua_State *L) { -#ifndef SERVER +#if CHECK_CLIENT_BUILD() ScriptApiBase *script = ModApiBase::getScriptApiBase(L); // Client implementation diff --git a/src/script/lua_api/l_base.cpp b/src/script/lua_api/l_base.cpp index 962b262a1..162f7d9f9 100644 --- a/src/script/lua_api/l_base.cpp +++ b/src/script/lua_api/l_base.cpp @@ -51,7 +51,7 @@ ServerInventoryManager *ModApiBase::getServerInventoryMgr(lua_State *L) return getScriptApiBase(L)->getServer()->getInventoryMgr(); } -#ifndef SERVER +#if CHECK_CLIENT_BUILD() Client *ModApiBase::getClient(lua_State *L) { return getScriptApiBase(L)->getClient(); @@ -68,7 +68,7 @@ Environment *ModApiBase::getEnv(lua_State *L) return getScriptApiBase(L)->getEnv(); } -#ifndef SERVER +#if CHECK_CLIENT_BUILD() GUIEngine *ModApiBase::getGuiEngine(lua_State *L) { return getScriptApiBase(L)->getGuiEngine(); diff --git a/src/script/lua_api/l_base.h b/src/script/lua_api/l_base.h index 37132426a..ded9db371 100644 --- a/src/script/lua_api/l_base.h +++ b/src/script/lua_api/l_base.h @@ -30,7 +30,7 @@ extern "C" { #include } -#ifndef SERVER +#if CHECK_CLIENT_BUILD() class Client; class GUIEngine; #endif @@ -45,7 +45,7 @@ public: static ScriptApiBase* getScriptApiBase(lua_State *L); static Server* getServer(lua_State *L); static ServerInventoryManager *getServerInventoryMgr(lua_State *L); - #ifndef SERVER + #if CHECK_CLIENT_BUILD() static Client* getClient(lua_State *L); static GUIEngine* getGuiEngine(lua_State *L); #endif // !SERVER diff --git a/src/script/lua_api/l_env.cpp b/src/script/lua_api/l_env.cpp index 726300b07..7e8b44da9 100644 --- a/src/script/lua_api/l_env.cpp +++ b/src/script/lua_api/l_env.cpp @@ -43,7 +43,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "server/player_sao.h" #include "util/string.h" #include "translation.h" -#ifndef SERVER +#if CHECK_CLIENT_BUILD() #include "client/client.h" #endif @@ -71,7 +71,7 @@ int LuaRaycast::l_next(lua_State *L) ServerEnvironment *senv = dynamic_cast(env); bool csm = false; -#ifndef SERVER +#if CHECK_CLIENT_BUILD() csm = getClient(L) != nullptr; #endif @@ -847,7 +847,7 @@ int ModApiEnv::l_find_node_near(lua_State *L) int start_radius = (lua_isboolean(L, 4) && readParam(L, 4)) ? 0 : 1; -#ifndef SERVER +#if CHECK_CLIENT_BUILD() // Client API limitations if (Client *client = getClient(L)) radius = client->CSMClampRadius(pos, radius); @@ -959,7 +959,7 @@ int ModApiEnv::l_find_nodes_in_area(lua_State *L) const NodeDefManager *ndef = env->getGameDef()->ndef(); Map &map = env->getMap(); -#ifndef SERVER +#if CHECK_CLIENT_BUILD() if (Client *client = getClient(L)) { minp = client->CSMClampPos(minp); maxp = client->CSMClampPos(maxp); @@ -1021,7 +1021,7 @@ int ModApiEnv::l_find_nodes_in_area_under_air(lua_State *L) const NodeDefManager *ndef = env->getGameDef()->ndef(); Map &map = env->getMap(); -#ifndef SERVER +#if CHECK_CLIENT_BUILD() if (Client *client = getClient(L)) { minp = client->CSMClampPos(minp); maxp = client->CSMClampPos(maxp); diff --git a/src/script/lua_api/l_http.cpp b/src/script/lua_api/l_http.cpp index 57f632291..ea965c921 100644 --- a/src/script/lua_api/l_http.cpp +++ b/src/script/lua_api/l_http.cpp @@ -222,7 +222,7 @@ void ModApiHttp::Initialize(lua_State *L, int top) #if USE_CURL bool isMainmenu = false; -#ifndef SERVER +#if CHECK_CLIENT_BUILD() isMainmenu = ModApiBase::getGuiEngine(L) != nullptr; #endif diff --git a/src/script/lua_api/l_internal.h b/src/script/lua_api/l_internal.h index de73ff42a..fb20c061a 100644 --- a/src/script/lua_api/l_internal.h +++ b/src/script/lua_api/l_internal.h @@ -47,7 +47,7 @@ with this program; if not, write to the Free Software Foundation, Inc., /* In debug mode ensure no code tries to retrieve the server env when it isn't * actually available (in CSM) */ -#if !defined(SERVER) && !defined(NDEBUG) +#if CHECK_CLIENT_BUILD() && !defined(NDEBUG) #define DEBUG_ASSERT_NO_CLIENTAPI \ FATAL_ERROR_IF(getClient(L) != nullptr, "Tried " \ "to retrieve ServerEnvironment on client") diff --git a/src/script/lua_api/l_settings.cpp b/src/script/lua_api/l_settings.cpp index ee46c3fdd..cde337b1a 100644 --- a/src/script/lua_api/l_settings.cpp +++ b/src/script/lua_api/l_settings.cpp @@ -46,7 +46,7 @@ static inline int checkSettingSecurity(lua_State* L, const std::string &name) throw LuaError("Attempted to set secure setting."); bool is_mainmenu = false; -#ifndef SERVER +#if CHECK_CLIENT_BUILD() is_mainmenu = ModApiBase::getGuiEngine(L) != nullptr; #endif if (!is_mainmenu && (name == "mg_name" || name == "mg_flags")) { diff --git a/src/translation.cpp b/src/translation.cpp index 728789acc..069ab3441 100644 --- a/src/translation.cpp +++ b/src/translation.cpp @@ -25,7 +25,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include -#ifndef SERVER +#if CHECK_CLIENT_BUILD() // Client translations static Translations client_translations; Translations *g_client_translations = &client_translations; diff --git a/src/translation.h b/src/translation.h index 972cdafef..3471f5789 100644 --- a/src/translation.h +++ b/src/translation.h @@ -25,9 +25,10 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include #include +#include "config.h" class Translations; -#ifndef SERVER +#if IS_CLIENT_BUILD extern Translations *g_client_translations; #endif diff --git a/src/util/string.cpp b/src/util/string.cpp index b05d993a5..dc06681dc 100644 --- a/src/util/string.cpp +++ b/src/util/string.cpp @@ -935,7 +935,7 @@ std::wstring translate_string(std::wstring_view s, Translations *translations) // Translate string client side std::wstring translate_string(std::wstring_view s) { -#ifdef SERVER +#if !CHECK_CLIENT_BUILD() return translate_string(s, nullptr); #else return translate_string(s, g_client_translations); diff --git a/src/util/string.h b/src/util/string.h index 50e208966..90f0417ab 100644 --- a/src/util/string.h +++ b/src/util/string.h @@ -20,7 +20,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #pragma once #include "irrlichttypes_bloated.h" -#ifndef SERVER +#include "config.h" // IS_CLIENT_BUILD +#if IS_CLIENT_BUILD #include "irrString.h" #endif #include @@ -755,7 +756,7 @@ inline std::string str_join(const std::vector &list, return oss.str(); } -#ifndef SERVER +#if IS_CLIENT_BUILD /** * Create a UTF8 std::string from an irr::core::stringw. */ diff --git a/src/version.cpp b/src/version.cpp index 46c9d1520..8af1bb6d7 100644 --- a/src/version.cpp +++ b/src/version.cpp @@ -37,7 +37,7 @@ const char *g_build_info = "BUILD_TYPE=" BUILD_TYPE "\n" "RUN_IN_PLACE=" STR(RUN_IN_PLACE) "\n" "USE_CURL=" STR(USE_CURL) "\n" -#ifndef SERVER +#if CHECK_CLIENT_BUILD() "USE_GETTEXT=" STR(USE_GETTEXT) "\n" "USE_SOUND=" STR(USE_SOUND) "\n" #endif From a18355e7e8b4a60a1e30712268a5edfc20995f2c Mon Sep 17 00:00:00 2001 From: sfan5 Date: Fri, 6 Sep 2024 17:12:33 +0200 Subject: [PATCH 024/178] Introduce object target for shared sources --- src/CMakeLists.txt | 138 +++++++++++++++++++++-------------- src/server/CMakeLists.txt | 2 +- src/threading/CMakeLists.txt | 2 +- 3 files changed, 86 insertions(+), 56 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 153a45dae..2eaeed2d2 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -379,87 +379,90 @@ add_custom_target(GenerateVersion add_subdirectory(threading) add_subdirectory(content) add_subdirectory(database) -add_subdirectory(gui) add_subdirectory(mapgen) add_subdirectory(network) add_subdirectory(script) -add_subdirectory(unittest) -add_subdirectory(benchmark) add_subdirectory(util) -add_subdirectory(irrlicht_changes) add_subdirectory(server) -set(common_SRCS - ${database_SRCS} - ${mapgen_SRCS} - ${server_SRCS} - ${content_SRCS} +# 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 +# a compiler error and you need to instead add it to client_SRCS or common_SRCS. +set(independent_SRCS chat.cpp - clientdynamicinfo.cpp - collision.cpp - content_mapnode.cpp - content_nodemeta.cpp convert_json.cpp - craftdef.cpp - debug.cpp - defaultsettings.cpp - emerge.cpp - environment.cpp face_position_cache.cpp - filesys.cpp - gettext.cpp gettext_plural_form.cpp httpfetch.cpp hud.cpp - inventory.cpp - inventorymanager.cpp - itemdef.cpp itemstackmetadata.cpp - light.cpp lighting.cpp log.cpp - main.cpp - map.cpp - map_settings_manager.cpp - mapblock.cpp - mapnode.cpp - mapsector.cpp metadata.cpp modchannels.cpp nameidmapping.cpp - nodedef.cpp - nodemetadata.cpp nodetimer.cpp noise.cpp objdef.cpp object_properties.cpp particles.cpp - pathfinder.cpp - player.cpp - porting.cpp profiler.cpp - raycast.cpp - reflowscan.cpp - remoteplayer.cpp - rollback_interface.cpp serialization.cpp - server.cpp - serverenvironment.cpp - servermap.cpp - settings.cpp staticobject.cpp terminal_chat_console.cpp texture_override.cpp tileanimation.cpp + ${threading_SRCS} +) + +# /!\ Consider carefully before adding files here /!\ +set(common_SRCS + clientdynamicinfo.cpp + collision.cpp + content_mapnode.cpp + content_nodemeta.cpp + craftdef.cpp + debug.cpp + defaultsettings.cpp + emerge.cpp + environment.cpp + filesys.cpp + gettext.cpp + inventory.cpp + inventorymanager.cpp + itemdef.cpp + light.cpp + main.cpp + map_settings_manager.cpp + map.cpp + mapblock.cpp + mapnode.cpp + mapsector.cpp + nodedef.cpp + nodemetadata.cpp + pathfinder.cpp + player.cpp + porting.cpp + raycast.cpp + reflowscan.cpp + remoteplayer.cpp + rollback_interface.cpp + server.cpp + serverenvironment.cpp + servermap.cpp + settings.cpp tool.cpp translation.cpp version.cpp voxel.cpp voxelalgorithms.cpp - hud.cpp ${common_network_SRCS} - ${JTHREAD_SRCS} ${common_SCRIPT_SRCS} + ${common_server_SRCS} + ${content_SRCS} + ${database_SRCS} + ${mapgen_SRCS} ${UTIL_SRCS} ) @@ -468,10 +471,12 @@ if(ANDROID) endif() if(BUILD_UNITTESTS) + add_subdirectory(unittest) set(common_SRCS ${common_SRCS} ${UNITTEST_SRCS}) endif() if(BUILD_BENCHMARKS) + add_subdirectory(benchmark) set(common_SRCS ${common_SRCS} ${BENCHMARK_SRCS}) endif() @@ -503,6 +508,8 @@ endif() # Client sources if (BUILD_CLIENT) add_subdirectory(client) + add_subdirectory(gui) + add_subdirectory(irrlicht_changes) endif(BUILD_CLIENT) set(client_SRCS @@ -522,13 +529,11 @@ if(BUILD_BENCHMARKS) set(client_SRCS ${client_SRCS} ${BENCHMARK_CLIENT_SRCS}) endif() -list(SORT client_SRCS) - # Server sources +# (nothing here because a client always comes with a server) set(server_SRCS ${common_SRCS} ) -list(SORT server_SRCS) # Avoid source_group on broken CMake version. # see issue #7074 #7075 @@ -577,13 +582,32 @@ if(NOT CMAKE_CROSSCOMPILING) set(EXECUTABLE_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/bin") endif() +# shared object target +add_library(EngineCommon OBJECT + ${independent_SRCS} +) +add_dependencies(EngineCommon GenerateVersion) +get_target_property( + IRRLICHT_INCLUDES IrrlichtMt::IrrlichtMt INTERFACE_INCLUDE_DIRECTORIES) +target_include_directories(EngineCommon PRIVATE ${IRRLICHT_INCLUDES}) +if(PRECOMPILE_HEADERS) + target_precompile_headers(EngineCommon PRIVATE ${PRECOMPILED_HEADERS_LIST}) +endif() + if(BUILD_CLIENT) + # client target if(ANDROID) - add_library(${PROJECT_NAME} SHARED ${client_SRCS}) + add_library(${PROJECT_NAME} SHARED) else() - add_executable(${PROJECT_NAME} ${client_SRCS} ${extra_windows_SRCS}) + add_executable(${PROJECT_NAME}) endif() - add_dependencies(${PROJECT_NAME} GenerateVersion) + list(SORT client_SRCS) + target_sources(${PROJECT_NAME} PRIVATE + $ + ${client_SRCS} + ${extra_windows_SRCS} + ) + target_link_libraries( ${PROJECT_NAME} ${ZLIB_LIBRARIES} @@ -661,12 +685,18 @@ endif(BUILD_CLIENT) if(BUILD_SERVER) - add_executable(${PROJECT_NAME}server ${server_SRCS} ${extra_windows_SRCS}) - add_dependencies(${PROJECT_NAME}server GenerateVersion) + # server target + add_executable(${PROJECT_NAME}server) + list(SORT server_SRCS) + target_sources(${PROJECT_NAME}server PRIVATE + $ + ${server_SRCS} + ${extra_windows_SRCS} + ) + # don't link the irrlicht library get_target_property( IRRLICHT_INCLUDES IrrlichtMt::IrrlichtMt INTERFACE_INCLUDE_DIRECTORIES) - # Doesn't work without PRIVATE/PUBLIC/INTERFACE mode specified. target_include_directories(${PROJECT_NAME}server PRIVATE ${IRRLICHT_INCLUDES}) target_link_libraries( ${PROJECT_NAME}server diff --git a/src/server/CMakeLists.txt b/src/server/CMakeLists.txt index d4afbc55b..3588451c0 100644 --- a/src/server/CMakeLists.txt +++ b/src/server/CMakeLists.txt @@ -1,4 +1,4 @@ -set(server_SRCS +set(common_server_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/activeobjectmgr.cpp ${CMAKE_CURRENT_SOURCE_DIR}/ban.cpp ${CMAKE_CURRENT_SOURCE_DIR}/clientiface.cpp diff --git a/src/threading/CMakeLists.txt b/src/threading/CMakeLists.txt index 8f86158be..6771b715f 100644 --- a/src/threading/CMakeLists.txt +++ b/src/threading/CMakeLists.txt @@ -1,4 +1,4 @@ -set(JTHREAD_SRCS +set(threading_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/event.cpp ${CMAKE_CURRENT_SOURCE_DIR}/thread.cpp ${CMAKE_CURRENT_SOURCE_DIR}/semaphore.cpp From 4e9aa7dc77a5039a5696a82ff899a51e1936cca0 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Mon, 9 Sep 2024 20:39:35 +0200 Subject: [PATCH 025/178] Make itemdef.h safe to include anywhere --- src/CMakeLists.txt | 4 ++-- src/client/client.cpp | 1 + src/client/minimap.cpp | 1 + src/client/particles.cpp | 1 + src/client/renderingengine.cpp | 1 + src/client/sky.cpp | 1 + src/client/wieldmesh.cpp | 1 + src/gui/guiHyperText.cpp | 1 + src/gui/touchcontrols.h | 2 +- src/itemdef.cpp | 5 ++++- src/itemdef.h | 33 ++++++++++++++++++++------------- src/nodedef.cpp | 1 + 12 files changed, 35 insertions(+), 17 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2eaeed2d2..93dafa2cd 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -396,12 +396,14 @@ set(independent_SRCS gettext_plural_form.cpp httpfetch.cpp hud.cpp + inventory.cpp itemstackmetadata.cpp lighting.cpp log.cpp metadata.cpp modchannels.cpp nameidmapping.cpp + nodemetadata.cpp nodetimer.cpp noise.cpp objdef.cpp @@ -429,7 +431,6 @@ set(common_SRCS environment.cpp filesys.cpp gettext.cpp - inventory.cpp inventorymanager.cpp itemdef.cpp light.cpp @@ -440,7 +441,6 @@ set(common_SRCS mapnode.cpp mapsector.cpp nodedef.cpp - nodemetadata.cpp pathfinder.cpp player.cpp porting.cpp diff --git a/src/client/client.cpp b/src/client/client.cpp index 7feb2212d..3da5f777e 100644 --- a/src/client/client.cpp +++ b/src/client/client.cpp @@ -33,6 +33,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "client/renderingengine.h" #include "client/sound.h" #include "client/texturepaths.h" +#include "client/texturesource.h" #include "client/mesh_generator_thread.h" #include "client/particles.h" #include "client/localplayer.h" diff --git a/src/client/minimap.cpp b/src/client/minimap.cpp index 13dca5fe9..f959d00be 100644 --- a/src/client/minimap.cpp +++ b/src/client/minimap.cpp @@ -25,6 +25,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "shader.h" #include "mapblock.h" #include "client/renderingengine.h" +#include "client/texturesource.h" #include "gettext.h" //// diff --git a/src/client/particles.cpp b/src/client/particles.cpp index 3a2dace12..e197b4f8a 100644 --- a/src/client/particles.cpp +++ b/src/client/particles.cpp @@ -25,6 +25,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "client/content_cao.h" #include "client/clientevent.h" #include "client/renderingengine.h" +#include "client/texturesource.h" #include "util/numeric.h" #include "light.h" #include "localplayer.h" diff --git a/src/client/renderingengine.cpp b/src/client/renderingengine.cpp index f0d2abddb..2f714e020 100644 --- a/src/client/renderingengine.cpp +++ b/src/client/renderingengine.cpp @@ -27,6 +27,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "guiscalingfilter.h" #include "localplayer.h" #include "client/hud.h" +#include "client/texturesource.h" #include "camera.h" #include "minimap.h" #include "clientmap.h" diff --git a/src/client/sky.cpp b/src/client/sky.cpp index 27640bc28..054c1ace2 100644 --- a/src/client/sky.cpp +++ b/src/client/sky.cpp @@ -31,6 +31,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "profiler.h" #include "util/numeric.h" #include "client/renderingengine.h" +#include "client/texturesource.h" #include "settings.h" #include "camera.h" // CameraModes diff --git a/src/client/wieldmesh.cpp b/src/client/wieldmesh.cpp index e66214ae6..81ca99b5f 100644 --- a/src/client/wieldmesh.cpp +++ b/src/client/wieldmesh.cpp @@ -29,6 +29,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "mapblock_mesh.h" #include "client/meshgen/collector.h" #include "client/tile.h" +#include "client/texturesource.h" #include "log.h" #include "util/numeric.h" #include diff --git a/src/gui/guiHyperText.cpp b/src/gui/guiHyperText.cpp index 44019ebe2..393e06cc1 100644 --- a/src/gui/guiHyperText.cpp +++ b/src/gui/guiHyperText.cpp @@ -24,6 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "IVideoDriver.h" #include "client/client.h" #include "client/renderingengine.h" +#include "client/texturesource.h" #include "hud.h" #include "inventory.h" #include "util/string.h" diff --git a/src/gui/touchcontrols.h b/src/gui/touchcontrols.h index 98ec806bd..2d3d4fbb0 100644 --- a/src/gui/touchcontrols.h +++ b/src/gui/touchcontrols.h @@ -34,13 +34,13 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "itemdef.h" #include "client/game.h" #include "util/basic_macros.h" +#include "client/texturesource.h" namespace irr { class IrrlichtDevice; } -using namespace irr; using namespace irr::core; using namespace irr::gui; diff --git a/src/itemdef.cpp b/src/itemdef.cpp index 0bb90929e..773cadaec 100644 --- a/src/itemdef.cpp +++ b/src/itemdef.cpp @@ -28,6 +28,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "client/mesh.h" #include "client/wieldmesh.h" #include "client/client.h" +#include "client/texturesource.h" #endif #include "log.h" #include "settings.h" @@ -448,8 +449,9 @@ public: // Get the definition return m_item_definitions.find(name) != m_item_definitions.cend(); } + #if CHECK_CLIENT_BUILD() -public: +protected: ClientCached* createClientCachedDirect(const ItemStack &item, Client *client) const { // This is not thread-safe @@ -490,6 +492,7 @@ public: return ptr; } +public: // Get item inventory texture virtual video::ITexture* getInventoryTexture(const ItemStack &item, Client *client) const diff --git a/src/itemdef.h b/src/itemdef.h index 1cfd475e5..f0d780173 100644 --- a/src/itemdef.h +++ b/src/itemdef.h @@ -35,11 +35,11 @@ with this program; if not, write to the Free Software Foundation, Inc., class IGameDef; class Client; struct ToolCapabilities; -#if CHECK_CLIENT_BUILD() -#include "client/texturesource.h" struct ItemMesh; struct ItemStack; -#endif +typedef std::vector Palette; // copied from src/client/texturesource.h +namespace irr::video { class ITexture; } +using namespace irr; /* Base item definition @@ -155,25 +155,32 @@ public: virtual void getAll(std::set &result) const=0; // Check if item is known virtual bool isKnown(const std::string &name) const=0; -#if CHECK_CLIENT_BUILD() + + virtual void serialize(std::ostream &os, u16 protocol_version)=0; + + /* Client-specific methods */ + // TODO: should be moved elsewhere in the future + // Get item inventory texture - virtual video::ITexture* getInventoryTexture(const ItemStack &item, Client *client) const=0; + virtual video::ITexture* getInventoryTexture(const ItemStack &item, Client *client) const + { return nullptr; } /** * Get wield mesh - * - * Returns nullptr if there is an inventory image + * @returns nullptr if there is an inventory image */ - virtual ItemMesh* getWieldMesh(const ItemStack &item, Client *client) const = 0; + virtual ItemMesh* getWieldMesh(const ItemStack &item, Client *client) const + { return nullptr; } + // Get item palette - virtual Palette* getPalette(const ItemStack &item, Client *client) const = 0; + virtual Palette* getPalette(const ItemStack &item, Client *client) const + { return nullptr; } + // Returns the base color of an item stack: the color of all // tiles that do not define their own color. virtual video::SColor getItemstackColor(const ItemStack &stack, - Client *client) const = 0; -#endif - - virtual void serialize(std::ostream &os, u16 protocol_version)=0; + Client *client) const + { return video::SColor(0); } }; class IWritableItemDefManager : public IItemDefManager diff --git a/src/nodedef.cpp b/src/nodedef.cpp index 2b3b3b1fb..06a74ccef 100644 --- a/src/nodedef.cpp +++ b/src/nodedef.cpp @@ -25,6 +25,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "client/shader.h" #include "client/client.h" #include "client/renderingengine.h" +#include "client/texturesource.h" #include "client/tile.h" #include #endif From b61c83a19d2975fc5b542167dc6c43bdae4eeaec Mon Sep 17 00:00:00 2001 From: sfan5 Date: Mon, 9 Sep 2024 21:34:56 +0200 Subject: [PATCH 026/178] Move some more sources to shared target --- src/CMakeLists.txt | 22 +++++++++++++--------- src/content/subgames.cpp | 19 ++++--------------- src/content/subgames.h | 5 +---- src/network/CMakeLists.txt | 6 +++++- src/player.cpp | 6 ++---- src/player.h | 2 -- src/script/lua_api/l_mainmenu.cpp | 4 +++- src/translation.cpp | 2 ++ src/translation.h | 2 -- src/util/CMakeLists.txt | 2 +- src/util/string.cpp | 5 ----- src/util/string.h | 3 ++- 12 files changed, 33 insertions(+), 45 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 93dafa2cd..2056bdd3d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -391,7 +391,10 @@ add_subdirectory(server) # a compiler error and you need to instead add it to client_SRCS or common_SRCS. set(independent_SRCS chat.cpp + content_nodemeta.cpp convert_json.cpp + craftdef.cpp + debug.cpp face_position_cache.cpp gettext_plural_form.cpp httpfetch.cpp @@ -411,11 +414,17 @@ set(independent_SRCS particles.cpp profiler.cpp serialization.cpp + settings.cpp staticobject.cpp terminal_chat_console.cpp texture_override.cpp tileanimation.cpp + tool.cpp + ${common_network_SRCS} + ${content_SRCS} + ${database_SRCS} ${threading_SRCS} + ${util_SRCS} ) # /!\ Consider carefully before adding files here /!\ @@ -423,9 +432,6 @@ set(common_SRCS clientdynamicinfo.cpp collision.cpp content_mapnode.cpp - content_nodemeta.cpp - craftdef.cpp - debug.cpp defaultsettings.cpp emerge.cpp environment.cpp @@ -451,19 +457,14 @@ set(common_SRCS server.cpp serverenvironment.cpp servermap.cpp - settings.cpp - tool.cpp translation.cpp version.cpp voxel.cpp voxelalgorithms.cpp - ${common_network_SRCS} ${common_SCRIPT_SRCS} ${common_server_SRCS} - ${content_SRCS} - ${database_SRCS} ${mapgen_SRCS} - ${UTIL_SRCS} + ${server_network_SRCS} ) if(ANDROID) @@ -587,6 +588,9 @@ add_library(EngineCommon OBJECT ${independent_SRCS} ) add_dependencies(EngineCommon GenerateVersion) +target_link_libraries(EngineCommon + sha256 +) get_target_property( IRRLICHT_INCLUDES IrrlichtMt::IrrlichtMt INTERFACE_INCLUDE_DIRECTORIES) target_include_directories(EngineCommon PRIVATE ${IRRLICHT_INCLUDES}) diff --git a/src/content/subgames.cpp b/src/content/subgames.cpp index f522ec5c5..f48633c20 100644 --- a/src/content/subgames.cpp +++ b/src/content/subgames.cpp @@ -28,10 +28,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "map_settings_manager.h" #include "util/string.h" -#if CHECK_CLIENT_BUILD() -#include "client/texturepaths.h" -#endif - // The maximum number of identical world names allowed #define MAX_WORLD_NAMES 100 @@ -96,8 +92,7 @@ std::string getSubgamePathEnv() static SubgameSpec getSubgameSpec(const std::string &game_id, const std::string &game_path, - const std::unordered_map &mods_paths, - const std::string &menuicon_path) + const std::unordered_map &mods_paths) { const auto gamemods_path = game_path + DIR_DELIM + "mods"; // Get meta @@ -130,7 +125,7 @@ static SubgameSpec getSubgameSpec(const std::string &game_id, last_mod = conf.get("last_mod"); SubgameSpec spec(game_id, game_path, gamemods_path, mods_paths, game_title, - menuicon_path, game_author, game_release, first_mod, last_mod); + game_author, game_release, first_mod, last_mod); if (conf.exists("name") && !conf.exists("title")) spec.deprecation_msgs.push_back("\"name\" setting in game.conf is deprecated, please use \"title\" instead"); @@ -191,13 +186,7 @@ SubgameSpec findSubgame(const std::string &id) mods_paths[fs::AbsolutePath(mod_path)] = mod_path; } - std::string menuicon_path; -#if CHECK_CLIENT_BUILD() - menuicon_path = getImagePath( - game_path + DIR_DELIM + "menu" + DIR_DELIM + "icon.png"); -#endif - - return getSubgameSpec(id, game_path, mods_paths, menuicon_path); + return getSubgameSpec(id, game_path, mods_paths); } SubgameSpec findWorldSubgame(const std::string &world_path) @@ -206,7 +195,7 @@ SubgameSpec findWorldSubgame(const std::string &world_path) // See if world contains an embedded game; if so, use it. std::string world_gamepath = world_path + DIR_DELIM + "game"; if (fs::PathExists(world_gamepath)) - return getSubgameSpec(world_gameid, world_gamepath, {}, ""); + return getSubgameSpec(world_gameid, world_gamepath, {}); return findSubgame(world_gameid); } diff --git a/src/content/subgames.h b/src/content/subgames.h index 17a219669..7cad65066 100644 --- a/src/content/subgames.h +++ b/src/content/subgames.h @@ -41,7 +41,6 @@ struct SubgameSpec * Map from virtual path to mods path */ std::unordered_map addon_mods_paths; - std::string menuicon_path; // For logging purposes std::vector deprecation_msgs; @@ -50,7 +49,6 @@ struct SubgameSpec const std::string &gamemods_path = "", const std::unordered_map &addon_mods_paths = {}, const std::string &title = "", - const std::string &menuicon_path = "", const std::string &author = "", int release = 0, const std::string &first_mod = "", const std::string &last_mod = "") : @@ -60,8 +58,7 @@ struct SubgameSpec last_mod(last_mod), path(path), gamemods_path(gamemods_path), - addon_mods_paths(addon_mods_paths), - menuicon_path(menuicon_path) + addon_mods_paths(addon_mods_paths) { } diff --git a/src/network/CMakeLists.txt b/src/network/CMakeLists.txt index 6291e23af..d9e674304 100644 --- a/src/network/CMakeLists.txt +++ b/src/network/CMakeLists.txt @@ -5,9 +5,13 @@ set(common_network_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/mtp/threads.cpp ${CMAKE_CURRENT_SOURCE_DIR}/networkpacket.cpp ${CMAKE_CURRENT_SOURCE_DIR}/networkprotocol.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/socket.cpp + PARENT_SCOPE +) + +set(server_network_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/serveropcodes.cpp ${CMAKE_CURRENT_SOURCE_DIR}/serverpackethandler.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/socket.cpp PARENT_SCOPE ) diff --git a/src/player.cpp b/src/player.cpp index d784b0c12..5c8151c4a 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -31,7 +31,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #include -bool is_valid_player_name(std::string_view name) { +bool is_valid_player_name(std::string_view name) +{ return !name.empty() && name.size() <= PLAYERNAME_SIZE && string_allowed(name, PLAYERNAME_ALLOWED_CHARS); } @@ -209,8 +210,6 @@ void PlayerControl::setMovementFromKeys() movement_direction = std::atan2(x, y); } -#if CHECK_CLIENT_BUILD() - u32 PlayerControl::getKeysPressed() const { u32 keypress_bits = @@ -254,7 +253,6 @@ u32 PlayerControl::getKeysPressed() const return keypress_bits; } -#endif void PlayerControl::unpackKeysPressed(u32 keypress_bits) { diff --git a/src/player.h b/src/player.h index d2687a099..ea0300aff 100644 --- a/src/player.h +++ b/src/player.h @@ -91,11 +91,9 @@ struct PlayerControl // joystick input. void setMovementFromKeys(); -#if CHECK_CLIENT_BUILD() // For client use u32 getKeysPressed() const; inline bool isMoving() const { return movement_speed > 0.001f; } -#endif // For server use void unpackKeysPressed(u32 keypress_bits); diff --git a/src/script/lua_api/l_mainmenu.cpp b/src/script/lua_api/l_mainmenu.cpp index 20faec9e0..a14944381 100644 --- a/src/script/lua_api/l_mainmenu.cpp +++ b/src/script/lua_api/l_mainmenu.cpp @@ -37,6 +37,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "clientdynamicinfo.h" #include "client/client.h" #include "client/renderingengine.h" +#include "client/texturepaths.h" #include "network/networkprotocol.h" #include "content/mod_configuration.h" #include "threading/mutex_auto_lock.h" @@ -330,8 +331,9 @@ int ModApiMainMenu::l_get_games(lua_State *L) lua_pushinteger(L, game.release); lua_settable(L, top_lvl2); + auto menuicon = getImagePath(game.path + DIR_DELIM "menu" DIR_DELIM "icon.png"); lua_pushstring(L, "menuicon_path"); - lua_pushstring(L, game.menuicon_path.c_str()); + lua_pushstring(L, menuicon.c_str()); lua_settable(L, top_lvl2); lua_pushstring(L, "addon_mods_paths"); diff --git a/src/translation.cpp b/src/translation.cpp index 069ab3441..186dfad1b 100644 --- a/src/translation.cpp +++ b/src/translation.cpp @@ -29,6 +29,8 @@ with this program; if not, write to the Free Software Foundation, Inc., // Client translations static Translations client_translations; Translations *g_client_translations = &client_translations; +#else +Translations *g_client_translations = nullptr; #endif const std::string_view Translations::getFileLanguage(const std::string &filename) diff --git a/src/translation.h b/src/translation.h index 3471f5789..c61ef4fe7 100644 --- a/src/translation.h +++ b/src/translation.h @@ -28,9 +28,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "config.h" class Translations; -#if IS_CLIENT_BUILD extern Translations *g_client_translations; -#endif class Translations { diff --git a/src/util/CMakeLists.txt b/src/util/CMakeLists.txt index 01b932c72..761e51a4a 100644 --- a/src/util/CMakeLists.txt +++ b/src/util/CMakeLists.txt @@ -1,4 +1,4 @@ -set(UTIL_SRCS +set(util_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/areastore.cpp ${CMAKE_CURRENT_SOURCE_DIR}/auth.cpp ${CMAKE_CURRENT_SOURCE_DIR}/colorize.cpp diff --git a/src/util/string.cpp b/src/util/string.cpp index dc06681dc..32355b6e7 100644 --- a/src/util/string.cpp +++ b/src/util/string.cpp @@ -932,14 +932,9 @@ std::wstring translate_string(std::wstring_view s, Translations *translations) return res; } -// Translate string client side std::wstring translate_string(std::wstring_view s) { -#if !CHECK_CLIENT_BUILD() - return translate_string(s, nullptr); -#else return translate_string(s, g_client_translations); -#endif } static const std::array disallowed_dir_names = { diff --git a/src/util/string.h b/src/util/string.h index 90f0417ab..06fcf975b 100644 --- a/src/util/string.h +++ b/src/util/string.h @@ -658,7 +658,8 @@ std::wstring translate_string(std::wstring_view s, Translations *translations); std::wstring translate_string(std::wstring_view s); -inline std::wstring unescape_translate(std::wstring_view s) { +inline std::wstring unescape_translate(std::wstring_view s) +{ return unescape_enriched(translate_string(s)); } From 24704b01d98373b8b2d246ef30b41ee37c402705 Mon Sep 17 00:00:00 2001 From: grorp Date: Wed, 16 Oct 2024 21:35:30 +0200 Subject: [PATCH 027/178] Fix wrong minimum for repeat_place_time in settingtypes.txt rebase mistake from #14542 --- builtin/settingtypes.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builtin/settingtypes.txt b/builtin/settingtypes.txt index f7225ef62..15d0ea69a 100644 --- a/builtin/settingtypes.txt +++ b/builtin/settingtypes.txt @@ -114,7 +114,7 @@ always_fly_fast (Always fly fast) bool true # the place button. # # Requires: keyboard_mouse -repeat_place_time (Place repetition interval) float 0.25 0.15 2.0 +repeat_place_time (Place repetition interval) float 0.25 0.16 2.0 # The minimum time in seconds it takes between digging nodes when holding # the dig button. From 9f43018df2a7d30194dd5e3d9e1c63a3d329a0ff Mon Sep 17 00:00:00 2001 From: grorp Date: Wed, 16 Oct 2024 21:37:00 +0200 Subject: [PATCH 028/178] Better UX when touch events aren't supported by Irrlicht device (#15288) --- builtin/mainmenu/settings/dlg_settings.lua | 10 ++++++---- builtin/settingtypes.txt | 2 ++ irr/include/IrrlichtDevice.h | 5 +++++ irr/src/CIrrDeviceLinux.cpp | 11 +++++++++++ irr/src/CIrrDeviceLinux.h | 3 +++ irr/src/CIrrDeviceSDL.cpp | 6 ++++++ irr/src/CIrrDeviceSDL.h | 3 +++ src/client/game.cpp | 3 +++ src/script/lua_api/l_mainmenu.cpp | 9 +++++++++ src/script/lua_api/l_mainmenu.h | 2 ++ 10 files changed, 50 insertions(+), 4 deletions(-) diff --git a/builtin/mainmenu/settings/dlg_settings.lua b/builtin/mainmenu/settings/dlg_settings.lua index 509a6a420..602d6894f 100644 --- a/builtin/mainmenu/settings/dlg_settings.lua +++ b/builtin/mainmenu/settings/dlg_settings.lua @@ -349,14 +349,16 @@ local function check_requirements(name, requires) local video_driver = core.get_active_driver() local shaders_support = video_driver == "opengl" or video_driver == "opengl3" or video_driver == "ogles2" + local touch_support = core.irrlicht_device_supports_touch() local touch_controls = core.settings:get("touch_controls") local special = { android = PLATFORM == "Android", desktop = PLATFORM ~= "Android", - -- When touch_controls is "auto", we don't which input method will be used, - -- so we show settings for both. - touchscreen = touch_controls == "auto" or core.is_yes(touch_controls), - keyboard_mouse = touch_controls == "auto" or not core.is_yes(touch_controls), + touch_support = touch_support, + -- When touch_controls is "auto", we don't know which input method will + -- be used, so we show settings for both. + touchscreen = touch_support and (touch_controls == "auto" or core.is_yes(touch_controls)), + keyboard_mouse = not touch_support or (touch_controls == "auto" or not core.is_yes(touch_controls)), shaders_support = shaders_support, shaders = core.settings:get_bool("enable_shaders") and shaders_support, opengl = video_driver == "opengl", diff --git a/builtin/settingtypes.txt b/builtin/settingtypes.txt index 15d0ea69a..99bfe9ca9 100644 --- a/builtin/settingtypes.txt +++ b/builtin/settingtypes.txt @@ -155,6 +155,8 @@ invert_hotbar_mouse_wheel (Hotbar: Invert mouse wheel direction) bool false # Enables the touchscreen controls, allowing you to play the game with a touchscreen. # "auto" means that the touchscreen controls will be enabled and disabled # automatically depending on the last used input method. +# +# Requires: touch_support touch_controls (Touchscreen controls) enum auto auto,true,false # Touchscreen sensitivity multiplier. diff --git a/irr/include/IrrlichtDevice.h b/irr/include/IrrlichtDevice.h index 777a23420..edc6ead61 100644 --- a/irr/include/IrrlichtDevice.h +++ b/irr/include/IrrlichtDevice.h @@ -193,6 +193,11 @@ public: /** If this returns false, you should not do any rendering. */ virtual bool isWindowVisible() const { return true; }; + //! Checks if the Irrlicht device supports touch events. + /** Intentionally doesn't check whether a touch input device is available + or similar. */ + virtual bool supportsTouchEvents() const { return false; } + //! Get the current color format of the window /** \return Color format of the window. */ virtual video::ECOLOR_FORMAT getColorFormat() const = 0; diff --git a/irr/src/CIrrDeviceLinux.cpp b/irr/src/CIrrDeviceLinux.cpp index 6ecb499b2..c00f52380 100644 --- a/irr/src/CIrrDeviceLinux.cpp +++ b/irr/src/CIrrDeviceLinux.cpp @@ -1205,6 +1205,17 @@ bool CIrrDeviceLinux::isWindowMaximized() const return WindowMaximized; } +//! Checks if the Irrlicht device supports touch events. +bool CIrrDeviceLinux::supportsTouchEvents() const +{ +#if defined(_IRR_LINUX_X11_XINPUT2_) + return true; +#else + return false; +#endif +} + + //! returns color format of the window. video::ECOLOR_FORMAT CIrrDeviceLinux::getColorFormat() const { diff --git a/irr/src/CIrrDeviceLinux.h b/irr/src/CIrrDeviceLinux.h index 4aac1cf6c..f5ee81c6b 100644 --- a/irr/src/CIrrDeviceLinux.h +++ b/irr/src/CIrrDeviceLinux.h @@ -66,6 +66,9 @@ public: //! returns last state from maximizeWindow() and restoreWindow() bool isWindowMaximized() const override; + //! Checks if the Irrlicht device supports touch events. + bool supportsTouchEvents() const override; + //! returns color format of the window. video::ECOLOR_FORMAT getColorFormat() const override; diff --git a/irr/src/CIrrDeviceSDL.cpp b/irr/src/CIrrDeviceSDL.cpp index 6d1b45886..0db598c74 100644 --- a/irr/src/CIrrDeviceSDL.cpp +++ b/irr/src/CIrrDeviceSDL.cpp @@ -1293,6 +1293,12 @@ bool CIrrDeviceSDL::isWindowVisible() const return !IsInBackground; } +//! Checks if the Irrlicht device supports touch events. +bool CIrrDeviceSDL::supportsTouchEvents() const +{ + return true; +} + //! returns if window is active. if not, nothing need to be drawn bool CIrrDeviceSDL::isWindowActive() const { diff --git a/irr/src/CIrrDeviceSDL.h b/irr/src/CIrrDeviceSDL.h index 7156c19b6..b52422423 100644 --- a/irr/src/CIrrDeviceSDL.h +++ b/irr/src/CIrrDeviceSDL.h @@ -93,6 +93,9 @@ public: //! Checks if the window could possibly be visible. bool isWindowVisible() const override; + //! Checks if the Irrlicht device supports touch events. + bool supportsTouchEvents() const override; + //! Get the position of this window on screen core::position2di getWindowPosition() override; diff --git a/src/client/game.cpp b/src/client/game.cpp index 1a125f492..9619a4a8a 100644 --- a/src/client/game.cpp +++ b/src/client/game.cpp @@ -1576,6 +1576,9 @@ bool Game::createClient(const GameStartData &start_data) bool Game::shouldShowTouchControls() { + if (!device->supportsTouchEvents()) + return false; + const std::string &touch_controls = g_settings->get("touch_controls"); if (touch_controls == "auto") return RenderingEngine::getLastPointerType() == PointerType::Touch; diff --git a/src/script/lua_api/l_mainmenu.cpp b/src/script/lua_api/l_mainmenu.cpp index a14944381..e4b9ddaf5 100644 --- a/src/script/lua_api/l_mainmenu.cpp +++ b/src/script/lua_api/l_mainmenu.cpp @@ -1028,6 +1028,14 @@ int ModApiMainMenu::l_get_active_irrlicht_device(lua_State *L) return 1; } +/******************************************************************************/ +int ModApiMainMenu::l_irrlicht_device_supports_touch(lua_State *L) +{ + lua_pushboolean(L, RenderingEngine::get_raw_device()->supportsTouchEvents()); + return 1; +} + + /******************************************************************************/ int ModApiMainMenu::l_get_min_supp_proto(lua_State *L) { @@ -1160,6 +1168,7 @@ void ModApiMainMenu::Initialize(lua_State *L, int top) API_FCT(get_active_driver); API_FCT(get_active_renderer); API_FCT(get_active_irrlicht_device); + API_FCT(irrlicht_device_supports_touch); API_FCT(get_min_supp_proto); API_FCT(get_max_supp_proto); API_FCT(get_formspec_version); diff --git a/src/script/lua_api/l_mainmenu.h b/src/script/lua_api/l_mainmenu.h index cb3e7f9ca..877aab2e8 100644 --- a/src/script/lua_api/l_mainmenu.h +++ b/src/script/lua_api/l_mainmenu.h @@ -116,6 +116,8 @@ private: static int l_get_active_irrlicht_device(lua_State *L); + static int l_irrlicht_device_supports_touch(lua_State *L); + //filesystem static int l_get_mainmenu_path(lua_State *L); From e3813cf027c9fb6d086db087f13557f86eb4730a Mon Sep 17 00:00:00 2001 From: SmallJoker Date: Sat, 12 Oct 2024 22:51:50 +0200 Subject: [PATCH 029/178] Settings: semi-automatic callback cleanup --- src/client/clientlauncher.cpp | 5 ++-- src/client/clientmap.cpp | 3 +-- src/client/clouds.cpp | 5 +--- src/client/fontengine.cpp | 3 +-- src/client/game.cpp | 47 +++------------------------------- src/client/hud.cpp | 4 +-- src/client/localplayer.cpp | 5 +--- src/client/renderingengine.cpp | 3 +-- src/gui/guiEngine.cpp | 2 +- src/settings.cpp | 23 +++++++++-------- src/settings.h | 3 +-- 11 files changed, 25 insertions(+), 78 deletions(-) diff --git a/src/client/clientlauncher.cpp b/src/client/clientlauncher.cpp index 13b87f2ef..60d4fb6c8 100644 --- a/src/client/clientlauncher.cpp +++ b/src/client/clientlauncher.cpp @@ -71,9 +71,8 @@ static void dump_start_data(const GameStartData &data) ClientLauncher::~ClientLauncher() { delete input; - g_settings->deregisterChangedCallback("dpi_change_notifier", setting_changed_callback, this); - g_settings->deregisterChangedCallback("display_density_factor", setting_changed_callback, this); - g_settings->deregisterChangedCallback("gui_scaling", setting_changed_callback, this); + + g_settings->deregisterAllChangedCallbacks(this); delete g_fontengine; g_fontengine = nullptr; diff --git a/src/client/clientmap.cpp b/src/client/clientmap.cpp index ab826c775..b62268bea 100644 --- a/src/client/clientmap.cpp +++ b/src/client/clientmap.cpp @@ -140,8 +140,7 @@ void ClientMap::onSettingChanged(std::string_view name, bool all) ClientMap::~ClientMap() { - for (const auto &name : ClientMap_settings) - g_settings->deregisterChangedCallback(name, on_settings_changed, this); + g_settings->deregisterAllChangedCallbacks(this); } void ClientMap::updateCamera(v3f pos, v3f dir, f32 fov, v3s16 offset, video::SColor light_color) diff --git a/src/client/clouds.cpp b/src/client/clouds.cpp index 96926f3e0..b18f70c37 100644 --- a/src/client/clouds.cpp +++ b/src/client/clouds.cpp @@ -76,10 +76,7 @@ Clouds::Clouds(scene::ISceneManager* mgr, IShaderSource *ssrc, Clouds::~Clouds() { - g_settings->deregisterChangedCallback("enable_3d_clouds", - &cloud_3d_setting_changed, this); - g_settings->deregisterChangedCallback("soft_clouds", - &cloud_3d_setting_changed, this); + g_settings->deregisterAllChangedCallbacks(this); } void Clouds::OnRegisterSceneNode() diff --git a/src/client/fontengine.cpp b/src/client/fontengine.cpp index 5475e9768..2d00f3cf4 100644 --- a/src/client/fontengine.cpp +++ b/src/client/fontengine.cpp @@ -68,8 +68,7 @@ FontEngine::FontEngine(gui::IGUIEnvironment* env) : /******************************************************************************/ FontEngine::~FontEngine() { - for (auto name : settings) - g_settings->deregisterChangedCallback(name, font_setting_changed, this); + g_settings->deregisterAllChangedCallbacks(this); cleanCache(); } diff --git a/src/client/game.cpp b/src/client/game.cpp index 9619a4a8a..8e01c40da 100644 --- a/src/client/game.cpp +++ b/src/client/game.cpp @@ -451,8 +451,7 @@ public: ~GameGlobalShaderConstantSetter() { - for (auto &name : SETTING_CALLBACKS) - g_settings->deregisterChangedCallback(name, settingsCallback, this); + g_settings->deregisterAllChangedCallbacks(this); } void onSetConstants(video::IMaterialRendererServices *services) override @@ -1046,48 +1045,8 @@ Game::~Game() clearTextureNameCache(); - g_settings->deregisterChangedCallback("chat_log_level", - &settingChangedCallback, this); - g_settings->deregisterChangedCallback("disable_escape_sequences", - &settingChangedCallback, this); - g_settings->deregisterChangedCallback("doubletap_jump", - &settingChangedCallback, this); - g_settings->deregisterChangedCallback("enable_clouds", - &settingChangedCallback, this); - g_settings->deregisterChangedCallback("enable_joysticks", - &settingChangedCallback, this); - g_settings->deregisterChangedCallback("enable_particles", - &settingChangedCallback, this); - g_settings->deregisterChangedCallback("enable_fog", - &settingChangedCallback, this); - g_settings->deregisterChangedCallback("mouse_sensitivity", - &settingChangedCallback, this); - g_settings->deregisterChangedCallback("joystick_frustum_sensitivity", - &settingChangedCallback, this); - g_settings->deregisterChangedCallback("repeat_place_time", - &settingChangedCallback, this); - g_settings->deregisterChangedCallback("repeat_dig_time", - &settingChangedCallback, this); - g_settings->deregisterChangedCallback("noclip", - &settingChangedCallback, this); - g_settings->deregisterChangedCallback("free_move", - &settingChangedCallback, this); - g_settings->deregisterChangedCallback("fog_start", - &settingChangedCallback, this); - g_settings->deregisterChangedCallback("cinematic", - &settingChangedCallback, this); - g_settings->deregisterChangedCallback("cinematic_camera_smoothing", - &settingChangedCallback, this); - g_settings->deregisterChangedCallback("camera_smoothing", - &settingChangedCallback, this); - g_settings->deregisterChangedCallback("invert_mouse", - &settingChangedCallback, this); - g_settings->deregisterChangedCallback("enable_hotbar_mouse_wheel", - &settingChangedCallback, this); - g_settings->deregisterChangedCallback("invert_hotbar_mouse_wheel", - &settingChangedCallback, this); - g_settings->deregisterChangedCallback("pause_on_lost_focus", - &settingChangedCallback, this); + g_settings->deregisterAllChangedCallbacks(this); + if (m_rendering_engine) m_rendering_engine->finalize(); } diff --git a/src/client/hud.cpp b/src/client/hud.cpp index 6fd6b7d03..dcb38c9b6 100644 --- a/src/client/hud.cpp +++ b/src/client/hud.cpp @@ -170,9 +170,7 @@ void Hud::readScalingSetting() Hud::~Hud() { - g_settings->deregisterChangedCallback("dpi_change_notifier", setting_changed_callback, this); - g_settings->deregisterChangedCallback("display_density_factor", setting_changed_callback, this); - g_settings->deregisterChangedCallback("hud_scaling", setting_changed_callback, this); + g_settings->deregisterAllChangedCallbacks(this); if (m_selection_mesh) m_selection_mesh->drop(); diff --git a/src/client/localplayer.cpp b/src/client/localplayer.cpp index 75f755578..cf2e63698 100644 --- a/src/client/localplayer.cpp +++ b/src/client/localplayer.cpp @@ -60,10 +60,7 @@ void PlayerSettings::registerSettingsCallback() void PlayerSettings::deregisterSettingsCallback() { - for (auto &name : PlayerSettings_names) { - g_settings->deregisterChangedCallback(name, - &PlayerSettings::settingsChangedCallback, this); - } + g_settings->deregisterAllChangedCallbacks(this); } void PlayerSettings::settingsChangedCallback(const std::string &name, void *data) diff --git a/src/client/renderingengine.cpp b/src/client/renderingengine.cpp index 2f714e020..522383f22 100644 --- a/src/client/renderingengine.cpp +++ b/src/client/renderingengine.cpp @@ -238,8 +238,7 @@ RenderingEngine::~RenderingEngine() { sanity_check(s_singleton == this); - g_settings->deregisterChangedCallback("fullscreen", settingChangedCallback, this); - g_settings->deregisterChangedCallback("window_maximized", settingChangedCallback, this); + g_settings->deregisterAllChangedCallbacks(this); core.reset(); m_device->closeDevice(); diff --git a/src/gui/guiEngine.cpp b/src/gui/guiEngine.cpp index 200c26fa0..8cdbb97fb 100644 --- a/src/gui/guiEngine.cpp +++ b/src/gui/guiEngine.cpp @@ -404,7 +404,7 @@ void GUIEngine::run() /******************************************************************************/ GUIEngine::~GUIEngine() { - g_settings->deregisterChangedCallback("fullscreen", fullscreenChangedCallback, this); + g_settings->deregisterAllChangedCallbacks(this); // deinitialize script first. gc destructors might depend on other stuff infostream << "GUIEngine: Deinitializing scripting" << std::endl; diff --git a/src/settings.cpp b/src/settings.cpp index e017b3323..867801e06 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -1048,21 +1048,22 @@ void Settings::registerChangedCallback(const std::string &name, m_callbacks[name].emplace_back(cbf, userdata); } -void Settings::deregisterChangedCallback(const std::string &name, - SettingsChangedCallback cbf, void *userdata) +size_t Settings::deregisterAllChangedCallbacks(const void *userdata) { MutexAutoLock lock(m_callback_mutex); - SettingsCallbackMap::iterator it_cbks = m_callbacks.find(name); - if (it_cbks != m_callbacks.end()) { - SettingsCallbackList &cbks = it_cbks->second; - - SettingsCallbackList::iterator position = - std::find(cbks.begin(), cbks.end(), std::make_pair(cbf, userdata)); - - if (position != cbks.end()) - cbks.erase(position); + size_t n_removed = 0; + for (auto &settings : m_callbacks) { + for (auto cb = settings.second.begin(); cb != settings.second.end();) { + if (cb->second == userdata) { + cb = settings.second.erase(cb); + n_removed++; + } else { + ++cb; + } + } } + return n_removed; } void Settings::removeSecureSettings() diff --git a/src/settings.h b/src/settings.h index 692001c59..8fc5b8258 100644 --- a/src/settings.h +++ b/src/settings.h @@ -238,8 +238,7 @@ public: void registerChangedCallback(const std::string &name, SettingsChangedCallback cbf, void *userdata = NULL); - void deregisterChangedCallback(const std::string &name, - SettingsChangedCallback cbf, void *userdata = NULL); + size_t deregisterAllChangedCallbacks(const void *userdata); void removeSecureSettings(); From 4975afb5ff375c5ce004615f98aeffce7c0455ff Mon Sep 17 00:00:00 2001 From: SmallJoker Date: Sat, 12 Oct 2024 23:04:31 +0200 Subject: [PATCH 030/178] Clean up header includes related to settings.h --- src/chat.cpp | 1 + src/chat.h | 2 +- src/client/camera.cpp | 1 + src/client/fontengine.cpp | 3 +++ src/client/fontengine.h | 12 ++++++++---- src/client/imagesource.cpp | 18 ++++++++++++------ src/client/imagesource.h | 14 ++++++-------- src/client/localplayer.h | 1 - src/client/texturesource.cpp | 9 +++++---- 9 files changed, 37 insertions(+), 24 deletions(-) diff --git a/src/chat.cpp b/src/chat.cpp index ec84d125f..d9e2716a3 100644 --- a/src/chat.cpp +++ b/src/chat.cpp @@ -25,6 +25,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "config.h" #include "debug.h" +#include "settings.h" #include "util/strfnd.h" #include "util/string.h" #include "util/numeric.h" diff --git a/src/chat.h b/src/chat.h index 444d3bede..adba2b62e 100644 --- a/src/chat.h +++ b/src/chat.h @@ -19,6 +19,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #pragma once +#include #include #include #include @@ -26,7 +27,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "irrlichttypes.h" #include "util/enriched_string.h" -#include "settings.h" // Chat console related classes diff --git a/src/client/camera.cpp b/src/client/camera.cpp index 615d30c87..a37245f9a 100644 --- a/src/client/camera.cpp +++ b/src/client/camera.cpp @@ -38,6 +38,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "script/scripting_client.h" #include "gettext.h" #include +#include #include #define CAMERA_OFFSET_STEP 200 diff --git a/src/client/fontengine.cpp b/src/client/fontengine.cpp index 2d00f3cf4..e3f38be62 100644 --- a/src/client/fontengine.cpp +++ b/src/client/fontengine.cpp @@ -24,8 +24,11 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "porting.h" #include "filesys.h" #include "gettext.h" +#include "settings.h" #include "irrlicht_changes/CGUITTFont.h" #include "util/numeric.h" // rangelim +#include +#include /** reference to access font engine, has to be initialized by main */ FontEngine *g_fontengine = nullptr; diff --git a/src/client/fontengine.h b/src/client/fontengine.h index 78608e517..aa8ab7e36 100644 --- a/src/client/fontengine.h +++ b/src/client/fontengine.h @@ -22,12 +22,16 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include "util/basic_macros.h" #include "irrlichttypes.h" -#include -#include -#include -#include "settings.h" +#include "irrString.h" // utf8_to_wide #include "threading/mutex_auto_lock.h" +namespace irr { + namespace gui { + class IGUIEnvironment; + class IGUIFont; + } +} + #define FONT_SIZE_UNSPECIFIED 0xFFFFFFFF enum FontMode : u8 { diff --git a/src/client/imagesource.cpp b/src/client/imagesource.cpp index 195d57a41..1b9131797 100644 --- a/src/client/imagesource.cpp +++ b/src/client/imagesource.cpp @@ -20,15 +20,15 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "imagesource.h" #include -#include "settings.h" -#include "mesh.h" -#include "util/strfnd.h" -#include "renderingengine.h" -#include "util/base64.h" -#include "irrlicht_changes/printing.h" #include "imagefilters.h" +#include "mesh.h" +#include "renderingengine.h" +#include "settings.h" #include "texturepaths.h" +#include "irrlicht_changes/printing.h" +#include "util/base64.h" #include "util/numeric.h" +#include "util/strfnd.h" //////////////////////////////// @@ -1832,6 +1832,12 @@ bool ImageSource::generateImagePart(std::string_view part_of_name, #undef CHECK_DIM +ImageSource::ImageSource() : + m_setting_mipmap{g_settings->getBool("mip_map")}, + m_setting_trilinear_filter{g_settings->getBool("trilinear_filter")}, + m_setting_bilinear_filter{g_settings->getBool("bilinear_filter")}, + m_setting_anisotropic_filter{g_settings->getBool("anisotropic_filter")} +{} video::IImage* ImageSource::generateImage(std::string_view name, std::set &source_image_names) diff --git a/src/client/imagesource.h b/src/client/imagesource.h index f3a30617a..488ef1e2d 100644 --- a/src/client/imagesource.h +++ b/src/client/imagesource.h @@ -20,8 +20,11 @@ with this program; if not, write to the Free Software Foundation, Inc., #pragma once #include +#include +#include #include -#include "settings.h" + +using namespace irr; // This file is only used for internal generation of images. // Use texturesource.h to handle textures. @@ -45,6 +48,8 @@ private: // Generates images using texture modifiers, and caches source images. struct ImageSource { + ImageSource(); + /*! Generates an image from a full string like * "stone.png^mineral_coal.png^[crack:1:0". * The returned Image should be dropped. @@ -58,13 +63,6 @@ struct ImageSource { // TODO should probably be moved elsewhere static video::SColor getImageAverageColor(const video::IImage &image); - ImageSource() : - m_setting_mipmap{g_settings->getBool("mip_map")}, - m_setting_trilinear_filter{g_settings->getBool("trilinear_filter")}, - m_setting_bilinear_filter{g_settings->getBool("bilinear_filter")}, - m_setting_anisotropic_filter{g_settings->getBool("anisotropic_filter")} - {}; - private: // Generate image based on a string like "stone.png" or "[crack:1:0". diff --git a/src/client/localplayer.h b/src/client/localplayer.h index 275f556e4..05fcb2cbb 100644 --- a/src/client/localplayer.h +++ b/src/client/localplayer.h @@ -22,7 +22,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "player.h" #include "environment.h" #include "constants.h" -#include "settings.h" #include "lighting.h" #include diff --git a/src/client/texturesource.cpp b/src/client/texturesource.cpp index f18fa6cbf..7f2701c78 100644 --- a/src/client/texturesource.cpp +++ b/src/client/texturesource.cpp @@ -20,12 +20,13 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "texturesource.h" #include -#include "util/thread.h" -#include "imagefilters.h" #include "guiscalingfilter.h" -#include "renderingengine.h" -#include "texturepaths.h" +#include "imagefilters.h" #include "imagesource.h" +#include "renderingengine.h" +#include "settings.h" +#include "texturepaths.h" +#include "util/thread.h" // Stores internal information about a texture. From f2ab887644f627ced3d91f589f7617cc0d647c27 Mon Sep 17 00:00:00 2001 From: "ALi.w" Date: Thu, 17 Oct 2024 21:09:11 +0330 Subject: [PATCH 031/178] Fix getDimension throwing error if there is \r at end of line (#15299) --- src/irrlicht_changes/CGUITTFont.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/irrlicht_changes/CGUITTFont.cpp b/src/irrlicht_changes/CGUITTFont.cpp index 022ab46b0..bc920d5b3 100644 --- a/src/irrlicht_changes/CGUITTFont.cpp +++ b/src/irrlicht_changes/CGUITTFont.cpp @@ -721,7 +721,7 @@ core::dimension2d CGUITTFont::getDimension(const std::u32string& text) cons if (p == '\r') // Mac or Windows line breaks. { lineBreak = true; - if (*(iter + 1) == '\n') + if (iter + 1 != text.end() && *(iter + 1) == '\n') { ++iter; p = *iter; From e5d321d286ad6da066cee18e01b26a374603c54d Mon Sep 17 00:00:00 2001 From: DS Date: Fri, 18 Oct 2024 10:58:32 +0200 Subject: [PATCH 032/178] Cleanup headers in irr/include/ (#15181) --- irr/include/EDriverTypes.h | 2 - irr/include/IAnimatedMesh.h | 1 - irr/include/IAttributes.h | 3 - irr/include/IGUIElement.h | 2 - irr/include/IGUIEnvironment.h | 2 +- irr/include/IGUIImageList.h | 2 +- irr/include/IGUITabControl.h | 1 - irr/include/IImageLoader.h | 2 - irr/include/IImageWriter.h | 3 +- irr/include/IIndexBuffer.h | 1 - irr/include/IMaterialRendererServices.h | 1 - irr/include/IMeshManipulator.h | 1 - irr/include/IReadFile.h | 2 +- irr/include/ISceneManager.h | 4 +- irr/include/ISceneNode.h | 3 +- irr/include/ISkinnedMesh.h | 3 +- irr/include/ITexture.h | 3 +- irr/include/IVertexBuffer.h | 1 - irr/include/IVideoDriver.h | 1 + irr/include/SMaterial.h | 4 +- irr/include/SMeshBuffer.h | 2 +- irr/include/SSkinMeshBuffer.h | 1 - irr/include/SVertexIndex.h | 2 - irr/include/SVertexManipulator.h | 4 +- irr/include/coreutil.h | 1 - irr/include/fast_atof.h | 10 +- irr/include/irrArray.h | 2 +- irr/include/irrlicht.h | 106 ++------------------- irr/include/mt_opengl.h | 1 - irr/include/quaternion.h | 3 +- irr/scripts/BindingGenerator.lua | 7 +- irr/src/CB3DMeshFileLoader.cpp | 1 + irr/src/CFileSystem.cpp | 3 +- irr/src/CImageLoaderBMP.cpp | 2 +- irr/src/CImageLoaderJPG.cpp | 2 + irr/src/CImageLoaderJPG.h | 3 +- irr/src/CImageLoaderPNG.cpp | 3 +- irr/src/CImageLoaderTGA.cpp | 2 +- irr/src/CImageWriterJPG.cpp | 7 +- irr/src/CImageWriterPNG.cpp | 3 +- irr/src/CIrrDeviceOSX.mm | 1 + irr/src/CSkinnedMesh.h | 2 + irr/src/Irrlicht.cpp | 3 + src/client/clientlauncher.cpp | 3 +- src/client/game.cpp | 9 +- src/client/renderingengine.cpp | 3 +- src/config.h | 2 +- src/gui/guiScene.cpp | 1 + src/irrlicht_changes/CGUITTFont.cpp | 8 +- src/irrlicht_changes/CGUITTFont.h | 10 +- src/unittest/test_irr_gltf_mesh_loader.cpp | 7 +- 51 files changed, 76 insertions(+), 180 deletions(-) diff --git a/irr/include/EDriverTypes.h b/irr/include/EDriverTypes.h index f19e65ace..20c684d4c 100644 --- a/irr/include/EDriverTypes.h +++ b/irr/include/EDriverTypes.h @@ -4,8 +4,6 @@ #pragma once -#include "irrTypes.h" - namespace irr { namespace video diff --git a/irr/include/IAnimatedMesh.h b/irr/include/IAnimatedMesh.h index 2a1c1f4b1..62568bf6b 100644 --- a/irr/include/IAnimatedMesh.h +++ b/irr/include/IAnimatedMesh.h @@ -4,7 +4,6 @@ #pragma once -#include "aabbox3d.h" #include "IMesh.h" namespace irr diff --git a/irr/include/IAttributes.h b/irr/include/IAttributes.h index 4606c5710..1f35732f0 100644 --- a/irr/include/IAttributes.h +++ b/irr/include/IAttributes.h @@ -7,9 +7,6 @@ #include "IReferenceCounted.h" #include "EAttributes.h" -// not needed here but I can't be bothered to clean the transitive includes up. -#include "quaternion.h" - namespace irr { namespace video diff --git a/irr/include/IGUIElement.h b/irr/include/IGUIElement.h index 866ca282d..cffac10d1 100644 --- a/irr/include/IGUIElement.h +++ b/irr/include/IGUIElement.h @@ -10,10 +10,8 @@ #include "IEventReceiver.h" #include "EGUIElementTypes.h" #include "EGUIAlignment.h" -#include "IAttributes.h" #include "IGUIEnvironment.h" #include -#include #include #include diff --git a/irr/include/IGUIEnvironment.h b/irr/include/IGUIEnvironment.h index b9905252d..9a61abb39 100644 --- a/irr/include/IGUIEnvironment.h +++ b/irr/include/IGUIEnvironment.h @@ -7,7 +7,7 @@ #include "IReferenceCounted.h" #include "IGUISkin.h" #include "rect.h" -#include "EFocusFlags.h" +#include "EFocusFlags.h" // IWYU pragma: export #include "IEventReceiver.h" #include "path.h" diff --git a/irr/include/IGUIImageList.h b/irr/include/IGUIImageList.h index 6b23c5469..a13ec57a4 100644 --- a/irr/include/IGUIImageList.h +++ b/irr/include/IGUIImageList.h @@ -3,7 +3,7 @@ #pragma once -#include "IGUIElement.h" +#include "IReferenceCounted.h" #include "rect.h" #include "irrTypes.h" diff --git a/irr/include/IGUITabControl.h b/irr/include/IGUITabControl.h index f1d2183ae..274d12695 100644 --- a/irr/include/IGUITabControl.h +++ b/irr/include/IGUITabControl.h @@ -6,7 +6,6 @@ #include "IGUIElement.h" #include "SColor.h" -#include "IGUISkin.h" namespace irr { diff --git a/irr/include/IImageLoader.h b/irr/include/IImageLoader.h index a521be15f..207b648d5 100644 --- a/irr/include/IImageLoader.h +++ b/irr/include/IImageLoader.h @@ -6,9 +6,7 @@ #include "IReferenceCounted.h" #include "IImage.h" -#include "ITexture.h" #include "path.h" -#include "irrArray.h" namespace irr { diff --git a/irr/include/IImageWriter.h b/irr/include/IImageWriter.h index b8defc75f..872b50290 100644 --- a/irr/include/IImageWriter.h +++ b/irr/include/IImageWriter.h @@ -5,8 +5,7 @@ #pragma once #include "IReferenceCounted.h" -#include "irrString.h" -#include "coreutil.h" +#include "path.h" namespace irr { diff --git a/irr/include/IIndexBuffer.h b/irr/include/IIndexBuffer.h index 01282f0c8..917fc10b4 100644 --- a/irr/include/IIndexBuffer.h +++ b/irr/include/IIndexBuffer.h @@ -5,7 +5,6 @@ #pragma once #include "IReferenceCounted.h" -#include "irrArray.h" #include "EHardwareBufferFlags.h" #include "EPrimitiveTypes.h" #include "SVertexIndex.h" diff --git a/irr/include/IMaterialRendererServices.h b/irr/include/IMaterialRendererServices.h index 81a195d8c..8ed66061d 100644 --- a/irr/include/IMaterialRendererServices.h +++ b/irr/include/IMaterialRendererServices.h @@ -5,7 +5,6 @@ #pragma once #include "SMaterial.h" -#include "S3DVertex.h" namespace irr { diff --git a/irr/include/IMeshManipulator.h b/irr/include/IMeshManipulator.h index de3d84416..54770c6f7 100644 --- a/irr/include/IMeshManipulator.h +++ b/irr/include/IMeshManipulator.h @@ -7,7 +7,6 @@ #include "IReferenceCounted.h" #include "vector3d.h" #include "aabbox3d.h" -#include "matrix4.h" #include "IAnimatedMesh.h" #include "IMeshBuffer.h" #include "SVertexManipulator.h" diff --git a/irr/include/IReadFile.h b/irr/include/IReadFile.h index d3d973069..4431bdb32 100644 --- a/irr/include/IReadFile.h +++ b/irr/include/IReadFile.h @@ -5,8 +5,8 @@ #pragma once #include "IReferenceCounted.h" -#include "coreutil.h" #include "EReadFileType.h" +#include "path.h" namespace irr { diff --git a/irr/include/ISceneManager.h b/irr/include/ISceneManager.h index c247c4b99..18521dbe9 100644 --- a/irr/include/ISceneManager.h +++ b/irr/include/ISceneManager.h @@ -6,13 +6,11 @@ #include "IReferenceCounted.h" #include "irrArray.h" -#include "irrString.h" -#include "path.h" #include "vector3d.h" #include "dimension2d.h" #include "SColor.h" #include "ESceneNodeTypes.h" -#include "SceneParameters.h" +#include "SceneParameters.h" // IWYU pragma: export #include "ISkinnedMesh.h" namespace irr diff --git a/irr/include/ISceneNode.h b/irr/include/ISceneNode.h index 1eab3a3fd..0438d855f 100644 --- a/irr/include/ISceneNode.h +++ b/irr/include/ISceneNode.h @@ -9,14 +9,13 @@ #include "ECullingTypes.h" #include "EDebugSceneTypes.h" #include "SMaterial.h" -#include "irrString.h" #include "irrArray.h" #include "aabbox3d.h" #include "matrix4.h" -#include "IAttributes.h" #include #include +#include namespace irr { diff --git a/irr/include/ISkinnedMesh.h b/irr/include/ISkinnedMesh.h index 869327bcd..af241f55d 100644 --- a/irr/include/ISkinnedMesh.h +++ b/irr/include/ISkinnedMesh.h @@ -5,11 +5,12 @@ #pragma once #include "irrArray.h" -#include "IBoneSceneNode.h" #include "IAnimatedMesh.h" #include "SSkinMeshBuffer.h" +#include "quaternion.h" #include +#include namespace irr { diff --git a/irr/include/ITexture.h b/irr/include/ITexture.h index adca90e7b..533271b39 100644 --- a/irr/include/ITexture.h +++ b/irr/include/ITexture.h @@ -5,11 +5,10 @@ #pragma once #include "IReferenceCounted.h" -#include "IImage.h" +#include "SColor.h" #include "dimension2d.h" #include "EDriverTypes.h" #include "path.h" -#include "matrix4.h" namespace irr { diff --git a/irr/include/IVertexBuffer.h b/irr/include/IVertexBuffer.h index e5be83904..e6f8c633c 100644 --- a/irr/include/IVertexBuffer.h +++ b/irr/include/IVertexBuffer.h @@ -5,7 +5,6 @@ #pragma once #include "IReferenceCounted.h" -#include "irrArray.h" #include "EHardwareBufferFlags.h" #include "S3DVertex.h" diff --git a/irr/include/IVideoDriver.h b/irr/include/IVideoDriver.h index af8d97fef..035f5ad77 100644 --- a/irr/include/IVideoDriver.h +++ b/irr/include/IVideoDriver.h @@ -6,6 +6,7 @@ #include "rect.h" #include "SColor.h" +#include "IImage.h" #include "ITexture.h" #include "irrArray.h" #include "matrix4.h" diff --git a/irr/include/SMaterial.h b/irr/include/SMaterial.h index 8c0a51dfd..7a939317c 100644 --- a/irr/include/SMaterial.h +++ b/irr/include/SMaterial.h @@ -7,8 +7,8 @@ #include "SColor.h" #include "matrix4.h" #include "irrMath.h" -#include "EMaterialTypes.h" -#include "EMaterialProps.h" +#include "EMaterialTypes.h" // IWYU pragma: export +#include "EMaterialProps.h" // IWYU pragma: export #include "SMaterialLayer.h" #include "IrrCompileConfig.h" // for IRRLICHT_API diff --git a/irr/include/SMeshBuffer.h b/irr/include/SMeshBuffer.h index 2053db958..c92669724 100644 --- a/irr/include/SMeshBuffer.h +++ b/irr/include/SMeshBuffer.h @@ -3,4 +3,4 @@ // For conditions of distribution and use, see copyright notice in irrlicht.h // replaced by template -#include "CMeshBuffer.h" +#include "CMeshBuffer.h" // IWYU pragma: export diff --git a/irr/include/SSkinMeshBuffer.h b/irr/include/SSkinMeshBuffer.h index 303207d93..b0b6658b3 100644 --- a/irr/include/SSkinMeshBuffer.h +++ b/irr/include/SSkinMeshBuffer.h @@ -8,7 +8,6 @@ #include "CVertexBuffer.h" #include "CIndexBuffer.h" #include "S3DVertex.h" -#include "irrArray.h" namespace irr { diff --git a/irr/include/SVertexIndex.h b/irr/include/SVertexIndex.h index 21cf42583..73db1d23f 100644 --- a/irr/include/SVertexIndex.h +++ b/irr/include/SVertexIndex.h @@ -4,8 +4,6 @@ #pragma once -#include "irrTypes.h" - namespace irr { namespace video diff --git a/irr/include/SVertexManipulator.h b/irr/include/SVertexManipulator.h index f302273c8..80111b8ed 100644 --- a/irr/include/SVertexManipulator.h +++ b/irr/include/SVertexManipulator.h @@ -4,9 +4,7 @@ #pragma once -#include "matrix4.h" -#include "S3DVertex.h" -#include "SColor.h" +#include "vector3d.h" namespace irr { diff --git a/irr/include/coreutil.h b/irr/include/coreutil.h index 73d1c4b43..ca19c00ca 100644 --- a/irr/include/coreutil.h +++ b/irr/include/coreutil.h @@ -4,7 +4,6 @@ #pragma once -#include "irrString.h" #include "path.h" namespace irr diff --git a/irr/include/fast_atof.h b/irr/include/fast_atof.h index 8bbd0e9f1..2b517d62d 100644 --- a/irr/include/fast_atof.h +++ b/irr/include/fast_atof.h @@ -4,8 +4,10 @@ #pragma once -#include "irrMath.h" -#include "irrString.h" +#include "irrTypes.h" +#include +#include +#include namespace irr { @@ -305,7 +307,7 @@ inline const char *fast_atof_move(const char *in, f32 &result) if (numDecimals < IRR_ATOF_TABLE_SIZE) { value += decimal * fast_atof_table[numDecimals]; } else { - value += decimal * (f32)pow(10.f, -(float)numDecimals); + value += decimal * std::pow(10.f, -(float)numDecimals); } in = afterDecimal; } @@ -316,7 +318,7 @@ inline const char *fast_atof_move(const char *in, f32 &result) // strtol10() will deal with both + and - signs, // but calculate as f32 to prevent overflow at FLT_MAX // Using pow with float cast instead of powf as otherwise accuracy decreases. - value *= (f32)pow(10.f, (f32)strtol10(in, &in)); + value *= std::pow(10.f, (f32)strtol10(in, &in)); } result = negative ? -value : value; diff --git a/irr/include/irrArray.h b/irr/include/irrArray.h index 9f390e79b..4a87382bc 100644 --- a/irr/include/irrArray.h +++ b/irr/include/irrArray.h @@ -155,7 +155,7 @@ public: } //! Assignment operator - const array &operator=(const array &other) + array &operator=(const array &other) { if (this == &other) return *this; diff --git a/irr/include/irrlicht.h b/irr/include/irrlicht.h index 5b7042fc6..14a190e53 100644 --- a/irr/include/irrlicht.h +++ b/irr/include/irrlicht.h @@ -28,106 +28,12 @@ #pragma once -#include "aabbox3d.h" -#include "CMeshBuffer.h" -#include "coreutil.h" -#include "dimension2d.h" -#include "ECullingTypes.h" -#include "EDebugSceneTypes.h" -#include "EDriverFeatures.h" -#include "EDriverTypes.h" -#include "EGUIAlignment.h" -#include "EGUIElementTypes.h" -#include "EHardwareBufferFlags.h" -#include "EMaterialProps.h" -#include "EMaterialTypes.h" -#include "ESceneNodeTypes.h" -#include "fast_atof.h" -#include "IAnimatedMesh.h" -#include "IAnimatedMeshSceneNode.h" -#include "IAttributes.h" -#include "IBillboardSceneNode.h" -#include "IBoneSceneNode.h" -#include "ICameraSceneNode.h" -#include "IContextManager.h" -#include "ICursorControl.h" -#include "IDummyTransformationSceneNode.h" -#include "IEventReceiver.h" -#include "IFileList.h" -#include "IFileSystem.h" -#include "IGPUProgrammingServices.h" -#include "IGUIButton.h" -#include "IGUICheckBox.h" -#include "IGUIComboBox.h" -#include "IGUIEditBox.h" -#include "IGUIElement.h" -#include "IGUIEnvironment.h" -#include "IGUIFileOpenDialog.h" -#include "IGUIFont.h" -#include "IGUIFontBitmap.h" -#include "IGUIImage.h" -#include "IGUIListBox.h" -#include "IGUIScrollBar.h" -#include "IGUISkin.h" -#include "IGUISpriteBank.h" -#include "IGUIStaticText.h" -#include "IGUITabControl.h" -#include "IGUIToolbar.h" -#include "IImage.h" -#include "IImageLoader.h" -#include "IImageWriter.h" -#include "IIndexBuffer.h" -#include "ILogger.h" -#include "IMaterialRenderer.h" -#include "IMaterialRendererServices.h" -#include "IMesh.h" -#include "IMeshBuffer.h" -#include "IMeshCache.h" -#include "IMeshLoader.h" -#include "IMeshManipulator.h" -#include "IMeshSceneNode.h" -#include "IOSOperator.h" -#include "IReadFile.h" -#include "IReferenceCounted.h" -#include "irrArray.h" -#include "IRenderTarget.h" #include "IrrlichtDevice.h" -#include "irrMath.h" -#include "irrString.h" +#include "dimension2d.h" +#include "EDriverTypes.h" +#include "IEventReceiver.h" #include "irrTypes.h" -#include "path.h" -#include "ISceneCollisionManager.h" -#include "ISceneManager.h" -#include "ISceneNode.h" -#include "IShaderConstantSetCallBack.h" -#include "ISkinnedMesh.h" -#include "ITexture.h" -#include "ITimer.h" -#include "IVertexBuffer.h" -#include "IVideoDriver.h" -#include "IWriteFile.h" -#include "Keycodes.h" -#include "line2d.h" -#include "line3d.h" -#include "matrix4.h" -#include "plane3d.h" -#include "position2d.h" -#include "quaternion.h" -#include "rect.h" -#include "S3DVertex.h" -#include "SAnimatedMesh.h" -#include "SceneParameters.h" -#include "SColor.h" -#include "SExposedVideoData.h" #include "SIrrCreationParameters.h" -#include "SMaterial.h" -#include "SMesh.h" -#include "SMeshBuffer.h" -#include "SSkinMeshBuffer.h" -#include "SVertexIndex.h" -#include "SViewFrustum.h" -#include "vector2d.h" -#include "vector3d.h" #include "IrrCompileConfig.h" // for IRRLICHT_API and IRRCALLCONV /*! \mainpage Irrlicht Engine 1.9 API documentation @@ -166,6 +72,8 @@ * * \code * #include + * // include a bunch of other stuff... + * * using namespace irr; * * int main() @@ -241,8 +149,6 @@ * a look into the examples directory of the SDK. */ -#include "SIrrCreationParameters.h" - //! Everything in the Irrlicht Engine can be found in this namespace. namespace irr { @@ -314,5 +220,5 @@ namespace video } /*! \file irrlicht.h - \brief Main header file of the irrlicht, the only file needed to include. + \brief Main header file of the irrlicht, needed to create a device. */ diff --git a/irr/include/mt_opengl.h b/irr/include/mt_opengl.h index 32d3f1c0a..f69ba8c69 100755 --- a/irr/include/mt_opengl.h +++ b/irr/include/mt_opengl.h @@ -6,7 +6,6 @@ #include #include #include "IrrCompileConfig.h" // for IRRLICHT_API -#include "irrTypes.h" #include "IContextManager.h" #include diff --git a/irr/include/quaternion.h b/irr/include/quaternion.h index 5a2e16367..4e90fa067 100644 --- a/irr/include/quaternion.h +++ b/irr/include/quaternion.h @@ -277,7 +277,8 @@ inline quaternion &quaternion::operator=(const matrix4 &m) } } - return normalize(); + normalize(); + return *this; } #endif diff --git a/irr/scripts/BindingGenerator.lua b/irr/scripts/BindingGenerator.lua index 0f9ffa764..d0be04293 100755 --- a/irr/scripts/BindingGenerator.lua +++ b/irr/scripts/BindingGenerator.lua @@ -198,7 +198,7 @@ local consts = List(); -- Parse a whole header, extracting the data. local function ParseHeader( path, into, apiRegex, defs, consts, nameSet, noNewNames ) defs:AddFormat( "\t// %s", path ); - local f = assert( io.open( path, "r" ), "Could not open " .. path ); + local f = assert( io.open( path, "r" ) ); for line in f:lines() do -- Do not parse PFN typedefs; they're easily reconstructible. local T, rawName, args = line:match( apiRegex ); @@ -340,7 +340,7 @@ end ------------ Write files ------------ -- Write loader header -local f = io.open( sourceTreePath .. "/include/mt_opengl.h", "wb" ); +local f = assert(io.open( sourceTreePath .. "/include/mt_opengl.h", "wb" )); f:write[[ // This code was generated by scripts/BindingGenerator.lua // Do not modify it, modify and run the generator instead. @@ -350,7 +350,6 @@ f:write[[ #include #include #include "IrrCompileConfig.h" // for IRRLICHT_API -#include "irrTypes.h" #include "IContextManager.h" #include @@ -408,7 +407,7 @@ f:write( "IRRLICHT_API extern OpenGLProcedures GL;\n" ); f:close(); -- Write loader implementation -f = io.open( sourceTreePath .. "/src/mt_opengl_loader.cpp", "wb" ); +f = assert(io.open( sourceTreePath .. "/src/mt_opengl_loader.cpp", "wb" )); f:write[[ // This code was generated by scripts/BindingGenerator.lua // Do not modify it, modify and run the generator instead. diff --git a/irr/src/CB3DMeshFileLoader.cpp b/irr/src/CB3DMeshFileLoader.cpp index cf6a980d8..6cb40cb95 100644 --- a/irr/src/CB3DMeshFileLoader.cpp +++ b/irr/src/CB3DMeshFileLoader.cpp @@ -10,6 +10,7 @@ #include "IVideoDriver.h" #include "IFileSystem.h" +#include "coreutil.h" #include "os.h" #include diff --git a/irr/src/CFileSystem.cpp b/irr/src/CFileSystem.cpp index 386bb389c..4b938c4c5 100644 --- a/irr/src/CFileSystem.cpp +++ b/irr/src/CFileSystem.cpp @@ -7,12 +7,11 @@ #include "IWriteFile.h" #include "CZipReader.h" #include "CFileList.h" -#include "stdio.h" -#include "os.h" #include "CReadFile.h" #include "CMemoryFile.h" #include "CLimitReadFile.h" #include "CWriteFile.h" +#include "coreutil.h" #include #if defined(__STRICT_ANSI__) diff --git a/irr/src/CImageLoaderBMP.cpp b/irr/src/CImageLoaderBMP.cpp index 301edb2fe..40989882e 100644 --- a/irr/src/CImageLoaderBMP.cpp +++ b/irr/src/CImageLoaderBMP.cpp @@ -8,8 +8,8 @@ #include "SColor.h" #include "CColorConverter.h" #include "CImage.h" +#include "coreutil.h" #include "os.h" -#include "irrString.h" namespace irr { diff --git a/irr/src/CImageLoaderJPG.cpp b/irr/src/CImageLoaderJPG.cpp index e64c458e7..5b7978a4b 100644 --- a/irr/src/CImageLoaderJPG.cpp +++ b/irr/src/CImageLoaderJPG.cpp @@ -6,8 +6,10 @@ #include "IReadFile.h" #include "CImage.h" +#include "coreutil.h" #include "os.h" #include "irrString.h" +#include namespace irr { diff --git a/irr/src/CImageLoaderJPG.h b/irr/src/CImageLoaderJPG.h index 921a46a25..ffdc6c95c 100644 --- a/irr/src/CImageLoaderJPG.h +++ b/irr/src/CImageLoaderJPG.h @@ -6,9 +6,8 @@ #include "IImageLoader.h" -#include // required for jpeglib.h +#include // IWYU pragma: keep (required for jpeglib.h) #include // use system lib -#include namespace irr { diff --git a/irr/src/CImageLoaderPNG.cpp b/irr/src/CImageLoaderPNG.cpp index 69a283890..f1951e71b 100644 --- a/irr/src/CImageLoaderPNG.cpp +++ b/irr/src/CImageLoaderPNG.cpp @@ -7,7 +7,8 @@ #include // use system lib png #include "CImage.h" -#include "CReadFile.h" +#include "IReadFile.h" +#include "coreutil.h" #include "os.h" namespace irr diff --git a/irr/src/CImageLoaderTGA.cpp b/irr/src/CImageLoaderTGA.cpp index 5b7cc6143..1fd5dddc8 100644 --- a/irr/src/CImageLoaderTGA.cpp +++ b/irr/src/CImageLoaderTGA.cpp @@ -5,10 +5,10 @@ #include "CImageLoaderTGA.h" #include "IReadFile.h" +#include "coreutil.h" #include "os.h" #include "CColorConverter.h" #include "CImage.h" -#include "irrString.h" #define MAX(x, y) (((x) > (y)) ? (x) : (y)) diff --git a/irr/src/CImageWriterJPG.cpp b/irr/src/CImageWriterJPG.cpp index 574e46041..fa8ad64bc 100644 --- a/irr/src/CImageWriterJPG.cpp +++ b/irr/src/CImageWriterJPG.cpp @@ -6,15 +6,12 @@ #include "CColorConverter.h" #include "IWriteFile.h" -#include "CImage.h" -#include "irrString.h" +#include "coreutil.h" #include "os.h" -#include // required for jpeglib.h -extern "C" { +#include // IWYU pragma: keep (required for jpeglib.h) #include #include -} namespace irr { diff --git a/irr/src/CImageWriterPNG.cpp b/irr/src/CImageWriterPNG.cpp index 7bd3065c6..14c9f2d9c 100644 --- a/irr/src/CImageWriterPNG.cpp +++ b/irr/src/CImageWriterPNG.cpp @@ -4,10 +4,9 @@ #include "CImageWriterPNG.h" -#include "CImageLoaderPNG.h" #include "CColorConverter.h" #include "IWriteFile.h" -#include "irrString.h" +#include "coreutil.h" #include "os.h" // for logging #include // use system lib png diff --git a/irr/src/CIrrDeviceOSX.mm b/irr/src/CIrrDeviceOSX.mm index e335085e4..43c1c81b6 100644 --- a/irr/src/CIrrDeviceOSX.mm +++ b/irr/src/CIrrDeviceOSX.mm @@ -12,6 +12,7 @@ #include "CIrrDeviceOSX.h" #include "IEventReceiver.h" +#include "IVideoDriver.h" #include "os.h" #include "CTimer.h" #include "irrString.h" diff --git a/irr/src/CSkinnedMesh.h b/irr/src/CSkinnedMesh.h index 1be6ee7bc..576ae1217 100644 --- a/irr/src/CSkinnedMesh.h +++ b/irr/src/CSkinnedMesh.h @@ -6,6 +6,7 @@ #pragma once +#include "ISceneManager.h" #include "ISkinnedMesh.h" #include "SMeshBuffer.h" #include "quaternion.h" @@ -17,6 +18,7 @@ namespace scene class IAnimatedMeshSceneNode; class IBoneSceneNode; +class ISceneManager; class CSkinnedMesh : public ISkinnedMesh { diff --git a/irr/src/Irrlicht.cpp b/irr/src/Irrlicht.cpp index eb94fa4eb..b1818eb55 100644 --- a/irr/src/Irrlicht.cpp +++ b/irr/src/Irrlicht.cpp @@ -5,6 +5,9 @@ static const char *const copyright = "Irrlicht Engine (c) 2002-2017 Nikolaus Gebhardt"; // put string in binary #include "irrlicht.h" +#include "matrix4.h" +#include "SMaterial.h" + #ifdef _IRR_COMPILE_WITH_WINDOWS_DEVICE_ #include "CIrrDeviceWin32.h" #endif diff --git a/src/client/clientlauncher.cpp b/src/client/clientlauncher.cpp index 60d4fb6c8..938378df8 100644 --- a/src/client/clientlauncher.cpp +++ b/src/client/clientlauncher.cpp @@ -17,10 +17,10 @@ with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ +#include "IAttributes.h" #include "gui/mainmenumanager.h" #include "clouds.h" #include "gui/touchcontrols.h" -#include "server.h" #include "filesys.h" #include "gui/guiMainMenu.h" #include "game.h" @@ -34,7 +34,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "clientlauncher.h" #include "version.h" #include "renderingengine.h" -#include "network/networkexceptions.h" #include "util/tracy_wrapper.h" #include #include diff --git a/src/client/game.cpp b/src/client/game.cpp index 8e01c40da..a4920a164 100644 --- a/src/client/game.cpp +++ b/src/client/game.cpp @@ -19,8 +19,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "game.h" -#include #include +#include "IAttributes.h" #include "client/renderingengine.h" #include "camera.h" #include "client.h" @@ -44,7 +44,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "itemdef.h" #include "log.h" #include "log_internal.h" -#include "filesys.h" #include "gameparams.h" #include "gettext.h" #include "gui/guiChatConsole.h" @@ -55,7 +54,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "gui/guiVolumeChange.h" #include "gui/mainmenumanager.h" #include "gui/profilergraph.h" -#include "mapblock.h" #include "minimap.h" #include "nodedef.h" // Needed for determining pointing to nodes #include "nodemetadata.h" @@ -73,7 +71,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "util/directiontables.h" #include "util/pointedthing.h" #include "util/quicktune_shortcutter.h" -#include "irrlicht_changes/static_text.h" #include "irr_ptr.h" #include "version.h" #include "script/scripting_client.h" @@ -2815,7 +2812,7 @@ static void pauseNodeAnimation(PausedNodesList &paused, scene::ISceneNode *node) float speed = animated_node->getAnimationSpeed(); if (!speed) return; - paused.push_back({grab(animated_node), speed}); + paused.emplace_back(grab(animated_node), speed); animated_node->setAnimationSpeed(0.0f); } @@ -3507,7 +3504,7 @@ PointedThing Game::updatePointedThing( if (show_entity_selectionbox && runData.selected_object->doShowSelectionBox() && runData.selected_object->getSelectionBox(&selection_box)) { v3f pos = runData.selected_object->getPosition(); - selectionboxes->push_back(aabb3f(selection_box)); + selectionboxes->push_back(selection_box); hud->setSelectionPos(pos, camera_offset); GenericCAO* gcao = dynamic_cast(runData.selected_object); if (gcao != nullptr && gcao->getProperties().rotate_selectionbox) diff --git a/src/client/renderingengine.cpp b/src/client/renderingengine.cpp index 522383f22..828591149 100644 --- a/src/client/renderingengine.cpp +++ b/src/client/renderingengine.cpp @@ -20,6 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include +#include "IMeshCache.h" #include "fontengine.h" #include "client.h" #include "clouds.h" @@ -34,8 +35,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "renderingengine.h" #include "render/core.h" #include "render/factory.h" -#include "inputhandler.h" -#include "gettext.h" #include "filesys.h" #include "irrlicht_changes/static_text.h" #include "irr_ptr.h" diff --git a/src/config.h b/src/config.h index d573a0fab..9839cedda 100644 --- a/src/config.h +++ b/src/config.h @@ -1,7 +1,7 @@ #pragma once #if defined USE_CMAKE_CONFIG_H - #include "cmake_config.h" + #include "cmake_config.h" // IWYU pragma: export #else #warning Missing configuration #endif diff --git a/src/gui/guiScene.cpp b/src/gui/guiScene.cpp index 06784cd6e..eba9918c3 100644 --- a/src/gui/guiScene.cpp +++ b/src/gui/guiScene.cpp @@ -22,6 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include #include +#include "IAttributes.h" #include "porting.h" GUIScene::GUIScene(gui::IGUIEnvironment *env, scene::ISceneManager *smgr, diff --git a/src/irrlicht_changes/CGUITTFont.cpp b/src/irrlicht_changes/CGUITTFont.cpp index bc920d5b3..ee5ec6b35 100644 --- a/src/irrlicht_changes/CGUITTFont.cpp +++ b/src/irrlicht_changes/CGUITTFont.cpp @@ -30,9 +30,15 @@ john@suckerfreegames.com */ -#include #include #include "CGUITTFont.h" +#include "CMeshBuffer.h" +#include "IFileSystem.h" +#include "IGUIEnvironment.h" +#include "IMeshManipulator.h" +#include "IMeshSceneNode.h" +#include "ISceneManager.h" +#include "ISceneNode.h" namespace irr { diff --git a/src/irrlicht_changes/CGUITTFont.h b/src/irrlicht_changes/CGUITTFont.h index b67d518ae..f8e9d8896 100644 --- a/src/irrlicht_changes/CGUITTFont.h +++ b/src/irrlicht_changes/CGUITTFont.h @@ -32,10 +32,14 @@ #pragma once -#include #include -#include #include +#include "IGUIEnvironment.h" +#include "IGUIFont.h" +#include "ISceneManager.h" +#include "IVideoDriver.h" +#include "IrrlichtDevice.h" +#include "SMesh.h" #include "util/enriched_string.h" #include "util/basic_macros.h" #include FT_FREETYPE_H @@ -64,7 +68,7 @@ namespace gui DISABLE_CLASS_COPY(SGUITTGlyph); //! This class would be trivially copyable except for the reference count on `surface`. - SGUITTGlyph(SGUITTGlyph &&other) : + SGUITTGlyph(SGUITTGlyph &&other) noexcept : isLoaded(other.isLoaded), glyph_page(other.glyph_page), source_rect(other.source_rect), diff --git a/src/unittest/test_irr_gltf_mesh_loader.cpp b/src/unittest/test_irr_gltf_mesh_loader.cpp index 6125ab026..2d87db4e3 100644 --- a/src/unittest/test_irr_gltf_mesh_loader.cpp +++ b/src/unittest/test_irr_gltf_mesh_loader.cpp @@ -1,7 +1,6 @@ // Minetest // SPDX-License-Identifier: LGPL-2.1-or-later -#include "EDriverTypes.h" #include "content/subgames.h" #include "filesys.h" @@ -9,8 +8,12 @@ #include "irr_v2d.h" #include "irr_ptr.h" +#include "EDriverTypes.h" +#include "IFileSystem.h" +#include "IReadFile.h" +#include "ISceneManager.h" #include "ISkinnedMesh.h" -#include +#include "irrlicht.h" #include "catch.h" From d4daa9fd40f7a91ad6536ebef10553763cefac13 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Fri, 18 Oct 2024 11:59:02 +0200 Subject: [PATCH 033/178] Fix build error due to missing include --- src/client/clientlauncher.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/client/clientlauncher.cpp b/src/client/clientlauncher.cpp index 938378df8..a78872155 100644 --- a/src/client/clientlauncher.cpp +++ b/src/client/clientlauncher.cpp @@ -34,6 +34,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "clientlauncher.h" #include "version.h" #include "renderingengine.h" +#include "settings.h" #include "util/tracy_wrapper.h" #include #include From aa273119f292e52df8d99f663df5337bac31556d Mon Sep 17 00:00:00 2001 From: sfan5 Date: Tue, 22 Oct 2024 23:04:46 +0200 Subject: [PATCH 034/178] Irrlicht: Use EGL over GLX (#15286) --- irr/include/SExposedVideoData.h | 7 - irr/src/CEGLManager.cpp | 116 ++++++--- irr/src/CEGLManager.h | 7 + irr/src/CGLXManager.cpp | 401 -------------------------------- irr/src/CGLXManager.h | 76 ------ irr/src/CIrrDeviceLinux.cpp | 50 ++-- irr/src/CMakeLists.txt | 13 +- irr/src/COpenGLDriver.cpp | 6 +- 8 files changed, 128 insertions(+), 548 deletions(-) delete mode 100644 irr/src/CGLXManager.cpp delete mode 100644 irr/src/CGLXManager.h diff --git a/irr/include/SExposedVideoData.h b/irr/include/SExposedVideoData.h index 346bd037c..9befcb15b 100644 --- a/irr/include/SExposedVideoData.h +++ b/irr/include/SExposedVideoData.h @@ -63,12 +63,6 @@ struct SExposedVideoData void *Window; }; - struct SOpenGLFB - { - //! The EGLNativeWindowType object. - void *Window; - }; - struct SOGLESAndroid { //! The ANativeWindow object. @@ -80,7 +74,6 @@ struct SExposedVideoData SOpenGLWin32 OpenGLWin32; SOpenGLLinux OpenGLLinux; SOpenGLOSX OpenGLOSX; - SOpenGLFB OpenGLFB; SOGLESAndroid OGLESAndroid; }; }; diff --git a/irr/src/CEGLManager.cpp b/irr/src/CEGLManager.cpp index daaa64fdf..2f2a412ee 100644 --- a/irr/src/CEGLManager.cpp +++ b/irr/src/CEGLManager.cpp @@ -40,32 +40,26 @@ bool CEGLManager::initialize(const SIrrlichtCreationParameters ¶ms, const SE if (EglWindow != 0 && EglDisplay != EGL_NO_DISPLAY) return true; - // Window is depend on platform. + // Window is depend on platform. + setWindow(Data); #if defined(_IRR_COMPILE_WITH_WINDOWS_DEVICE_) - EglWindow = (NativeWindowType)Data.OpenGLWin32.HWnd; - Data.OpenGLWin32.HDc = GetDC((HWND)EglWindow); EglDisplay = eglGetDisplay((NativeDisplayType)Data.OpenGLWin32.HDc); #elif defined(_IRR_EMSCRIPTEN_PLATFORM_) - EglWindow = 0; EglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY); #elif defined(_IRR_COMPILE_WITH_X11_DEVICE_) - EglWindow = (NativeWindowType)Data.OpenGLLinux.X11Window; EglDisplay = eglGetDisplay((NativeDisplayType)Data.OpenGLLinux.X11Display); -#elif defined(_IRR_COMPILE_WITH_FB_DEVICE_) - EglWindow = (NativeWindowType)Data.OpenGLFB.Window; - EglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY); #endif // We must check if EGL display is valid. if (EglDisplay == EGL_NO_DISPLAY) { - os::Printer::log("Could not get EGL display."); + os::Printer::log("Could not get EGL display.", ELL_ERROR); terminate(); return false; } // Initialize EGL here. if (!eglInitialize(EglDisplay, &MajorVersion, &MinorVersion)) { - os::Printer::log("Could not initialize EGL display."); + os::Printer::log("Could not initialize EGL display.", ELL_ERROR); EglDisplay = EGL_NO_DISPLAY; terminate(); @@ -76,6 +70,22 @@ bool CEGLManager::initialize(const SIrrlichtCreationParameters ¶ms, const SE return true; } +void CEGLManager::setWindow(const SExposedVideoData &inData) +{ +#if defined(_IRR_COMPILE_WITH_WINDOWS_DEVICE_) + Data.OpenGLWin32.HWnd = inData.OpenGLWin32.HWnd; + if (Data.OpenGLWin32.HWnd) { + EglWindow = (NativeWindowType)Data.OpenGLWin32.HWnd; + Data.OpenGLWin32.HDc = GetDC((HWND)EglWindow); + } +#elif defined(_IRR_EMSCRIPTEN_PLATFORM_) + EglWindow = 0; +#elif defined(_IRR_COMPILE_WITH_X11_DEVICE_) + Data.OpenGLLinux.X11Window = inData.OpenGLLinux.X11Window; + EglWindow = (NativeWindowType)Data.OpenGLLinux.X11Window; +#endif +} + void CEGLManager::terminate() { if (EglWindow == 0 && EglDisplay == EGL_NO_DISPLAY) @@ -108,20 +118,16 @@ bool CEGLManager::generateSurface() if (EglSurface != EGL_NO_SURFACE) return true; - // We should assign new WindowID on platforms, where WindowID may change at runtime, - // at this time only Android support this feature. - // this needs an update method instead! - + if (!EglConfig) { #if defined(_IRR_EMSCRIPTEN_PLATFORM_) - // eglChooseConfig is currently only implemented as stub in emscripten (version 1.37.22 at point of writing) - // But the other solution would also be fine as it also only generates a single context so there is not much to choose from. - EglConfig = chooseConfig(ECS_IRR_CHOOSE); + EglConfig = chooseConfig(ECS_IRR_CHOOSE); #else - EglConfig = chooseConfig(ECS_EGL_CHOOSE_FIRST_LOWER_EXPECTATIONS); + EglConfig = chooseConfig(ECS_EGL_CHOOSE_FIRST_LOWER_EXPECTATIONS); #endif + } - if (EglConfig == 0) { - os::Printer::log("Could not get config for EGL display."); + if (!EglConfig) { + os::Printer::log("Could not choose EGL config.", ELL_ERROR); return false; } @@ -132,11 +138,26 @@ bool CEGLManager::generateSurface() EglSurface = eglCreateWindowSurface(EglDisplay, EglConfig, 0, 0); if (EGL_NO_SURFACE == EglSurface) - os::Printer::log("Could not create EGL surface."); + os::Printer::log("Could not create EGL surface.", ELL_ERROR); #ifdef EGL_VERSION_1_2 - if (MinorVersion > 1) - eglBindAPI(EGL_OPENGL_ES_API); + if (MinorVersion > 1) { + EGLBoolean ok = 0; + switch (Params.DriverType) { + case EDT_OGLES2: + case EDT_WEBGL1: + ok = eglBindAPI(EGL_OPENGL_ES_API); + break; + case EDT_OPENGL: + ok = eglBindAPI(EGL_OPENGL_API); + default: + break; + } + if (!ok) { + os::Printer::log("Could not bind EGL API.", ELL_ERROR); + return false; + } + } #endif if (Params.Vsync) @@ -145,6 +166,26 @@ bool CEGLManager::generateSurface() return true; } +EGLint CEGLManager::getNativeVisualID() +{ + if (!EglConfig) { +#if defined(_IRR_EMSCRIPTEN_PLATFORM_) + EglConfig = chooseConfig(ECS_IRR_CHOOSE); +#else + EglConfig = chooseConfig(ECS_EGL_CHOOSE_FIRST_LOWER_EXPECTATIONS); +#endif + } + + if (!EglConfig) { + os::Printer::log("Could not choose EGL config.", ELL_WARNING); + return 0; + } + + EGLint ret = 0; + eglGetConfigAttrib(EglDisplay, EglConfig, EGL_NATIVE_VISUAL_ID, &ret); + return ret; +} + EGLConfig CEGLManager::chooseConfig(EConfigStyle confStyle) { EGLConfig configResult = 0; @@ -156,6 +197,8 @@ EGLConfig CEGLManager::chooseConfig(EConfigStyle confStyle) case EDT_WEBGL1: eglOpenGLBIT = EGL_OPENGL_ES2_BIT; break; + case EDT_OPENGL: + eglOpenGLBIT = EGL_OPENGL_BIT; default: break; } @@ -296,6 +339,8 @@ EGLConfig CEGLManager::chooseConfig(EConfigStyle confStyle) } delete[] configs; + } else { + _IRR_DEBUG_BREAK_IF(1) } return configResult; @@ -453,33 +498,36 @@ bool CEGLManager::generateContext() if (EglContext != EGL_NO_CONTEXT) return true; - EGLint OpenGLESVersion = 0; + std::vector ContextAttrib; switch (Params.DriverType) { case EDT_OGLES2: case EDT_WEBGL1: - OpenGLESVersion = 2; +#ifdef EGL_VERSION_1_3 + ContextAttrib.push_back(EGL_CONTEXT_CLIENT_VERSION); + ContextAttrib.push_back(2); +#endif + break; + case EDT_OPENGL: +#ifdef EGL_VERSION_1_5 + ContextAttrib.push_back(EGL_CONTEXT_OPENGL_PROFILE_MASK); + ContextAttrib.push_back(EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT); +#endif break; default: break; } - EGLint ContextAttrib[] = { -#ifdef EGL_VERSION_1_3 - EGL_CONTEXT_CLIENT_VERSION, OpenGLESVersion, -#endif - EGL_NONE, 0, - }; + ContextAttrib.push_back(EGL_NONE); + ContextAttrib.push_back(0); - EglContext = eglCreateContext(EglDisplay, EglConfig, EGL_NO_CONTEXT, ContextAttrib); + EglContext = eglCreateContext(EglDisplay, EglConfig, EGL_NO_CONTEXT, ContextAttrib.data()); if (testEGLError()) { os::Printer::log("Could not create EGL context.", ELL_ERROR); return false; } - os::Printer::log("EGL context created with OpenGLESVersion: ", core::stringc((int)OpenGLESVersion), ELL_DEBUG); - return true; } diff --git a/irr/src/CEGLManager.h b/irr/src/CEGLManager.h index 49371e469..2a1338b9d 100644 --- a/irr/src/CEGLManager.h +++ b/irr/src/CEGLManager.h @@ -31,6 +31,10 @@ public: aren't create. */ bool initialize(const SIrrlichtCreationParameters ¶ms, const SExposedVideoData &data) override; + // Set EGL window. + // Call this if window is not known at time of initialize() + void setWindow(const SExposedVideoData &data); + // Terminate EGL. /* Terminate EGL context. This method break both existed surface and context. */ void terminate() override; @@ -66,6 +70,9 @@ public: // Swap buffers. bool swapBuffers() override; + // Returns native visual ID. Will choose config if not already done. + EGLint getNativeVisualID(); + protected: enum EConfigStyle { diff --git a/irr/src/CGLXManager.cpp b/irr/src/CGLXManager.cpp deleted file mode 100644 index 8593621b7..000000000 --- a/irr/src/CGLXManager.cpp +++ /dev/null @@ -1,401 +0,0 @@ -// Copyright (C) 2013 Christian Stehno -// This file is part of the "Irrlicht Engine". -// For conditions of distribution and use, see copyright notice in Irrlicht.h - -#include "CGLXManager.h" - -#ifdef _IRR_COMPILE_WITH_GLX_MANAGER_ - -#include "os.h" - -#define GL_GLEXT_LEGACY 1 -#define GLX_GLXEXT_LEGACY 1 -#include -#include -#include -#include - -namespace irr -{ -namespace video -{ - -CGLXManager::CGLXManager(const SIrrlichtCreationParameters ¶ms, const SExposedVideoData &videodata, int screennr) : - Params(params), PrimaryContext(videodata), VisualInfo(0), glxFBConfig(0), GlxWin(0) -{ -#ifdef _DEBUG - setDebugName("CGLXManager"); -#endif - - CurrentContext.OpenGLLinux.X11Display = PrimaryContext.OpenGLLinux.X11Display; - - int major, minor; - Display *display = (Display *)PrimaryContext.OpenGLLinux.X11Display; - const bool isAvailableGLX = glXQueryExtension(display, &major, &minor); - - if (isAvailableGLX && glXQueryVersion(display, &major, &minor)) { -#if defined(GLX_VERSION_1_3) - typedef GLXFBConfig *(*PFNGLXCHOOSEFBCONFIGPROC)(Display *dpy, int screen, const int *attrib_list, int *nelements); - - PFNGLXCHOOSEFBCONFIGPROC glxChooseFBConfig = (PFNGLXCHOOSEFBCONFIGPROC)glXGetProcAddress(reinterpret_cast("glXChooseFBConfig")); - if (major == 1 && minor > 2 && glxChooseFBConfig) { - os::Printer::log("GLX >= 1.3", ELL_DEBUG); - // attribute array for the draw buffer - int visualAttrBuffer[] = { - GLX_RENDER_TYPE, - GLX_RGBA_BIT, - GLX_RED_SIZE, - 4, - GLX_GREEN_SIZE, - 4, - GLX_BLUE_SIZE, - 4, - GLX_ALPHA_SIZE, - Params.WithAlphaChannel ? 1 : 0, - GLX_DEPTH_SIZE, - Params.ZBufferBits, // 10,11 - GLX_DOUBLEBUFFER, - Params.Doublebuffer ? True : False, - GLX_STENCIL_SIZE, - Params.Stencilbuffer ? 1 : 0, -#if defined(GLX_VERSION_1_4) && defined(GLX_SAMPLE_BUFFERS) // we need to check the extension string! - GLX_SAMPLE_BUFFERS, - 1, - GLX_SAMPLES, - Params.AntiAlias, // 18,19 -#elif defined(GLX_ARB_multisample) - GLX_SAMPLE_BUFFERS_ARB, - 1, - GLX_SAMPLES_ARB, - Params.AntiAlias, // 18,19 -#elif defined(GLX_SGIS_multisample) - GLX_SAMPLE_BUFFERS_SGIS, - 1, - GLX_SAMPLES_SGIS, - Params.AntiAlias, // 18,19 -#endif - GLX_STEREO, - Params.Stereobuffer ? True : False, - None, - }; - - GLXFBConfig *configList = 0; - int nitems = 0; - if (Params.AntiAlias < 2) { - visualAttrBuffer[17] = 0; - visualAttrBuffer[19] = 0; - } - // first round with unchanged values - { - configList = glxChooseFBConfig(display, screennr, visualAttrBuffer, &nitems); - if (!configList && Params.AntiAlias) { - while (!configList && (visualAttrBuffer[19] > 1)) { - visualAttrBuffer[19] -= 1; - configList = glxChooseFBConfig(display, screennr, visualAttrBuffer, &nitems); - } - if (!configList) { - visualAttrBuffer[17] = 0; - visualAttrBuffer[19] = 0; - configList = glxChooseFBConfig(display, screennr, visualAttrBuffer, &nitems); - if (configList) { - os::Printer::log("No FSAA available.", ELL_WARNING); - Params.AntiAlias = 0; - } else { - // reenable multisampling - visualAttrBuffer[17] = 1; - visualAttrBuffer[19] = Params.AntiAlias; - } - } - } - } - // Next try with flipped stencil buffer value - // If the first round was with stencil flag it's now without - // Other way round also makes sense because some configs - // only have depth buffer combined with stencil buffer - if (!configList) { - if (Params.Stencilbuffer) - os::Printer::log("No stencilbuffer available, disabling stencil shadows.", ELL_WARNING); - Params.Stencilbuffer = !Params.Stencilbuffer; - visualAttrBuffer[15] = Params.Stencilbuffer ? 1 : 0; - - configList = glxChooseFBConfig(display, screennr, visualAttrBuffer, &nitems); - if (!configList && Params.AntiAlias) { - while (!configList && (visualAttrBuffer[19] > 1)) { - visualAttrBuffer[19] -= 1; - configList = glxChooseFBConfig(display, screennr, visualAttrBuffer, &nitems); - } - if (!configList) { - visualAttrBuffer[17] = 0; - visualAttrBuffer[19] = 0; - configList = glxChooseFBConfig(display, screennr, visualAttrBuffer, &nitems); - if (configList) { - os::Printer::log("No FSAA available.", ELL_WARNING); - Params.AntiAlias = 0; - } else { - // reenable multisampling - visualAttrBuffer[17] = 1; - visualAttrBuffer[19] = Params.AntiAlias; - } - } - } - } - // Next try without double buffer - if (!configList && Params.Doublebuffer) { - os::Printer::log("No doublebuffering available.", ELL_WARNING); - Params.Doublebuffer = false; - visualAttrBuffer[13] = GLX_DONT_CARE; - Params.Stencilbuffer = false; - visualAttrBuffer[15] = 0; - configList = glxChooseFBConfig(display, screennr, visualAttrBuffer, &nitems); - if (!configList && Params.AntiAlias) { - while (!configList && (visualAttrBuffer[19] > 1)) { - visualAttrBuffer[19] -= 1; - configList = glxChooseFBConfig(display, screennr, visualAttrBuffer, &nitems); - } - if (!configList) { - visualAttrBuffer[17] = 0; - visualAttrBuffer[19] = 0; - configList = glxChooseFBConfig(display, screennr, visualAttrBuffer, &nitems); - if (configList) { - os::Printer::log("No FSAA available.", ELL_WARNING); - Params.AntiAlias = 0; - } else { - // reenable multisampling - visualAttrBuffer[17] = 1; - visualAttrBuffer[19] = Params.AntiAlias; - } - } - } - } - if (configList) { - glxFBConfig = configList[0]; - XFree(configList); - typedef XVisualInfo *(*PFNGLXGETVISUALFROMFBCONFIGPROC)(Display *dpy, GLXFBConfig config); - PFNGLXGETVISUALFROMFBCONFIGPROC glxGetVisualFromFBConfig = (PFNGLXGETVISUALFROMFBCONFIGPROC)glXGetProcAddress(reinterpret_cast("glXGetVisualFromFBConfig")); - if (glxGetVisualFromFBConfig) - VisualInfo = glxGetVisualFromFBConfig(display, (GLXFBConfig)glxFBConfig); - } - } else -#endif - { - // attribute array for the draw buffer - int visualAttrBuffer[] = { - GLX_RGBA, GLX_USE_GL, - GLX_RED_SIZE, 4, - GLX_GREEN_SIZE, 4, - GLX_BLUE_SIZE, 4, - GLX_ALPHA_SIZE, Params.WithAlphaChannel ? 1 : 0, - GLX_DEPTH_SIZE, Params.ZBufferBits, - GLX_STENCIL_SIZE, Params.Stencilbuffer ? 1 : 0, // 12,13 - // The following attributes have no flags, but are - // either present or not. As a no-op we use - // GLX_USE_GL, which is silently ignored by glXChooseVisual - Params.Doublebuffer ? GLX_DOUBLEBUFFER : GLX_USE_GL, // 14 - Params.Stereobuffer ? GLX_STEREO : GLX_USE_GL, // 15 - None, - }; - - VisualInfo = glXChooseVisual(display, screennr, visualAttrBuffer); - if (!VisualInfo) { - if (Params.Stencilbuffer) - os::Printer::log("No stencilbuffer available, disabling.", ELL_WARNING); - Params.Stencilbuffer = !Params.Stencilbuffer; - visualAttrBuffer[13] = Params.Stencilbuffer ? 1 : 0; - - VisualInfo = glXChooseVisual(display, screennr, visualAttrBuffer); - if (!VisualInfo && Params.Doublebuffer) { - os::Printer::log("No doublebuffering available.", ELL_WARNING); - Params.Doublebuffer = false; - visualAttrBuffer[14] = GLX_USE_GL; - VisualInfo = glXChooseVisual(display, screennr, visualAttrBuffer); - } - } - } - } else - os::Printer::log("No GLX support available. OpenGL driver will not work.", ELL_WARNING); -} - -CGLXManager::~CGLXManager() -{ -} - -bool CGLXManager::initialize(const SIrrlichtCreationParameters ¶ms, const SExposedVideoData &videodata) -{ - // store params - Params = params; - - // set display - CurrentContext.OpenGLLinux.X11Display = videodata.OpenGLLinux.X11Display; - - // now get new window - CurrentContext.OpenGLLinux.X11Window = videodata.OpenGLLinux.X11Window; - if (!PrimaryContext.OpenGLLinux.X11Window) { - PrimaryContext.OpenGLLinux.X11Window = CurrentContext.OpenGLLinux.X11Window; - } - - return true; -} - -void CGLXManager::terminate() -{ - memset((void *)&CurrentContext, 0, sizeof(CurrentContext)); -} - -bool CGLXManager::generateSurface() -{ - if (glxFBConfig) { - GlxWin = glXCreateWindow((Display *)CurrentContext.OpenGLLinux.X11Display, (GLXFBConfig)glxFBConfig, CurrentContext.OpenGLLinux.X11Window, NULL); - if (!GlxWin) { - os::Printer::log("Could not create GLX window.", ELL_WARNING); - return false; - } - - CurrentContext.OpenGLLinux.GLXWindow = GlxWin; - } else { - CurrentContext.OpenGLLinux.GLXWindow = CurrentContext.OpenGLLinux.X11Window; - } - return true; -} - -void CGLXManager::destroySurface() -{ - if (GlxWin) - glXDestroyWindow((Display *)CurrentContext.OpenGLLinux.X11Display, GlxWin); -} - -#if defined(GLX_ARB_create_context) -static int IrrIgnoreError(Display *display, XErrorEvent *event) -{ - char msg[256]; - XGetErrorText(display, event->error_code, msg, 256); - os::Printer::log("Ignoring an X error", msg, ELL_DEBUG); - return 0; -} -#endif - -bool CGLXManager::generateContext() -{ - GLXContext context = 0; - - if (glxFBConfig) { - if (GlxWin) { -#if defined(GLX_ARB_create_context) - - PFNGLXCREATECONTEXTATTRIBSARBPROC glxCreateContextAttribsARB = (PFNGLXCREATECONTEXTATTRIBSARBPROC)glXGetProcAddress(reinterpret_cast("glXCreateContextAttribsARB")); - - if (glxCreateContextAttribsARB) { - os::Printer::log("GLX with GLX_ARB_create_context", ELL_DEBUG); - int contextAttrBuffer[] = { - GLX_CONTEXT_MAJOR_VERSION_ARB, 3, - GLX_CONTEXT_MINOR_VERSION_ARB, 0, - // GLX_CONTEXT_PROFILE_MASK_ARB, GLX_CONTEXT_CORE_PROFILE_BIT_ARB, - None}; - XErrorHandler old = XSetErrorHandler(IrrIgnoreError); - context = glxCreateContextAttribsARB((Display *)CurrentContext.OpenGLLinux.X11Display, (GLXFBConfig)glxFBConfig, NULL, True, contextAttrBuffer); - XSetErrorHandler(old); - // transparently fall back to legacy call - } - if (!context) -#endif - { - // create glx context - context = glXCreateNewContext((Display *)CurrentContext.OpenGLLinux.X11Display, (GLXFBConfig)glxFBConfig, GLX_RGBA_TYPE, NULL, True); - if (!context) { - os::Printer::log("Could not create GLX rendering context.", ELL_WARNING); - return false; - } - } - } else { - os::Printer::log("GLX window was not properly created.", ELL_WARNING); - return false; - } - } else { - context = glXCreateContext((Display *)CurrentContext.OpenGLLinux.X11Display, VisualInfo, NULL, True); - if (!context) { - os::Printer::log("Could not create GLX rendering context.", ELL_WARNING); - return false; - } - } - CurrentContext.OpenGLLinux.X11Context = context; - return true; -} - -const SExposedVideoData &CGLXManager::getContext() const -{ - return CurrentContext; -} - -bool CGLXManager::activateContext(const SExposedVideoData &videoData, bool restorePrimaryOnZero) -{ - // TODO: handle restorePrimaryOnZero - - if (videoData.OpenGLLinux.X11Window) { - if (videoData.OpenGLLinux.X11Display && videoData.OpenGLLinux.X11Context) { - if (!glXMakeCurrent((Display *)videoData.OpenGLLinux.X11Display, videoData.OpenGLLinux.GLXWindow, (GLXContext)videoData.OpenGLLinux.X11Context)) { - os::Printer::log("Context activation failed."); - return false; - } else { - CurrentContext.OpenGLLinux.GLXWindow = videoData.OpenGLLinux.GLXWindow; - CurrentContext.OpenGLLinux.X11Window = videoData.OpenGLLinux.X11Window; - CurrentContext.OpenGLLinux.X11Display = videoData.OpenGLLinux.X11Display; - } - } else { - // in case we only got a window ID, try with the existing values for display and context - if (!glXMakeCurrent((Display *)PrimaryContext.OpenGLLinux.X11Display, videoData.OpenGLLinux.GLXWindow, (GLXContext)PrimaryContext.OpenGLLinux.X11Context)) { - os::Printer::log("Context activation failed."); - return false; - } else { - CurrentContext.OpenGLLinux.GLXWindow = videoData.OpenGLLinux.GLXWindow; - CurrentContext.OpenGLLinux.X11Window = videoData.OpenGLLinux.X11Window; - CurrentContext.OpenGLLinux.X11Display = PrimaryContext.OpenGLLinux.X11Display; - } - } - } else if (!restorePrimaryOnZero && !videoData.OpenGLLinux.X11Window && !videoData.OpenGLLinux.X11Display) { - if (!glXMakeCurrent((Display *)PrimaryContext.OpenGLLinux.X11Display, None, NULL)) { - os::Printer::log("Render Context reset failed."); - return false; - } - CurrentContext.OpenGLLinux.X11Window = 0; - CurrentContext.OpenGLLinux.X11Display = 0; - } - // set back to main context - else if (CurrentContext.OpenGLLinux.X11Display != PrimaryContext.OpenGLLinux.X11Display) { - if (!glXMakeCurrent((Display *)PrimaryContext.OpenGLLinux.X11Display, PrimaryContext.OpenGLLinux.X11Window, (GLXContext)PrimaryContext.OpenGLLinux.X11Context)) { - os::Printer::log("Context activation failed."); - return false; - } else { - CurrentContext = PrimaryContext; - } - } - return true; -} - -void CGLXManager::destroyContext() -{ - if (CurrentContext.OpenGLLinux.X11Context) { - if (GlxWin) { - if (!glXMakeContextCurrent((Display *)CurrentContext.OpenGLLinux.X11Display, None, None, NULL)) - os::Printer::log("Could not release glx context.", ELL_WARNING); - } else { - if (!glXMakeCurrent((Display *)CurrentContext.OpenGLLinux.X11Display, None, NULL)) - os::Printer::log("Could not release glx context.", ELL_WARNING); - } - glXDestroyContext((Display *)CurrentContext.OpenGLLinux.X11Display, (GLXContext)CurrentContext.OpenGLLinux.X11Context); - } -} - -void *CGLXManager::getProcAddress(const std::string &procName) -{ - return (void *)glXGetProcAddressARB(reinterpret_cast(procName.c_str())); -} - -bool CGLXManager::swapBuffers() -{ - glXSwapBuffers((Display *)CurrentContext.OpenGLLinux.X11Display, CurrentContext.OpenGLLinux.GLXWindow); - return true; -} - -} -} - -#endif diff --git a/irr/src/CGLXManager.h b/irr/src/CGLXManager.h deleted file mode 100644 index f940d4316..000000000 --- a/irr/src/CGLXManager.h +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright (C) 2013 Christian Stehno -// This file is part of the "Irrlicht Engine". -// For conditions of distribution and use, see copyright notice in Irrlicht.h - -#pragma once - -#ifdef _IRR_COMPILE_WITH_GLX_MANAGER_ - -#include "SIrrCreationParameters.h" -#include "SExposedVideoData.h" -#include "IContextManager.h" -#include "SColor.h" -#include -#include - -// we can't include glx.h here, because gl.h has incompatible types with ogl es headers and it -// cause redefinition errors, thats why we use ugly trick with void* types and casts. - -namespace irr -{ -namespace video -{ -// GLX manager. -class CGLXManager : public IContextManager -{ -public: - //! Constructor. - CGLXManager(const SIrrlichtCreationParameters ¶ms, const SExposedVideoData &videodata, int screennr); - - //! Destructor - ~CGLXManager(); - - // Initialize - bool initialize(const SIrrlichtCreationParameters ¶ms, const SExposedVideoData &data) override; - - // Terminate - void terminate() override; - - // Create surface. - bool generateSurface() override; - - // Destroy surface. - void destroySurface() override; - - // Create context. - bool generateContext() override; - - // Destroy context. - void destroyContext() override; - - //! Get current context - const SExposedVideoData &getContext() const override; - - //! Change render context, disable old and activate new defined by videoData - bool activateContext(const SExposedVideoData &videoData, bool restorePrimaryOnZero) override; - - // Get procedure address. - void *getProcAddress(const std::string &procName) override; - - // Swap buffers. - bool swapBuffers() override; - - XVisualInfo *getVisual() const { return VisualInfo; } // return XVisualInfo - -private: - SIrrlichtCreationParameters Params; - SExposedVideoData PrimaryContext; - SExposedVideoData CurrentContext; - XVisualInfo *VisualInfo; - void *glxFBConfig; // GLXFBConfig - XID GlxWin; // GLXWindow -}; -} -} - -#endif diff --git a/irr/src/CIrrDeviceLinux.cpp b/irr/src/CIrrDeviceLinux.cpp index c00f52380..bb6968f03 100644 --- a/irr/src/CIrrDeviceLinux.cpp +++ b/irr/src/CIrrDeviceLinux.cpp @@ -34,14 +34,10 @@ #include #endif -#if defined(_IRR_COMPILE_WITH_OGLES2_) +#if defined(_IRR_COMPILE_WITH_OPENGL_) || defined(_IRR_COMPILE_WITH_OGLES2_) #include "CEGLManager.h" #endif -#if defined(_IRR_COMPILE_WITH_OPENGL_) -#include "CGLXManager.h" -#endif - #ifdef _IRR_LINUX_XCURSOR_ #include #endif @@ -152,8 +148,20 @@ CIrrDeviceLinux::CIrrDeviceLinux(const SIrrlichtCreationParameters ¶m) : // without it, multi-threaded GL drivers may crash XInitThreads(); - // create window if (CreationParams.DriverType != video::EDT_NULL) { + // initialize EGL so it can choose a config +#ifdef _IRR_COMPILE_WITH_X11_ +#if defined(_IRR_COMPILE_WITH_OPENGL_) || defined(_IRR_COMPILE_WITH_OGLES2_) + video::SExposedVideoData data; + data.OpenGLLinux.X11Window = 0; // not created yet, but that's ok + data.OpenGLLinux.X11Display = XDisplay; + + ContextManager = new video::CEGLManager(); + if (!ContextManager->initialize(CreationParams, data)) + return; +#endif +#endif + // create the window, only if we do not use the null device if (!createWindow()) return; @@ -397,14 +405,14 @@ bool CIrrDeviceLinux::createWindow() if (WMCheck != None) HasNetWM = true; -#if defined(_IRR_COMPILE_WITH_OPENGL_) - // don't use the XVisual with OpenGL, because it ignores all requested - // properties of the CreationParams - if (CreationParams.DriverType == video::EDT_OPENGL) { - video::SExposedVideoData data; - data.OpenGLLinux.X11Display = XDisplay; - ContextManager = new video::CGLXManager(CreationParams, data, Screennr); - VisualInfo = ((video::CGLXManager *)ContextManager)->getVisual(); +#if defined(_IRR_COMPILE_WITH_OPENGL_) || defined(_IRR_COMPILE_WITH_OGLES2_) + if (ContextManager) { + auto *c = static_cast(ContextManager); + os::Printer::log("Using X visual from EGL"); + XVisualInfo templ; + int n; + templ.visualid = static_cast(c->getNativeVisualID()); + VisualInfo = XGetVisualInfo(XDisplay, VisualIDMask, &templ, &n); } #endif @@ -543,9 +551,7 @@ void CIrrDeviceLinux::createDriver() { video::SExposedVideoData data; data.OpenGLLinux.X11Window = XWindow; - data.OpenGLLinux.X11Display = XDisplay; - - ContextManager->initialize(CreationParams, data); + static_cast(ContextManager)->setWindow(data); VideoDriver = video::createOpenGLDriver(CreationParams, FileSystem, ContextManager); } @@ -558,10 +564,7 @@ void CIrrDeviceLinux::createDriver() { video::SExposedVideoData data; data.OpenGLLinux.X11Window = XWindow; - data.OpenGLLinux.X11Display = XDisplay; - - ContextManager = new video::CEGLManager(); - ContextManager->initialize(CreationParams, data); + static_cast(ContextManager)->setWindow(data); VideoDriver = video::createOGLES2Driver(CreationParams, FileSystem, ContextManager); } @@ -574,10 +577,7 @@ void CIrrDeviceLinux::createDriver() { video::SExposedVideoData data; data.OpenGLLinux.X11Window = XWindow; - data.OpenGLLinux.X11Display = XDisplay; - - ContextManager = new video::CEGLManager(); - ContextManager->initialize(CreationParams, data); + static_cast(ContextManager)->setWindow(data); VideoDriver = video::createWebGL1Driver(CreationParams, FileSystem, ContextManager); } diff --git a/irr/src/CMakeLists.txt b/irr/src/CMakeLists.txt index 768ee8d37..a31f0790d 100644 --- a/irr/src/CMakeLists.txt +++ b/irr/src/CMakeLists.txt @@ -158,7 +158,7 @@ if(ENABLE_OPENGL) if(DEVICE STREQUAL "WINDOWS") add_definitions(-D_IRR_COMPILE_WITH_WGL_MANAGER_) elseif(DEVICE STREQUAL "X11") - add_definitions(-D_IRR_COMPILE_WITH_GLX_MANAGER_) + add_definitions(-D_IRR_COMPILE_WITH_EGL_MANAGER_) elseif(DEVICE STREQUAL "OSX") add_definitions(-D_IRR_COMPILE_WITH_NSOGL_MANAGER_) endif() @@ -213,7 +213,15 @@ if(ENABLE_GLES2) find_package(OpenGLES2 REQUIRED) endif() if(ENABLE_OPENGL) - find_package(OpenGL REQUIRED) + if(DEVICE STREQUAL "X11") + # use components so we can grab EGL + find_package(OpenGL REQUIRED COMPONENTS EGL OpenGL) + set(OPENGL_LIBRARIES OpenGL::GL) + set(EGL_INCLUDE_DIR OpenGL::EGL) + set(EGL_LIBRARY OpenGL::EGL) + else() + find_package(OpenGL REQUIRED) + endif() endif() if(USE_SDL2) if(NOT ANDROID) @@ -330,7 +338,6 @@ target_link_libraries(IRROBJ PRIVATE IRRMESHOBJ) set(IRRDRVROBJ CNullDriver.cpp - CGLXManager.cpp CWGLManager.cpp CEGLManager.cpp CSDLManager.cpp diff --git a/irr/src/COpenGLDriver.cpp b/irr/src/COpenGLDriver.cpp index e5f070f8e..ee63fc845 100644 --- a/irr/src/COpenGLDriver.cpp +++ b/irr/src/COpenGLDriver.cpp @@ -40,8 +40,10 @@ COpenGLDriver::COpenGLDriver(const SIrrlichtCreationParameters ¶ms, io::IFil bool COpenGLDriver::initDriver() { - ContextManager->generateSurface(); - ContextManager->generateContext(); + if (!ContextManager->generateSurface()) + return false; + if (!ContextManager->generateContext()) + return false; ExposedData = ContextManager->getContext(); ContextManager->activateContext(ExposedData, false); GL.LoadAllProcedures(ContextManager); From d52e4cdbdb2e40a3774756ea5e168cc70b50c4fb Mon Sep 17 00:00:00 2001 From: Zughy <63455151+Zughy@users.noreply.github.com> Date: Tue, 22 Oct 2024 23:05:41 +0200 Subject: [PATCH 035/178] DOCS: replace Minetest -> Luanti, `minetest.` -> `core.` (#15292) Co-authored-by: grorp --- README.md | 10 +- doc/android.md | 22 +- doc/breakages.md | 4 +- doc/builtin_entities.md | 8 +- doc/client_lua_api.md | 249 +++--- doc/compiling/README.md | 10 +- doc/compiling/windows.md | 4 +- doc/developing/README.md | 2 +- doc/developing/android.md | 2 +- doc/developing/misc.md | 14 +- doc/developing/os-compatibility.md | 6 +- doc/direction.md | 8 +- doc/docker_server.md | 2 +- doc/ides/jetbrains.md | 6 +- doc/ides/visual_studio.md | 2 +- doc/ides/vscode.md | 6 +- doc/lua_api.md | 1341 ++++++++++++++-------------- doc/menu_lua_api.md | 12 +- doc/mkdocs/build.sh | 2 +- doc/protocol.txt | 4 +- doc/texture_packs.md | 10 +- doc/world_format.md | 12 +- misc/redirect.html | 2 +- 23 files changed, 873 insertions(+), 865 deletions(-) diff --git a/README.md b/README.md index 919cb144c..326eedd87 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,13 @@ -Minetest -======== +Luanti (formerly Minetest) +========================== ![Build Status](https://github.com/minetest/minetest/workflows/build/badge.svg) [![Translation status](https://hosted.weblate.org/widgets/minetest/-/svg-badge.svg)](https://hosted.weblate.org/engage/minetest/?utm_source=widget) [![License](https://img.shields.io/badge/license-LGPLv2.1%2B-blue.svg)](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html) -Minetest is a free open-source voxel game engine with easy modding and game creation. +Luanti is a free open-source voxel game engine with easy modding and game creation. -Copyright (C) 2010-2022 Perttu Ahola +Copyright (C) 2010-2024 Perttu Ahola and contributors (see source file comments and the version control log) Table of Contents @@ -106,7 +106,7 @@ Configuration file ------------------ - Default location: `user/minetest.conf` -- This file is created by closing Minetest for the first time. +- This file is created by closing Luanti for the first time. - A specific file can be specified on the command line: `--config ` - A run-in-place build will look for the configuration file in diff --git a/doc/android.md b/doc/android.md index 44e66d7c1..19d7e569b 100644 --- a/doc/android.md +++ b/doc/android.md @@ -1,9 +1,9 @@ -# Minetest Android build -All Minetest builds, including the Android variant, are based on the same code. +# Luanti Android build +All Luanti builds, including the Android variant, are based on the same code. However, additional Java code is used for proper Android integration. ## Controls -Compared to Minetest binaries for PC, the Android port has limited functionality +Compared to Luanti binaries for PC, the Android port has limited functionality due to limited capabilities of common devices. What can be done is described below: While you're playing the game normally (that is, no menu or inventory is @@ -35,7 +35,7 @@ When a menu or inventory is displayed: * Complicated control can be difficult or impossible on Android device ## File Path -There are some settings especially useful for Android users. The Minetest-wide +There are some settings especially useful for Android users. The Luanti-wide configuration file can usually be found at: * Before 5.4.2: @@ -58,7 +58,7 @@ Mobile device generally have less RAM than PC, this setting limit how many mapbl this setting limit max FPS (Frame per second). Default value is 60, which lowest Android device screen refresh rate commonly found, but if you're using an device have lower refresh rate, change this ## Requirements -The minimal and recommended system requirements for Minetest are listed below. +The minimal and recommended system requirements for Luanti are listed below. ### CPU Supported architectures: @@ -67,7 +67,7 @@ Supported architectures: 3. x86 4. x86_64 -CPU architectures similar to ARM or x86 might run Minetest but are not tested. +CPU architectures similar to ARM or x86 might run Luanti but are not tested. ### Minimum 1. Graphics API: OpenGL ES 1.0 @@ -89,9 +89,9 @@ some shader settings cannot be used on OpenGL ES. Changing the graphic driver setting to OpenGL will result in undesirable behavior. ## Building Requirements -In order to build, your PC has to be set up to build Minetest in the usual -manner (see the regular Minetest documentation for how to get this done). -In addition to what is required for Minetest in general, you will need the +In order to build, your PC has to be set up to build Luanti in the usual +manner (see the regular Luanti documentation for how to get this done). +In addition to what is required for Luanti in general, you will need the following software packages. The version number in parenthesis denotes the version that was tested at the time this README was drafted; newer/older versions may or may not work. @@ -104,7 +104,7 @@ Additionally, you'll need to have an Internet connection available on the build system, as the Android build will download some source packages. ## Build -The new build system Minetest Android is fully functional and is designed to +The new build system Luanti Android is fully functional and is designed to speed up and simplify the work, as well as adding the possibility of cross-platform build. You can use `./gradlew assemblerelease` or `./gradlew assembledebug` from the @@ -120,7 +120,7 @@ automatically. Or you can create a `local.properties` file and specify - choose one yourself. * Once your keystore is setup, enter the android subdirectory and create a new - file "ant.properties" there. Add following lines to that file: + file "ant.properties" there. Add the following lines to that file: > key.store= > key.alias=Minetest diff --git a/doc/breakages.md b/doc/breakages.md index 6b3071124..0aded3d92 100644 --- a/doc/breakages.md +++ b/doc/breakages.md @@ -1,4 +1,4 @@ -# Minetest Major Breakages List +# Luanti Major Breakages List This document contains a list of breaking changes to be made in the next major version. This list is largely advisory and items may be reevaluated once the time comes. @@ -8,7 +8,7 @@ This list is largely advisory and items may be reevaluated once the time comes. * remove player gravity multiplier (*2) * `get_sky()` returns a table (without arg) * `game.conf` name/id mess -* remove `depends.txt` / `description.txt` (would simplify ContentDB and Minetest code a little) +* remove `depends.txt` / `description.txt` (would simplify ContentDB and Luanti code a little) * rotate moon texture by 180°, making it coherent with the sun * https://github.com/minetest/minetest/pull/11902 * remove undocumented `set_physics_override(num, num, num)` diff --git a/doc/builtin_entities.md b/doc/builtin_entities.md index 18ff0e0b6..6fd3ffff7 100644 --- a/doc/builtin_entities.md +++ b/doc/builtin_entities.md @@ -1,12 +1,12 @@ # Builtin Entities -Minetest registers two entities by default: Falling nodes and dropped items. +Luanti registers two entities by default: Falling nodes and dropped items. This document describes how they behave and what you can do with them. ## Falling node (`__builtin:falling_node`) -This entity is created by `minetest.check_for_falling` in place of a node +This entity is created by `core.check_for_falling` in place of a node with the special group `falling_node=1`. Falling nodes can also be created -artificially with `minetest.spawn_falling_node`. +artificially with `core.spawn_falling_node`. Needs manual initialization when spawned using `/spawnentity`. @@ -81,7 +81,7 @@ Common cases that spawn a dropped item: * Item dropped by player * The root node of a node with the group `attached_node=1` is removed -* `minetest.add_item` is called +* `core.add_item` is called Needs manual initialization when spawned using `/spawnentity`. diff --git a/doc/client_lua_api.md b/doc/client_lua_api.md index cd651f1b3..715f6aa03 100644 --- a/doc/client_lua_api.md +++ b/doc/client_lua_api.md @@ -1,5 +1,10 @@ -Minetest Lua Client Modding API Reference 5.10.0 -================================================ +Luanti Lua Client Modding API Reference 5.10.0 +============================================== + +**WARNING**: if you're looking for the `minetest` namespace (e.g. `minetest.something`), +it's now called `core` due to the renaming of Luanti (formerly Minetest). +`minetest` will keep existing as an alias, so that old code won't break. + * More information at * Developer Wiki: @@ -8,11 +13,11 @@ Introduction ** WARNING: The client API is currently unstable, and may break/change without warning. ** -Content and functionality can be added to Minetest by using Lua +Content and functionality can be added to Luanti by using Lua scripting in run-time loaded mods. A mod is a self-contained bunch of scripts, textures and other related -things that is loaded by and interfaces with Minetest. +things that is loaded by and interfaces with Luanti. Transferring client-sided mods from the server to the client is planned, but not implemented yet. @@ -97,7 +102,7 @@ The location of this directory. An (optional) settings file that provides meta information about the mod. -* `name`: The mod name. Allows Minetest to determine the mod name even if the +* `name`: The mod name. Allows Luanti to determine the mod name even if the folder is wrongly named. * `description`: Description of mod to be shown in the Mods tab of the main menu. @@ -109,7 +114,7 @@ An (optional) settings file that provides meta information about the mod. ### `init.lua` The main Lua script. Running this script should register everything it -wants to register. Subsequent execution depends on minetest calling the +wants to register. Subsequent execution depends on Luanti calling the registered callbacks. **NOTE**: Client mods currently can't provide textures, sounds, or models by @@ -247,39 +252,39 @@ Helper functions * e.g. `string:split("a,b", ",") == {"a","b"}` * `string:trim()` * e.g. `string.trim("\n \t\tfoo bar\t ") == "foo bar"` -* `minetest.wrap_text(str, limit)`: returns a string +* `core.wrap_text(str, limit)`: returns a string * Adds new lines to the string to keep it within the specified character limit * limit: Maximal amount of characters in one line -* `minetest.pos_to_string({x=X,y=Y,z=Z}, decimal_places))`: returns string `"(X,Y,Z)"` +* `core.pos_to_string({x=X,y=Y,z=Z}, decimal_places))`: returns string `"(X,Y,Z)"` * Convert position to a printable string Optional: 'decimal_places' will round the x, y and z of the pos to the given decimal place. -* `minetest.string_to_pos(string)`: returns a position +* `core.string_to_pos(string)`: returns a position * Same but in reverse. Returns `nil` if the string can't be parsed to a position. -* `minetest.string_to_area("(X1, Y1, Z1) (X2, Y2, Z2)")`: returns two positions +* `core.string_to_area("(X1, Y1, Z1) (X2, Y2, Z2)")`: returns two positions * Converts a string representing an area box into two positions -* `minetest.is_yes(arg)` +* `core.is_yes(arg)` * returns whether `arg` can be interpreted as yes -* `minetest.is_nan(arg)` +* `core.is_nan(arg)` * returns true when the passed number represents NaN. * `table.copy(table)`: returns a table * returns a deep copy of `table` -Minetest namespace reference ------------------------------- +'core' namespace reference +-------------------------- ### Utilities -* `minetest.get_current_modname()`: returns the currently loading mod's name, when we are loading a mod -* `minetest.get_modpath(modname)`: returns virtual path of given mod including +* `core.get_current_modname()`: returns the currently loading mod's name, when we are loading a mod +* `core.get_modpath(modname)`: returns virtual path of given mod including the trailing separator. This is useful to load additional Lua files contained in your mod: - e.g. `dofile(minetest.get_modpath(minetest.get_current_modname()) .. "stuff.lua")` -* `minetest.get_language()`: returns two strings + e.g. `dofile(core.get_modpath(core.get_current_modname()) .. "stuff.lua")` +* `core.get_language()`: returns two strings * the current gettext locale * the current language code (the same as used for client-side translations) -* `minetest.get_version()`: returns a table containing components of the +* `core.get_version()`: returns a table containing components of the engine version. Components: - * `project`: Name of the project, eg, "Minetest" + * `project`: Name of the project, eg, "Luanti" * `string`: Simple version, eg, "1.2.3-dev" * `hash`: Full git version (only set if available), eg, "1.2.3-dev-01234567-dirty" Use this for informational purposes only. The information in the returned @@ -287,85 +292,85 @@ Minetest namespace reference reliable or verifiable. Compatible forks will have a different name and version entirely. To check for the presence of engine features, test whether the functions exported by the wanted features exist. For example: - `if minetest.check_for_falling then ... end`. -* `minetest.sha1(data, [raw])`: returns the sha1 hash of data + `if core.check_for_falling then ... end`. +* `core.sha1(data, [raw])`: returns the sha1 hash of data * `data`: string of data to hash * `raw`: return raw bytes instead of hex digits, default: false -* `minetest.colorspec_to_colorstring(colorspec)`: Converts a ColorSpec to a +* `core.colorspec_to_colorstring(colorspec)`: Converts a ColorSpec to a ColorString. If the ColorSpec is invalid, returns `nil`. * `colorspec`: The ColorSpec to convert -* `minetest.get_csm_restrictions()`: returns a table of `Flags` indicating the +* `core.get_csm_restrictions()`: returns a table of `Flags` indicating the restrictions applied to the current mod. * If a flag in this table is set to true, the feature is RESTRICTED. * Possible flags: `load_client_mods`, `chat_messages`, `read_itemdefs`, `read_nodedefs`, `lookup_nodes`, `read_playerinfo` -* `minetest.urlencode(str)`: Encodes non-unreserved URI characters by a +* `core.urlencode(str)`: Encodes non-unreserved URI characters by a percent sign followed by two hex digits. See [RFC 3986, section 2.3](https://datatracker.ietf.org/doc/html/rfc3986#section-2.3). ### Logging -* `minetest.debug(...)` - * Equivalent to `minetest.log(table.concat({...}, "\t"))` -* `minetest.log([level,] text)` +* `core.debug(...)` + * Equivalent to `core.log(table.concat({...}, "\t"))` +* `core.log([level,] text)` * `level` is one of `"none"`, `"error"`, `"warning"`, `"action"`, `"info"`, or `"verbose"`. Default is `"none"`. ### Global callback registration functions Call these functions only at load time! -* `minetest.register_globalstep(function(dtime))` +* `core.register_globalstep(function(dtime))` * Called every client environment step * `dtime` is the time since last execution in seconds. -* `minetest.register_on_mods_loaded(function())` +* `core.register_on_mods_loaded(function())` * Called just after mods have finished loading. -* `minetest.register_on_shutdown(function())` +* `core.register_on_shutdown(function())` * Called before client shutdown * **Warning**: If the client terminates abnormally (i.e. crashes), the registered callbacks **will likely not be run**. Data should be saved at semi-frequent intervals as well as on server shutdown. -* `minetest.register_on_receiving_chat_message(function(message))` +* `core.register_on_receiving_chat_message(function(message))` * Called always when a client receive a message * Return `true` to mark the message as handled, which means that it will not be shown to chat -* `minetest.register_on_sending_chat_message(function(message))` +* `core.register_on_sending_chat_message(function(message))` * Called always when a client sends a message from chat * Return `true` to mark the message as handled, which means that it will not be sent to server -* `minetest.register_chatcommand(cmd, chatcommand definition)` - * Adds definition to minetest.registered_chatcommands -* `minetest.unregister_chatcommand(name)` +* `core.register_chatcommand(cmd, chatcommand definition)` + * Adds definition to core.registered_chatcommands +* `core.unregister_chatcommand(name)` * Unregisters a chatcommands registered with register_chatcommand. -* `minetest.register_on_chatcommand(function(command, params))` - * Called always when a chatcommand is triggered, before `minetest.registered_chatcommands` +* `core.register_on_chatcommand(function(command, params))` + * Called always when a chatcommand is triggered, before `core.registered_chatcommands` is checked to see if the command exists, but after the input is parsed. * Return `true` to mark the command as handled, which means that the default handlers will be prevented. -* `minetest.register_on_hp_modification(function(hp))` +* `core.register_on_hp_modification(function(hp))` * Called when server modified player's HP -* `minetest.register_on_damage_taken(function(hp))` +* `core.register_on_damage_taken(function(hp))` * Called when the local player take damages -* `minetest.register_on_formspec_input(function(formname, fields))` +* `core.register_on_formspec_input(function(formname, fields))` * Called when a button is pressed in the local player's inventory form * Newest functions are called first * If function returns `true`, remaining functions are not called -* `minetest.register_on_dignode(function(pos, node))` +* `core.register_on_dignode(function(pos, node))` * Called when the local player digs a node * Newest functions are called first * If any function returns true, the node isn't dug -* `minetest.register_on_punchnode(function(pos, node))` +* `core.register_on_punchnode(function(pos, node))` * Called when the local player punches a node * Newest functions are called first * If any function returns true, the punch is ignored -* `minetest.register_on_placenode(function(pointed_thing, node))` +* `core.register_on_placenode(function(pointed_thing, node))` * Called when a node has been placed -* `minetest.register_on_item_use(function(item, pointed_thing))` +* `core.register_on_item_use(function(item, pointed_thing))` * Called when the local player uses an item. * Newest functions are called first. * If any function returns true, the item use is not sent to server. -* `minetest.register_on_modchannel_message(function(channel_name, sender, message))` +* `core.register_on_modchannel_message(function(channel_name, sender, message))` * Called when an incoming mod channel message is received * You must have joined some channels before, and server must acknowledge the join request. * If message comes from a server mod, `sender` field is an empty string. -* `minetest.register_on_modchannel_signal(function(channel_name, signal))` +* `core.register_on_modchannel_signal(function(channel_name, signal))` * Called when a valid incoming mod channel signal is received * Signal id permit to react to server mod channel events * Possible values are: @@ -375,54 +380,54 @@ Call these functions only at load time! 3: leave_failed 4: event_on_not_joined_channel 5: state_changed -* `minetest.register_on_inventory_open(function(inventory))` +* `core.register_on_inventory_open(function(inventory))` * Called when the local player open inventory * Newest functions are called first * If any function returns true, inventory doesn't open ### Sounds -* `minetest.sound_play(spec, parameters)`: returns a handle +* `core.sound_play(spec, parameters)`: returns a handle * `spec` is a `SimpleSoundSpec` * `parameters` is a sound parameter table -* `handle:stop()` or `minetest.sound_stop(handle)` - * `handle` is a handle returned by `minetest.sound_play` -* `handle:fade(step, gain)` or `minetest.sound_fade(handle, step, gain)` - * `handle` is a handle returned by `minetest.sound_play` +* `handle:stop()` or `core.sound_stop(handle)` + * `handle` is a handle returned by `core.sound_play` +* `handle:fade(step, gain)` or `core.sound_fade(handle, step, gain)` + * `handle` is a handle returned by `core.sound_play` * `step` determines how fast a sound will fade. Negative step will lower the sound volume, positive step will increase the sound volume. * `gain` the target gain for the fade. ### Timing -* `minetest.after(time, func, ...)` +* `core.after(time, func, ...)` * Call the function `func` after `time` seconds, may be fractional * Optional: Variable number of arguments that are passed to `func` * Jobs set for earlier times are executed earlier. If multiple jobs expire at exactly the same time, then they expire in the order in which they were registered. This basically just applies to jobs registered on the same step with the exact same delay. -* `minetest.get_us_time()` +* `core.get_us_time()` * Returns time with microsecond precision. May not return wall time. -* `minetest.get_timeofday()` +* `core.get_timeofday()` * Returns the time of day: `0` for midnight, `0.5` for midday ### Map -* `minetest.get_node_or_nil(pos)` +* `core.get_node_or_nil(pos)` * Returns the node at the given position as table in the format `{name="node_name", param1=0, param2=0}`, returns `nil` for unloaded areas or flavor limited areas. -* `minetest.get_node_light(pos, timeofday)` +* `core.get_node_light(pos, timeofday)` * Gets the light value at the given position. Note that the light value "inside" the node at the given position is returned, so you usually want to get the light value of a neighbor. * `pos`: The position where to measure the light. * `timeofday`: `nil` for current time, `0` for night, `0.5` for day * Returns a number between `0` and `15` or `nil` -* `minetest.find_node_near(pos, radius, nodenames, [search_center])`: returns pos or `nil` +* `core.find_node_near(pos, radius, nodenames, [search_center])`: returns pos or `nil` * `radius`: using a maximum metric * `nodenames`: e.g. `{"ignore", "group:tree"}` or `"default:dirt"` * `search_center` is an optional boolean (default: `false`) If true `pos` is also checked for the nodes -* `minetest.find_nodes_in_area(pos1, pos2, nodenames, [grouped])` +* `core.find_nodes_in_area(pos1, pos2, nodenames, [grouped])` * `pos1` and `pos2` are the min and max positions of the area to search. * `nodenames`: e.g. `{"ignore", "group:tree"}` or `"default:dirt"` * If `grouped` is true the return value is a table indexed by node name @@ -432,91 +437,91 @@ Call these functions only at load time! second value: Table with the count of each node with the node name as index * Area volume is limited to 4,096,000 nodes -* `minetest.find_nodes_in_area_under_air(pos1, pos2, nodenames)`: returns a +* `core.find_nodes_in_area_under_air(pos1, pos2, nodenames)`: returns a list of positions. * `nodenames`: e.g. `{"ignore", "group:tree"}` or `"default:dirt"` * Return value: Table with all node positions with a node air above * Area volume is limited to 4,096,000 nodes -* `minetest.line_of_sight(pos1, pos2)`: returns `boolean, pos` +* `core.line_of_sight(pos1, pos2)`: returns `boolean, pos` * Checks if there is anything other than air between pos1 and pos2. * Returns false if something is blocking the sight. * Returns the position of the blocking node when `false` * `pos1`: First position * `pos2`: Second position -* `minetest.raycast(pos1, pos2, objects, liquids)`: returns `Raycast` +* `core.raycast(pos1, pos2, objects, liquids)`: returns `Raycast` * Creates a `Raycast` object. * `pos1`: start of the ray * `pos2`: end of the ray * `objects`: if false, only nodes will be returned. Default is `true`. * `liquids`: if false, liquid nodes won't be returned. Default is `false`. -* `minetest.find_nodes_with_meta(pos1, pos2)` +* `core.find_nodes_with_meta(pos1, pos2)` * Get a table of positions of nodes that have metadata within a region {pos1, pos2}. -* `minetest.get_meta(pos)` +* `core.get_meta(pos)` * Get a `NodeMetaRef` at that position -* `minetest.get_node_level(pos)` +* `core.get_node_level(pos)` * get level of leveled node (water, snow) -* `minetest.get_node_max_level(pos)` +* `core.get_node_max_level(pos)` * get max available level for leveled node ### Player -* `minetest.send_chat_message(message)` +* `core.send_chat_message(message)` * Act as if `message` was typed by the player into the terminal. -* `minetest.run_server_chatcommand(cmd, param)` - * Alias for `minetest.send_chat_message("/" .. cmd .. " " .. param)` -* `minetest.clear_out_chat_queue()` +* `core.run_server_chatcommand(cmd, param)` + * Alias for `core.send_chat_message("/" .. cmd .. " " .. param)` +* `core.clear_out_chat_queue()` * Clears the out chat queue -* `minetest.localplayer` +* `core.localplayer` * Reference to the LocalPlayer object. See [`LocalPlayer`](#localplayer) class reference for methods. ### Privileges -* `minetest.get_privilege_list()` +* `core.get_privilege_list()` * Returns a list of privileges the current player has in the format `{priv1=true,...}` -* `minetest.string_to_privs(str)`: returns `{priv1=true,...}` -* `minetest.privs_to_string(privs)`: returns `"priv1,priv2,..."` +* `core.string_to_privs(str)`: returns `{priv1=true,...}` +* `core.privs_to_string(privs)`: returns `"priv1,priv2,..."` * Convert between two privilege representations ### Client Environment -* `minetest.get_player_names()` +* `core.get_player_names()` * Returns list of player names on server (nil if CSM_RF_READ_PLAYERINFO is enabled by server) -* `minetest.disconnect()` +* `core.disconnect()` * Disconnect from the server and exit to main menu. * Returns `false` if the client is already disconnecting otherwise returns `true`. -* `minetest.get_server_info()` +* `core.get_server_info()` * Returns [server info](#server-info). ### Storage API -* `minetest.get_mod_storage()`: +* `core.get_mod_storage()`: * returns reference to mod private `StorageRef` * must be called during mod load time ### Mod channels ![Mod channels communication scheme](docs/mod channels.png) -* `minetest.mod_channel_join(channel_name)` +* `core.mod_channel_join(channel_name)` * Client joins channel `channel_name`, and creates it, if necessary. You - should listen from incoming messages with `minetest.register_on_modchannel_message` + should listen from incoming messages with `core.register_on_modchannel_message` call to receive incoming messages. Warning, this function is asynchronous. ### Particles -* `minetest.add_particle(particle definition)` +* `core.add_particle(particle definition)` -* `minetest.add_particlespawner(particlespawner definition)` +* `core.add_particlespawner(particlespawner definition)` * Add a `ParticleSpawner`, an object that spawns an amount of particles over `time` seconds * Returns an `id`, and -1 if adding didn't succeed -* `minetest.delete_particlespawner(id)` - * Delete `ParticleSpawner` with `id` (return value from `minetest.add_particlespawner`) +* `core.delete_particlespawner(id)` + * Delete `ParticleSpawner` with `id` (return value from `core.add_particlespawner`) ### Misc. -* `minetest.parse_json(string[, nullvalue])`: returns something +* `core.parse_json(string[, nullvalue])`: returns something * Convert a string containing JSON data into the Lua equivalent * `nullvalue`: returned in place of the JSON null; defaults to `nil` * On success returns a table, a string, a number, a boolean or `nullvalue` * On failure outputs an error message and returns `nil` * Example: `parse_json("[10, {\"a\":false}]")`, returns `{10, {a = false}}` -* `minetest.write_json(data[, styled])`: returns a string or `nil` and an error message +* `core.write_json(data[, styled])`: returns a string or `nil` and an error message * Convert a Lua table into a JSON string * styled: Outputs in a human-readable format if this is set, defaults to false * Unserializable things like functions and userdata are saved as null. @@ -525,18 +530,18 @@ Call these functions only at load time! 2. You cannot mix string and integer keys. This is due to the fact that JSON has two distinct array and object values. * Example: `write_json({10, {a = false}})`, returns `"[10, {\"a\": false}]"` -* `minetest.serialize(table)`: returns a string +* `core.serialize(table)`: returns a string * Convert a table containing tables, strings, numbers, booleans and `nil`s - into string form readable by `minetest.deserialize` + into string form readable by `core.deserialize` * Example: `serialize({foo='bar'})`, returns `'return { ["foo"] = "bar" }'` -* `minetest.deserialize(string)`: returns a table - * Convert a string returned by `minetest.deserialize` into a table +* `core.deserialize(string)`: returns a table + * Convert a string returned by `core.deserialize` into a table * `string` is loaded in an empty sandbox environment. * Will load functions, but they cannot access the global environment. * Example: `deserialize('return { ["foo"] = "bar" }')`, returns `{foo='bar'}` * Example: `deserialize('print("foo")')`, returns `nil` (function call fails) * `error:[string "print("foo")"]:1: attempt to call global 'print' (a nil value)` -* `minetest.compress(data, method, ...)`: returns `compressed_data` +* `core.compress(data, method, ...)`: returns `compressed_data` * Compress a string of data. * `method` is a string identifying the compression method to be used. * Supported compression methods: @@ -548,50 +553,50 @@ Call these functions only at load time! * Zstandard: `level` - Compression level. Integer or `nil`. Default `3`. Note any supported Zstandard compression level could be used here, but these are subject to change between Zstandard versions. -* `minetest.decompress(compressed_data, method, ...)`: returns data +* `core.decompress(compressed_data, method, ...)`: returns data * Decompress a string of data using the algorithm specified by `method`. - * See documentation on `minetest.compress()` for supported compression + * See documentation on `core.compress()` for supported compression methods. * `...` indicates method-specific arguments. Currently, no methods use this -* `minetest.rgba(red, green, blue[, alpha])`: returns a string +* `core.rgba(red, green, blue[, alpha])`: returns a string * Each argument is an 8 Bit unsigned integer * Returns the ColorString from rgb or rgba values - * Example: `minetest.rgba(10, 20, 30, 40)`, returns `"#0A141E28"` -* `minetest.encode_base64(string)`: returns string encoded in base64 + * Example: `core.rgba(10, 20, 30, 40)`, returns `"#0A141E28"` +* `core.encode_base64(string)`: returns string encoded in base64 * Encodes a string in base64. -* `minetest.decode_base64(string)`: returns string or nil on failure +* `core.decode_base64(string)`: returns string or nil on failure * Padding characters are only supported starting at version 5.4.0, where 5.5.0 and newer perform proper checks. * Decodes a string encoded in base64. -* `minetest.gettext(string)` : returns string +* `core.gettext(string)` : returns string * look up the translation of a string in the gettext message catalog * `fgettext_ne(string, ...)` - * call minetest.gettext(string), replace "$1"..."$9" with the given + * call core.gettext(string), replace "$1"..."$9" with the given extra arguments and return the result * `fgettext(string, ...)` : returns string - * same as fgettext_ne(), but calls minetest.formspec_escape before returning result -* `minetest.pointed_thing_to_face_pos(placer, pointed_thing)`: returns a position + * same as fgettext_ne(), but calls core.formspec_escape before returning result +* `core.pointed_thing_to_face_pos(placer, pointed_thing)`: returns a position * returns the exact position on the surface of a pointed node -* `minetest.global_exists(name)` +* `core.global_exists(name)` * Checks if a global variable has been set, without triggering a warning. ### UI -* `minetest.ui.minimap` +* `core.ui.minimap` * Reference to the minimap object. See [`Minimap`](#minimap) class reference for methods. * If client disabled minimap (using enable_minimap setting) this reference will be nil. -* `minetest.camera` +* `core.camera` * Reference to the camera object. See [`Camera`](#camera) class reference for methods. -* `minetest.show_formspec(formname, formspec)` : returns true on success +* `core.show_formspec(formname, formspec)` : returns true on success * Shows a formspec to the player -* `minetest.display_chat_message(message)` returns true on success +* `core.display_chat_message(message)` returns true on success * Shows a chat message to the current player. Setting-related --------------- -* `minetest.settings`: Settings object containing all of the settings from the +* `core.settings`: Settings object containing all of the settings from the main config file (`minetest.conf`). Check lua_api.md for class reference. -* `minetest.setting_get_pos(name)`: Loads a setting from the main settings and +* `core.setting_get_pos(name)`: Loads a setting from the main settings and parses it as a position (in the format `(1,2,3)`). Returns a position or nil. Class reference @@ -821,7 +826,7 @@ It can be created via `Settings(filename)`. ### NodeMetaRef Node metadata: reference extra data and functionality stored in a node. -Can be obtained via `minetest.get_meta(pos)`. +Can be obtained via `core.get_meta(pos)`. #### Methods * `get_string(name)` @@ -847,7 +852,7 @@ The map is loaded as the ray advances. If the map is modified after the `Raycast` is created, the changes may or may not have an effect on the object. It can be created via `Raycast(pos1, pos2, objects, liquids)` or -`minetest.raycast(pos1, pos2, objects, liquids)` where: +`core.raycast(pos1, pos2, objects, liquids)` where: * `pos1`: start of the ray * `pos2`: end of the ray @@ -861,9 +866,9 @@ It can be created via `Raycast(pos1, pos2, objects, liquids)` or ----------------- ### Definitions -* `minetest.get_node_def(nodename)` +* `core.get_node_def(nodename)` * Returns [node definition](#node-definition) table of `nodename` -* `minetest.get_item_def(itemstring)` +* `core.get_item_def(itemstring)` * Returns item definition table of `itemstring` #### Node Definition @@ -967,7 +972,7 @@ It can be created via `Raycast(pos1, pos2, objects, liquids)` or ```lua { - address = "minetest.example.org", -- The domain name/IP address of a remote server or "" for a local server. + address = "luanti.example.org", -- The domain name/IP address of a remote server or "" for a local server. ip = "203.0.113.156", -- The IP address of the server. port = 30000, -- The port the client is connected to. protocol_version = 30 -- Will not be accurate at start up as the client might not be connected to the server yet, in that case it will be 0. @@ -983,23 +988,23 @@ Escape sequences Most text can contain escape sequences that can for example color the text. There are a few exceptions: tab headers, dropdowns and vertical labels can't. The following functions provide escape sequences: -* `minetest.get_color_escape_sequence(color)`: +* `core.get_color_escape_sequence(color)`: * `color` is a [ColorString](#colorstring) * The escape sequence sets the text color to `color` -* `minetest.colorize(color, message)`: +* `core.colorize(color, message)`: * Equivalent to: - `minetest.get_color_escape_sequence(color) .. + `core.get_color_escape_sequence(color) .. message .. - minetest.get_color_escape_sequence("#ffffff")` -* `minetest.get_background_escape_sequence(color)` + core.get_color_escape_sequence("#ffffff")` +* `core.get_background_escape_sequence(color)` * `color` is a [ColorString](#colorstring) * The escape sequence sets the background of the whole text element to `color`. Only defined for item descriptions and tooltips. -* `minetest.strip_foreground_colors(str)` +* `core.strip_foreground_colors(str)` * Removes foreground colors added by `get_color_escape_sequence`. -* `minetest.strip_background_colors(str)` +* `core.strip_background_colors(str)` * Removes background colors added by `get_background_escape_sequence`. -* `minetest.strip_colors(str)` +* `core.strip_colors(str)` * Removes all color escape sequences. `ColorString` diff --git a/doc/compiling/README.md b/doc/compiling/README.md index bfe91950f..70a78946f 100644 --- a/doc/compiling/README.md +++ b/doc/compiling/README.md @@ -1,4 +1,4 @@ -# Compiling Minetest +# Compiling Luanti - [Compiling on GNU/Linux](linux.md) - [Compiling on Windows](windows.md) @@ -9,8 +9,8 @@ General options and their default values: - BUILD_CLIENT=TRUE - Build Minetest client - BUILD_SERVER=FALSE - Build Minetest server + BUILD_CLIENT=TRUE - Build Luanti client + BUILD_SERVER=FALSE - Build Luanti server BUILD_UNITTESTS=TRUE - Build unittest sources BUILD_BENCHMARKS=FALSE - Build benchmark sources BUILD_DOCUMENTATION=TRUE - Build doxygen documentation @@ -38,11 +38,11 @@ General options and their default values: ENABLE_SYSTEM_JSONCPP=ON - Use JsonCPP from system RUN_IN_PLACE=FALSE - Create a portable install (worlds, settings etc. in current directory) ENABLE_UPDATE_CHECKER=TRUE - Whether to enable update checks by default - INSTALL_DEVTEST=FALSE - Whether the Development Test game should be installed alongside Minetest + INSTALL_DEVTEST=FALSE - Whether the Development Test game should be installed alongside Luanti USE_GPROF=FALSE - Enable profiling using GProf BUILD_WITH_TRACY=FALSE - Fetch and build with the Tracy profiler client FETCH_TRACY_GIT_TAG=master - Git tag for fetching Tracy client. Match with your server (gui) version - VERSION_EXTRA= - Text to append to version (e.g. VERSION_EXTRA=foobar -> Minetest 0.4.9-foobar) + VERSION_EXTRA= - Text to append to version (e.g. VERSION_EXTRA=foobar -> Luanti 5.10.0-foobar) Library specific options: diff --git a/doc/compiling/windows.md b/doc/compiling/windows.md index 0d3f15e94..b36db4d9a 100644 --- a/doc/compiling/windows.md +++ b/doc/compiling/windows.md @@ -29,7 +29,7 @@ There are other optional libraries, but they are not tested if they can build an Use `--triplet` to specify the target triplet, e.g. `x64-windows` or `x86-windows`. -## Compile Minetest +## Compile Luanti ### a) Using the vcpkg toolchain and CMake GUI @@ -46,7 +46,7 @@ Use `--triplet` to specify the target triplet, e.g. `x64-windows` or `x86-window 11. If there are any errors, solve them and hit **Configure** 12. Click **Generate** 13. Click **Open Project** -14. Compile Minetest inside Visual studio. +14. Compile Luanti inside Visual studio. ### b) Using the vcpkg toolchain and the commandline diff --git a/doc/developing/README.md b/doc/developing/README.md index 7c438436c..7e84de904 100644 --- a/doc/developing/README.md +++ b/doc/developing/README.md @@ -6,7 +6,7 @@ Some important development docs are found in the wiki: https://dev.minetest.net/ Notable pages: -- [Releasing Minetest](https://dev.minetest.net/Releasing_Minetest) +- [Releasing Luanti](https://dev.minetest.net/Releasing_Minetest) - [Engine translations](https://dev.minetest.net/Translation#Maintaining_engine_translations) - [Changelog](https://dev.minetest.net/Changelog) - [Organisation](https://dev.minetest.net/Organisation) diff --git a/doc/developing/android.md b/doc/developing/android.md index e278c48d8..5a134d561 100644 --- a/doc/developing/android.md +++ b/doc/developing/android.md @@ -21,7 +21,7 @@ After that installing it will work: adb install -r -d ./app-arm64-v8a-release-unsigned.apk ``` -## How to get debug output from Minetest on Android +## How to get debug output from Luanti on Android In case debug.txt isn't enough (e.g. when debugging a crash), you can get debug output using logcat: diff --git a/doc/developing/misc.md b/doc/developing/misc.md index 2ac843caf..9895cc624 100644 --- a/doc/developing/misc.md +++ b/doc/developing/misc.md @@ -1,10 +1,10 @@ # Miscellaneous -## Profiling Minetest on Linux with perf +## Profiling Luanti on Linux with perf We will be using a tool called "perf", which you can get by installing `perf` or `linux-perf` or `linux-tools-common`. -To get usable results you need to build Minetest with debug symbols +To get usable results you need to build Luanti with debug symbols (`-DCMAKE_BUILD_TYPE=RelWithDebInfo` or `-DCMAKE_BUILD_TYPE=Debug`). Run the client (or server) like this and do whatever you wanted to test: @@ -48,20 +48,20 @@ It allows one to annotate important functions and generate traces, where one can see when each individual function call happened, and how long it took. Tracy can also record when frames, e.g. server step, start and end, and inspect -frames that took longer than usual. Minetest already contains annotations for +frames that took longer than usual. Luanti already contains annotations for its frames. See also [Tracy's official documentation](https://github.com/wolfpld/tracy/releases/latest/download/tracy.pdf). ### Installing -Tracy consists of a client (Minetest) and a server (the gui). +Tracy consists of a client (Luanti) and a server (the gui). Install the server, e.g. using your package manager. ### Building -Build Minetest with `-DDBUILD_WITH_TRACY=1`, this will fetch Tracy for building +Build Luanti with `-DDBUILD_WITH_TRACY=1`, this will fetch Tracy for building the Tracy client. And use `FETCH_TRACY_GIT_TAG` to get a version matching your Tracy server, e.g. `-DFETCH_TRACY_GIT_TAG=v0.11.0` if it's `0.11.0`. @@ -74,7 +74,7 @@ See Tracy's documentation for more build options. ### Using in C++ -Start the Tracy server and Minetest. You should see Minetest in the menu. +Start the Tracy server and Luanti. You should see Luanti in the menu. To actually get useful traces, you have to annotate functions with `ZoneScoped` macros and recompile. Please refer to Tracy's official documentation. @@ -82,7 +82,7 @@ macros and recompile. Please refer to Tracy's official documentation. ### Using in Lua Tracy also supports Lua. -If built with Tracy, Minetest loads its API in the global `tracy` table. +If built with Tracy, Luanti loads its API in the global `tracy` table. See Tracy's official documentation for more information. Note: The whole Tracy Lua API is accessible to all mods. And we don't check if it diff --git a/doc/developing/os-compatibility.md b/doc/developing/os-compatibility.md index dfc78bad7..29b271e6f 100644 --- a/doc/developing/os-compatibility.md +++ b/doc/developing/os-compatibility.md @@ -2,7 +2,7 @@ OS/library compatibility policy =============================== This document describes how we decide which minimum versions of operating systems, C++ standards, -libraries, build tools (CMake) or compilers Minetest requires. +libraries, build tools (CMake) or compilers Luanti requires. Most important is that we do not increase our minimum requirements without a reason or use case. A reason can be as simple as "cleaning up legacy support code", but it needs to exist. @@ -54,7 +54,7 @@ OpenGL ES 2.0 is supported for the sake of mobile platforms. It has been [proposed](https://irc.minetest.net/minetest-dev/2022-08-18) moving to OpenGL 2.x or 3.0 with shaders required. General **system requirements** are not bounded either. -Being able to play Minetest on a recent low-end phone is a reasonable target. +Being able to play Luanti on a recent low-end phone is a reasonable target. ## On totality @@ -71,7 +71,7 @@ Sound is optional at build-time but nobody would call an engine build without so In general also consider: * Is the proposition important enough to warrant a new dependency? -* Can we make it easier for users to build the library together with Minetest? +* Can we make it easier for users to build the library together with Luanti? * Maybe even vendor the library? * Or could the engine include a transparent fallback implementation? diff --git a/doc/direction.md b/doc/direction.md index 56c008423..b3ba5871a 100644 --- a/doc/direction.md +++ b/doc/direction.md @@ -1,4 +1,4 @@ -# Minetest Direction Document +# Luanti Direction Document ## 1. Long-term Roadmap @@ -12,7 +12,7 @@ following documents: ## 2. Medium-term Roadmap -These are the current medium-term goals for Minetest development, in no +These are the current medium-term goals for Luanti development, in no particular order. These goals were created from the top points in a @@ -42,7 +42,7 @@ alternative libraries to replace Irrlicht functionality as needed ### 2.2 Internal code refactoring -To ensure sustainable development, Minetest's code needs to be +To ensure sustainable development, Luanti's code needs to be [refactored and improved](https://github.com/minetest/minetest/pulls?q=is%3Aopen+sort%3Aupdated-desc+label%3A%22Code+quality%22+). This will remove code rot and allow for more efficient development. @@ -54,7 +54,7 @@ be a replacement for HUDs, allowing for a unified API. A [new mainmenu](https://github.com/minetest/minetest/issues/6733) is needed to improve user experience. First impressions matter, and the current main menu -doesn't do a very good job at selling Minetest or explaining what it is. +doesn't do a very good job at selling Luanti or explaining what it is. A new main menu should promote games to users, allowing Minetest Game to no longer be bundled by default. diff --git a/doc/docker_server.md b/doc/docker_server.md index 01a068536..eebe776b9 100644 --- a/doc/docker_server.md +++ b/doc/docker_server.md @@ -1,6 +1,6 @@ # Docker Server -We provide Minetest server Docker images using the GitHub container registry. +We provide Luanti server Docker images using the GitHub container registry. Images are built on each commit and available using the following tag scheme: diff --git a/doc/ides/jetbrains.md b/doc/ides/jetbrains.md index 09a95b92f..23ed10793 100644 --- a/doc/ides/jetbrains.md +++ b/doc/ides/jetbrains.md @@ -8,7 +8,7 @@ The IDE will open the folder and display the open project wizard: ![Open Project Wizard](images/jetbrains_open_project_wizard_profiles.png) -CLion try to determine a base configuration, but Minetest define it's own presets for easier setup. So you need to +CLion try to determine a base configuration, but Luanti define it's own presets for easier setup. So you need to delete the `Debug` profile with the `-` sign and close the dialog. You should notice a notification telling you 4 presets have been loaded in the bottom right corner. @@ -61,7 +61,7 @@ Then, the process is roughly similar to Linux, you just need to pick `Visual Stu -[Vcpkg](https://vcpkg.io) is the recommended way of installing Minetest dependencies. +[Vcpkg](https://vcpkg.io) is the recommended way of installing Luanti dependencies. You need to let CLion know about a `vcpkg` installation to let the bundled CMake use the dependencies seamlessly and get IDE integration. (Require CLion 2023 or later) @@ -70,7 +70,7 @@ Go to `View > Tool Windows > Vcpkg` and click the add button. I will open a popu installation. By default it will download a new one that you can use to install your dependencies, but if you already have one installed or you do not plan on using CLion only then install Vcpkg by hand and select your installation directory. Don't forget to check `Add vcpkg installation to existing CMake profiles`. If you haven't already installed -Minetest dependencies in your vcpkg installation, you can do it right from CLion's Vcpkg tool window. +Luanti dependencies in your vcpkg installation, you can do it right from CLion's Vcpkg tool window. ![Jetbrains Vcpkg](images/jetbrains_vcpkg.png) diff --git a/doc/ides/visual_studio.md b/doc/ides/visual_studio.md index a08a58ea2..e07c3ffb8 100644 --- a/doc/ides/visual_studio.md +++ b/doc/ides/visual_studio.md @@ -2,6 +2,6 @@ From the Visual Studio installer, you need to install the `Desktop development with C++` Workload. You need to make sure the `C++ CMake tools for Windows` component is included in the installation details panel. -You need to install [Vcpkg](https://vcpkg.io) and install Minetest dependencies as stated in the compilation documentation. +You need to install [Vcpkg](https://vcpkg.io) and install Luanti dependencies as stated in the compilation documentation. For the packages to be discoverable and used by Visual Studio, you need to run `vcpkg integrate install`. diff --git a/doc/ides/vscode.md b/doc/ides/vscode.md index 6814a7a88..3dc05813e 100644 --- a/doc/ides/vscode.md +++ b/doc/ides/vscode.md @@ -9,7 +9,7 @@ extension pack manually by downloading the VSIX files and going to `Extensions > CMake support for VSCode uses CMake presets provided by the project by default. -When you open the Minetest folder with VSCode, you should get a quick pick asking you for the default preset. +When you open the Luanti folder with VSCode, you should get a quick pick asking you for the default preset. ![VSCode CMake Preset Selection](images/vscode_cmake_preset_selection.png) @@ -34,9 +34,9 @@ Under Windows, the recommended compiler is the [Visual Studio](https://visualstu From the Visual Studio installer, you need to install the `Desktop development with C++` Workload. -[Vcpkg](https://vcpkg.io) is the recommended way of installing Minetest dependencies. +[Vcpkg](https://vcpkg.io) is the recommended way of installing Luanti dependencies. -Follow the official documentation to install it and install Minetest dependencies as explained in [Windows compilation process](../compiling/windows.md). +Follow the official documentation to install it and install Luanti dependencies as explained in [Windows compilation process](../compiling/windows.md). You need to let CMake know about the `vcpkg` installation in VSCode. diff --git a/doc/lua_api.md b/doc/lua_api.md index 622993b7a..f886e1097 100644 --- a/doc/lua_api.md +++ b/doc/lua_api.md @@ -1,5 +1,9 @@ -Minetest Lua Modding API Reference -================================== +Luanti Lua Modding API Reference +================================ + +**WARNING**: if you're looking for the `minetest` namespace (e.g. `minetest.something`), +it's now called `core` due to the renaming of Luanti (formerly Minetest). +`minetest` will keep existing as an alias, so that old code won't break. * More information at * Developer Wiki: @@ -9,11 +13,11 @@ Minetest Lua Modding API Reference Introduction ------------ -Content and functionality can be added to Minetest using Lua scripting +Content and functionality can be added to Luanti using Lua scripting in run-time loaded mods. A mod is a self-contained bunch of scripts, textures and other related -things, which is loaded by and interfaces with Minetest. +things, which is loaded by and interfaces with Luanti. Mods are contained and ran solely on the server side. Definitions and media files are automatically transferred to the client. @@ -36,7 +40,7 @@ the `init.lua` scripts in a shared environment. Paths ----- -Minetest keeps and looks for files mostly in two paths. `path_share` or `path_user`. +Luanti keeps and looks for files mostly in two paths. `path_share` or `path_user`. `path_share` contains possibly read-only content for the engine (incl. games and mods). `path_user` contains mods or games installed by the user but also the users @@ -159,7 +163,7 @@ Mods can be put in a subdirectory, if the parent directory, which otherwise should be a mod, contains a file named `modpack.conf`. The file is a key-value store of modpack details. -* `name`: The modpack name. Allows Minetest to determine the modpack name even +* `name`: The modpack name. Allows Luanti to determine the modpack name even if the folder is wrongly named. * `title`: A human-readable title to address the modpack. See [Translating content meta](#translating-content-meta). * `description`: Description of mod to be shown in the Mods tab of the main @@ -199,13 +203,13 @@ Mod directory structure ### modname The location of this directory can be fetched by using -`minetest.get_modpath(modname)`. +`core.get_modpath(modname)`. ### mod.conf A `Settings` file that provides meta information about the mod. -* `name`: The mod name. Allows Minetest to determine the mod name even if the +* `name`: The mod name. Allows Luanti to determine the mod name even if the folder is wrongly named. * `title`: A human-readable title to address the mod. See [Translating content meta](#translating-content-meta). * `description`: Description of mod to be shown in the Mods tab of the main @@ -253,13 +257,13 @@ The format is documented in `builtin/settingtypes.txt`. It is parsed by the main menu settings dialogue to list mod-specific settings in the "Mods" category. -`minetest.settings` can be used to read custom or engine settings. +`core.settings` can be used to read custom or engine settings. See [`Settings`]. ### `init.lua` The main Lua script. Running this script should register everything it -wants to register. Subsequent execution depends on Minetest calling the +wants to register. Subsequent execution depends on Luanti calling the registered callbacks. ### `textures`, `sounds`, `media`, `models`, `locale` @@ -331,7 +335,7 @@ Do not rely on glTF features not being supported; they may be supported in the f The backwards compatibility guarantee does not extend to ignoring unsupported features. For example, if your model used an emissive material, -you should expect that a future version of Minetest may respect this, +you should expect that a future version of Luanti may respect this, and thus cause your model to render differently there. Naming conventions @@ -372,23 +376,23 @@ Aliases ======= Aliases of itemnames can be added by using -`minetest.register_alias(alias, original_name)` or -`minetest.register_alias_force(alias, original_name)`. +`core.register_alias(alias, original_name)` or +`core.register_alias_force(alias, original_name)`. This adds an alias `alias` for the item called `original_name`. From now on, you can use `alias` to refer to the item `original_name`. -The only difference between `minetest.register_alias` and -`minetest.register_alias_force` is that if an item named `alias` already exists, -`minetest.register_alias` will do nothing while -`minetest.register_alias_force` will unregister it. +The only difference between `core.register_alias` and +`core.register_alias_force` is that if an item named `alias` already exists, +`core.register_alias` will do nothing while +`core.register_alias_force` will unregister it. This can be used for maintaining backwards compatibility. This can also set quick access names for things, e.g. if you have an item called `epiclylongmodname:stuff`, you could do - minetest.register_alias("stuff", "epiclylongmodname:stuff") + core.register_alias("stuff", "epiclylongmodname:stuff") and be able to use `/giveme stuff`. @@ -398,7 +402,7 @@ Mapgen aliases In a game, a certain number of these must be set to tell core mapgens which of the game's nodes are to be used for core mapgen generation. For example: - minetest.register_alias("mapgen_stone", "default:stone") + core.register_alias("mapgen_stone", "default:stone") ### Aliases for non-V6 mapgens @@ -465,7 +469,7 @@ Deprecated, define dungeon nodes in biome definitions instead. By default the world is filled with air nodes. To set a different node use e.g.: - minetest.register_alias("mapgen_singlenode", "default:stone") + core.register_alias("mapgen_singlenode", "default:stone") @@ -835,7 +839,7 @@ swapped, i.e. `A.png^[hardlight:B.png` is the same as `B.png^[overlay:A.png` Embed a base64 encoded PNG image in the texture string. You can produce a valid string for this by calling -`minetest.encode_base64(minetest.encode_png(tex))`, +`core.encode_base64(core.encode_png(tex))`, where `tex` is pixel data. Refer to the documentation of these functions for details. You can use this to send disposable images such as captchas @@ -845,7 +849,7 @@ expensive to compose with `[combine:`. IMPORTANT: Avoid sending large images this way. This is not a replacement for asset files, do not use it to do anything that you could instead achieve by just using a file. -In particular consider `minetest.dynamic_add_media` and test whether +In particular consider `core.dynamic_add_media` and test whether using other texture modifiers could result in a shorter string than embedding a whole image, this may vary by use case. @@ -984,7 +988,7 @@ To transfer the color to a special drop, you need a drop table. Example: ```lua -minetest.register_node("mod:stone", { +core.register_node("mod:stone", { description = "Stone", tiles = {"default_stone.png"}, paramtype2 = "color", @@ -1004,8 +1008,8 @@ Craft recipes only support item strings, but fortunately item strings can also contain metadata. Example craft recipe registration: ```lua -minetest.register_craft({ - output = minetest.itemstring_with_palette("wool:block", 3), +core.register_craft({ + output = core.itemstring_with_palette("wool:block", 3), type = "shapeless", recipe = { "wool:block", @@ -1014,7 +1018,7 @@ minetest.register_craft({ }) ``` -To set the `color` field, you can use `minetest.itemstring_with_color`. +To set the `color` field, you can use `core.itemstring_with_color`. Metadata field filtering in the `recipe` field are not supported yet, so the craft output is independent of the color of the ingredients. @@ -1023,7 +1027,7 @@ Soft texture overlay -------------------- Sometimes hardware coloring is not enough, because it affects the -whole tile. Soft texture overlays were added to Minetest to allow +whole tile. Soft texture overlays were added to Luanti to allow the dynamic coloring of only specific parts of the node's texture. For example a grass block may have colored grass, while keeping the dirt brown. @@ -1046,7 +1050,7 @@ To skip one face, set that overlay tile to an empty string. Example (colored grass block): ```lua -minetest.register_node("default:dirt_with_grass", { +core.register_node("default:dirt_with_grass", { description = "Dirt with Grass", -- Regular tiles, as usual -- The dirt tile disables palette coloring @@ -1257,13 +1261,13 @@ existence before trying to access the fields. Example: -All nodes registered with `minetest.register_node` get added to the table -`minetest.registered_nodes`. +All nodes registered with `core.register_node` get added to the table +`core.registered_nodes`. If you want to check the drawtype of a node, you could do it like this: ```lua -local def = minetest.registered_nodes[nodename] +local def = core.registered_nodes[nodename] local drawtype = def and def.drawtype ``` @@ -1279,7 +1283,7 @@ are quite static. The definition of a node is stored and can be accessed by using ```lua -minetest.registered_nodes[node.name] +core.registered_nodes[node.name] ``` See [Registered definitions]. @@ -1330,7 +1334,7 @@ The function of `param2` is determined by `paramtype2` in node definition. * Used by `drawtype = "flowingliquid"` and `liquidtype = "flowing"` * The liquid level and a flag of the liquid are stored in `param2` * Bits 0-2: Liquid level (0-7). The higher, the more liquid is in this node; - see `minetest.get_node_level`, `minetest.set_node_level` and `minetest.add_node_level` + see `core.get_node_level`, `core.set_node_level` and `core.add_node_level` to access/manipulate the content of this field * Bit 3: If set, liquid is flowing downwards (no graphical effect) * `paramtype2 = "wallmounted"` @@ -1338,7 +1342,7 @@ The function of `param2` is determined by `paramtype2` in node definition. "plantlike_rooted", "normal", "nodebox", "mesh" * The rotation of the node is stored in `param2` * Node is 'mounted'/facing towards one of 6 directions - * You can make this value by using `minetest.dir_to_wallmounted()` + * You can make this value by using `core.dir_to_wallmounted()` * Values range 0 - 7 * The value denotes at which direction the node is "mounted": 0 = y+, 1 = y-, 2 = x+, 3 = x-, 4 = z+, 5 = z- @@ -1352,7 +1356,7 @@ The function of `param2` is determined by `paramtype2` in node definition. * Supported drawtypes: "normal", "nodebox", "mesh" * The rotation of the node is stored in `param2`. * Node is rotated around face and axis; 24 rotations in total. - * Can be made by using `minetest.dir_to_facedir()`. + * Can be made by using `core.dir_to_facedir()`. * Chests and furnaces can be rotated that way, and also 'flipped' * Values range 0 - 23 * facedir / 4 = axis direction: @@ -1369,7 +1373,7 @@ The function of `param2` is determined by `paramtype2` in node definition. * Supported drawtypes: "normal", "nodebox", "mesh" * The rotation of the node is stored in `param2`. * Allows node to be rotated horizontally, 4 rotations in total - * Can be made by using `minetest.dir_to_fourdir()`. + * Can be made by using `core.dir_to_fourdir()`. * Chests and furnaces can be rotated that way, but not flipped * Values range 0 - 3 * 4dir modulo 4 = rotation @@ -1771,8 +1775,8 @@ Displays text on the HUD. * `scale`: Defines the bounding rectangle of the text. A value such as `{x=100, y=100}` should work. * `text`: The text to be displayed in the HUD element. - Supports `minetest.translate` (always) - and `minetest.colorize` (since protocol version 44) + Supports `core.translate` (always) + and `core.colorize` (since protocol version 44) * `number`: An integer containing the RGB value of the color used to draw the text. Specify `0xFFFFFF` for white text, `0xFF0000` for red, and so on. * `alignment`: The alignment of the text. @@ -2055,8 +2059,8 @@ without relying on the serialization format. Example: stack:get_meta():set_string("description", "My worn out pick") local itemstring = stack:to_string() -Additionally the methods `minetest.itemstring_with_palette(item, palette_index)` -and `minetest.itemstring_with_color(item, colorstring)` may be used to create +Additionally the methods `core.itemstring_with_palette(item, palette_index)` +and `core.itemstring_with_color(item, colorstring)` may be used to create item strings encoding color information in their metadata. ### Table format @@ -2121,7 +2125,7 @@ read groups, you must interpret `nil` and `0` as the same value, `0`. You can read the rating of a group for an item or a node by using ```lua -minetest.get_item_group(itemname, groupname) +core.get_item_group(itemname, groupname) ``` Groups of items @@ -2564,7 +2568,7 @@ Some of the values in the key-value store are handled specially: Example: ```lua -local meta = minetest.get_meta(pos) +local meta = core.get_meta(pos) -- Set node formspec and infotext meta:set_string("formspec", @@ -2689,8 +2693,8 @@ Inventories with a `player:` inventory location are only sent to the player named ``. When displaying text which can contain formspec code, e.g. text set by a player, -use `minetest.formspec_escape`. -For colored text you can use `minetest.colorize`. +use `core.formspec_escape`. +For colored text you can use `core.colorize`. Since formspec version 3, elements drawn in the order they are defined. All background elements are drawn before all other elements. @@ -2701,7 +2705,7 @@ reserved to pass key press events to formspec! **WARNING**: names and values of elements cannot contain binary data such as ASCII control characters. For values, escape sequences used by the engine are an exception to this. -**WARNING**: Minetest allows you to add elements to every single formspec instance +**WARNING**: Luanti allows you to add elements to every single formspec instance using `player:set_formspec_prepend()`, which may be the reason backgrounds are appearing when you don't expect them to, or why things are styled differently to normal. See [`no_prepend[]`] and [Styling Formspecs]. @@ -3161,8 +3165,7 @@ Elements * if you want a listelement to start with "#" write "##" * Index to be selected within textlist * `true`/`false`: draw transparent background -* See also `minetest.explode_textlist_event` - (main menu: `core.explode_textlist_event`). +* See also `core.explode_textlist_event` ### `tabheader[,;;,,...,;;;]` @@ -3261,8 +3264,7 @@ Elements * `orientation`: `vertical`/`horizontal`. Default horizontal. * Fieldname data is transferred to Lua * Value of this trackbar is set to (`0`-`1000`) by default -* See also `minetest.explode_scrollbar_event` - (main menu: `core.explode_scrollbar_event`). +* See also `core.explode_scrollbar_event` ### `scrollbaroptions[opt1;opt2;...]` * Sets options for all following `scrollbar[]` elements @@ -3295,8 +3297,7 @@ Elements * `name`: fieldname sent to server on row select or double-click * `cell 1`...`cell n`: cell contents given in row-major order * `selected idx`: index of row to be selected within table (first row = `1`) -* See also `minetest.explode_table_event` - (main menu: `core.explode_table_event`). +* See also `core.explode_table_event` ### `tableoptions[;;...]` @@ -3801,23 +3802,23 @@ Most text can contain escape sequences, that can for example color the text. There are a few exceptions: tab headers, dropdowns and vertical labels can't. The following functions provide escape sequences: -* `minetest.get_color_escape_sequence(color)`: +* `core.get_color_escape_sequence(color)`: * `color` is a ColorString * The escape sequence sets the text color to `color` -* `minetest.colorize(color, message)`: +* `core.colorize(color, message)`: * Equivalent to: - `minetest.get_color_escape_sequence(color) .. + `core.get_color_escape_sequence(color) .. message .. - minetest.get_color_escape_sequence("#ffffff")` -* `minetest.get_background_escape_sequence(color)` + core.get_color_escape_sequence("#ffffff")` +* `core.get_background_escape_sequence(color)` * `color` is a ColorString * The escape sequence sets the background of the whole text element to `color`. Only defined for item descriptions and tooltips. -* `minetest.strip_foreground_colors(str)` +* `core.strip_foreground_colors(str)` * Removes foreground colors added by `get_color_escape_sequence`. -* `minetest.strip_background_colors(str)` +* `core.strip_background_colors(str)` * Removes background colors added by `get_background_escape_sequence`. -* `minetest.strip_colors(str)` +* `core.strip_colors(str)` * Removes all color escape sequences. @@ -3826,7 +3827,7 @@ The following functions provide escape sequences: Spatial Vectors =============== -Minetest stores 3-dimensional spatial vectors in Lua as tables of 3 coordinates, +Luanti stores 3-dimensional spatial vectors in Lua as tables of 3 coordinates, and has a class to represent them (`vector.*`), which this chapter is about. For details on what a spatial vectors is, please refer to Wikipedia: https://en.wikipedia.org/wiki/Euclidean_vector. @@ -3853,12 +3854,12 @@ Compatibility notes ------------------- Vectors used to be defined as tables of the form `{x = num, y = num, z = num}`. -Since Minetest 5.5.0, vectors additionally have a metatable to enable easier use. +Since version 5.5.0, vectors additionally have a metatable to enable easier use. Note: Those old-style vectors can still be found in old mod code. Hence, mod and engine APIs still need to be able to cope with them in many places. Manually constructed tables are deprecated and highly discouraged. This interface -should be used to ensure seamless compatibility between mods and the Minetest API. +should be used to ensure seamless compatibility between mods and the Luanti API. This is especially important to callback function parameters and functions overwritten by mods. Also, though not likely, the internal implementation of a vector might change in @@ -4041,8 +4042,8 @@ vectors. For example: -* `minetest.hash_node_position` (Only works on node positions.) -* `minetest.dir_to_wallmounted` (Involves wallmounted param2 values.) +* `core.hash_node_position` (Only works on node positions.) +* `core.dir_to_wallmounted` (Involves wallmounted param2 values.) @@ -4079,7 +4080,7 @@ Helper functions * e.g. `"a,b":split","` returns `{"a","b"}` * `string:trim()`: returns the string without whitespace pre- and suffixes * e.g. `"\n \t\tfoo bar\t ":trim()` returns `"foo bar"` -* `minetest.wrap_text(str, limit, as_table)`: returns a string or table +* `core.wrap_text(str, limit, as_table)`: returns a string or table * Adds newlines to the string to keep it within the specified character limit * Note that the returned lines may be longer than the limit since it only @@ -4087,15 +4088,15 @@ Helper functions * `limit`: number, maximal amount of characters in one line * `as_table`: boolean, if set to true, a table of lines instead of a string is returned, default: `false` -* `minetest.pos_to_string(pos, decimal_places)`: returns string `"(X,Y,Z)"` +* `core.pos_to_string(pos, decimal_places)`: returns string `"(X,Y,Z)"` * `pos`: table {x=X, y=Y, z=Z} * Converts the position `pos` to a human-readable, printable string * `decimal_places`: number, if specified, the x, y and z values of the position are rounded to the given decimal place. -* `minetest.string_to_pos(string)`: returns a position or `nil` +* `core.string_to_pos(string)`: returns a position or `nil` * Same but in reverse. * If the string can't be parsed to a position, nothing is returned. -* `minetest.string_to_area("(X1, Y1, Z1) (X2, Y2, Z2)", relative_to)`: +* `core.string_to_area("(X1, Y1, Z1) (X2, Y2, Z2)", relative_to)`: * returns two positions * Converts a string representing an area box into two positions * X1, Y1, ... Z2 are coordinates @@ -4104,16 +4105,16 @@ Helper functions * Tilde notation * `"~"`: Relative coordinate * `"~"`: Relative coordinate plus `` - * Example: `minetest.string_to_area("(1,2,3) (~5,~-5,~)", {x=10,y=10,z=10})` + * Example: `core.string_to_area("(1,2,3) (~5,~-5,~)", {x=10,y=10,z=10})` returns `{x=1,y=2,z=3}, {x=15,y=5,z=10}` -* `minetest.formspec_escape(string)`: returns a string +* `core.formspec_escape(string)`: returns a string * escapes the characters "[", "]", "\", "," and ";", which cannot be used in formspecs. -* `minetest.is_yes(arg)` +* `core.is_yes(arg)` * returns true if passed 'y', 'yes', 'true' or a number that isn't zero. -* `minetest.is_nan(arg)` +* `core.is_nan(arg)` * returns true when the passed number represents NaN. -* `minetest.get_us_time()` +* `core.get_us_time()` * returns time with microsecond precision. May not return wall time. * `table.copy(table)`: returns a table * returns a deep copy of `table` @@ -4138,16 +4139,16 @@ Helper functions * `random_func` defaults to `math.random`. This function receives two integers as arguments and should return a random integer inclusively between them. -* `minetest.pointed_thing_to_face_pos(placer, pointed_thing)`: returns a +* `core.pointed_thing_to_face_pos(placer, pointed_thing)`: returns a position. * returns the exact position on the surface of a pointed node -* `minetest.get_tool_wear_after_use(uses [, initial_wear])` +* `core.get_tool_wear_after_use(uses [, initial_wear])` * Simulates a tool being used once and returns the added wear, such that, if only this function is used to calculate wear, the tool will break exactly after `uses` times of uses * `uses`: Number of times the tool can be used * `initial_wear`: The initial wear the tool starts with (default: 0) -* `minetest.get_dig_params(groups, tool_capabilities [, wear])`: +* `core.get_dig_params(groups, tool_capabilities [, wear])`: Simulates an item that digs a node. Returns a table with the following fields: * `diggable`: `true` if node can be dug, `false` otherwise. @@ -4158,7 +4159,7 @@ Helper functions * `groups`: Table of the node groups of the node that would be dug * `tool_capabilities`: Tool capabilities table of the item * `wear`: Amount of wear the tool starts with (default: 0) -* `minetest.get_hit_params(groups, tool_capabilities [, time_from_last_punch [, wear]])`: +* `core.get_hit_params(groups, tool_capabilities [, time_from_last_punch [, wear]])`: Simulates an item that punches an object. Returns a table with the following fields: * `hp`: How much damage the punch would cause (between -65535 and 65535). @@ -4175,31 +4176,31 @@ Helper functions Translations ============ -Texts can be translated client-side with the help of `minetest.translate` and +Texts can be translated client-side with the help of `core.translate` and translation files. Translating a string -------------------- -Two functions are provided to translate strings: `minetest.translate` and -`minetest.get_translator`. +Two functions are provided to translate strings: `core.translate` and +`core.get_translator`. -* `minetest.get_translator(textdomain)` is a simple wrapper around - `minetest.translate` and `minetest.translate_n`. - After `local S, NS = minetest.get_translator(textdomain)`, we have - `S(str, ...)` equivalent to `minetest.translate(textdomain, str, ...)`, and - `NS(str, str_plural, n, ...)` to `minetest.translate_n(textdomain, str, str_plural, n, ...)`. +* `core.get_translator(textdomain)` is a simple wrapper around + `core.translate` and `core.translate_n`. + After `local S, NS = core.get_translator(textdomain)`, we have + `S(str, ...)` equivalent to `core.translate(textdomain, str, ...)`, and + `NS(str, str_plural, n, ...)` to `core.translate_n(textdomain, str, str_plural, n, ...)`. It is intended to be used in the following way, so that it avoids verbose - repetitions of `minetest.translate`: + repetitions of `core.translate`: ```lua - local S, NS = minetest.get_translator(textdomain) + local S, NS = core.get_translator(textdomain) S(str, ...) ``` As an extra commodity, if `textdomain` is nil, it is assumed to be "" instead. -* `minetest.translate(textdomain, str, ...)` translates the string `str` with +* `core.translate(textdomain, str, ...)` translates the string `str` with the given `textdomain` for disambiguation. The textdomain must match the textdomain specified in the translation file in order to get the string translated. This can be used so that a string is translated differently in @@ -4210,7 +4211,7 @@ Two functions are provided to translate strings: `minetest.translate` and arguments the translated string expects. Arguments are literal strings -- they will not be translated. -* `minetest.translate_n(textdomain, str, str_plural, n, ...)` translates the +* `core.translate_n(textdomain, str, str_plural, n, ...)` translates the string `str` with the given `textdomain` for disambiguaion. The value of `n`, which must be a nonnegative integer, is used to decide whether to use the singular or the plural version of the string. Depending on the locale of @@ -4227,12 +4228,12 @@ command that shows the amount of time since the player joined. We can do the following: ```lua -local S, NS = minetest.get_translator("hello") -minetest.register_on_joinplayer(function(player) +local S, NS = core.get_translator("hello") +core.register_on_joinplayer(function(player) local name = player:get_player_name() - minetest.chat_send_player(name, S("Hello @1, how are you today?", name)) + core.chat_send_player(name, S("Hello @1, how are you today?", name)) end) -minetest.register_chatcommand("playtime", { +core.register_chatcommand("playtime", { func = function(name) local last_login = core.get_auth_handler().get_auth(name).last_login local playtime = math.floor((last_login-os.time())/60) @@ -4283,7 +4284,7 @@ After creating the `locale` directory, a translation template for the above example using the following command: ```sh -xgettext -L lua -kS -kNS:1,2 -kminetest.translate:1c,2 -kminetest.translate_n:1c,2,3 \ +xgettext -L lua -kS -kNS:1,2 -kcore.translate:1c,2 -kcore.translate_n:1c,2,3 \ -d hello -o locale/hello.pot *.lua ``` @@ -4310,14 +4311,14 @@ further information on creating and updating translation files. Operations on translated strings -------------------------------- -The output of `minetest.translate` is a string, with escape sequences adding +The output of `core.translate` is a string, with escape sequences adding additional information to that string so that it can be translated on the different clients. In particular, you can't expect operations like string.length to work on them like you would expect them to, or string.gsub to work in the expected manner. However, string concatenation will still work as expected (note that you should only use this for things like formspecs; do not translate sentences by breaking them into parts; arguments should be used instead), and -operations such as `minetest.colorize` which are also concatenation. +operations such as `core.colorize` which are also concatenation. Old translation file format --------------------------- @@ -4343,7 +4344,7 @@ Hello @1, how are you today?=Hallo @1, wie geht es dir heute? ``` For old translation files, consider using the script `mod_translation_updater.py` -in the Minetest [modtools](https://github.com/minetest/modtools) repository to +in the Luanti [modtools](https://github.com/minetest/modtools) repository to generate and update translation files automatically from the Lua sources. Gettext translation file format @@ -4374,11 +4375,11 @@ Strings that need to be translated can contain several escapes, preceded by `@`. implemented, the original translation string **must** have its arguments in increasing order, without gaps or repetitions, starting from 1. * `@=` acts as a literal `=`. It is not required in strings given to - `minetest.translate`, but is in translation files to avoid being confused + `core.translate`, but is in translation files to avoid being confused with the `=` separating the original from the translation. * `@\n` (where the `\n` is a literal newline) acts as a literal newline. As with `@=`, this escape is not required in strings given to - `minetest.translate`, but is in translation files. + `core.translate`, but is in translation files. * `@n` acts as a literal newline as well. Server side translations @@ -4388,13 +4389,13 @@ On some specific cases, server translation could be useful. For example, filter a list on labels and send results to client. A method is supplied to achieve that: -`minetest.get_translated_string(lang_code, string)`: resolves translations in +`core.get_translated_string(lang_code, string)`: resolves translations in the given string just like the client would, using the translation files for `lang_code`. For this to have any effect, the string needs to contain translation -markup, e.g. `minetest.get_translated_string("fr", S("Hello"))`. +markup, e.g. `core.get_translated_string("fr", S("Hello"))`. The `lang_code` to use for a given player can be retrieved from -the table returned by `minetest.get_player_information(name)`. +the table returned by `core.get_player_information(name)`. IMPORTANT: This functionality should only be used for sorting, filtering or similar purposes. You do not need to use this to get translated strings to show up on the client. @@ -4414,7 +4415,7 @@ Say you have a mod called `mymod` with a short description in mod.conf: description = This is the short description ``` -Minetest will look for translations in the `mymod` textdomain as there's no +Luanti will look for translations in the `mymod` textdomain as there's no textdomain specified in mod.conf. For example, `mymod/locale/mymod.fr.tr`: ``` @@ -4424,7 +4425,7 @@ This is the short description=Voici la description succincte ### Games and Modpacks -For games and modpacks, Minetest will look for the textdomain in all mods. +For games and modpacks, Luanti will look for the textdomain in all mods. Say you have a game called `mygame` with the following game.conf: @@ -4433,7 +4434,7 @@ description = This is the game's short description textdomain = mygame ``` -Minetest will then look for the textdomain `mygame` in all mods, for example, +Luanti will then look for the textdomain `mygame` in all mods, for example, `mygame/mods/anymod/locale/mygame.fr.tr`. Note that it is still recommended that your textdomain match the mod name, but this isn't required. @@ -4443,7 +4444,7 @@ Perlin noise ============ Perlin noise creates a continuously-varying value depending on the input values. -Usually in Minetest the input values are either 2D or 3D coordinates in nodes. +Usually in Luanti the input values are either 2D or 3D coordinates in nodes. The result is used during map generation to create the terrain shape, vary heat and humidity to distribute biomes, vary the density of decorations or vary the structure of ores. @@ -4783,7 +4784,7 @@ structures, such as trees, cave spikes, rocks, and so on. ----------- Generates a L-system tree at the position where the decoration is placed. -Uses the same L-system as `minetest.spawn_tree`, but is faster than using it manually. +Uses the same L-system as `core.spawn_tree`, but is faster than using it manually. The `treedef` field in the decoration definition is used for the tree definition. @@ -4795,7 +4796,7 @@ Schematic specifier -------------------- A schematic specifier identifies a schematic by either a filename to a -Minetest Schematic file (`.mts`) or through raw data supplied through Lua, +Luanti Schematic file (`.mts`) or through raw data supplied through Lua, in the form of a table. This table specifies the following fields: * The `size` field is a 3D vector containing the dimensions of the provided @@ -4860,23 +4861,23 @@ logged. It is important to note that VoxelManip is designed for speed, and *not* ease of use or flexibility. If your mod requires a map manipulation facility that will handle 100% of all edge cases, or the use of high level node placement -features, perhaps `minetest.set_node()` is better suited for the job. +features, perhaps `core.set_node()` is better suited for the job. In addition, VoxelManip might not be faster, or could even be slower, for your specific use case. VoxelManip is most effective when setting large areas of map at once - for example, if only setting a 3x3x3 node area, a -`minetest.set_node()` loop may be more optimal. Always profile code using both +`core.set_node()` loop may be more optimal. Always profile code using both methods of map manipulation to determine which is most appropriate for your usage. -A recent simple test of setting cubic areas showed that `minetest.set_node()` +A recent simple test of setting cubic areas showed that `core.set_node()` is faster than a VoxelManip for a 3x3x3 node cube or smaller. Using VoxelManip ---------------- A VoxelManip object can be created any time using either: -`VoxelManip([p1, p2])`, or `minetest.get_voxel_manip([p1, p2])`. +`VoxelManip([p1, p2])`, or `core.get_voxel_manip([p1, p2])`. If the optional position parameters are present for either of these routines, the specified region will be pre-loaded into the VoxelManip object on creation. @@ -4964,8 +4965,8 @@ of the index for a single point in a flat VoxelManip array. A Content ID is a unique integer identifier for a specific node type. These IDs are used by VoxelManip in place of the node name string for `VoxelManip:get_data()` and `VoxelManip:set_data()`. You can use -`minetest.get_content_id()` to look up the Content ID for the specified node -name, and `minetest.get_name_from_content_id()` to look up the node name string +`core.get_content_id()` to look up the Content ID for the specified node +name, and `core.get_name_from_content_id()` to look up the node name string for a given Content ID. After registration of a node, its Content ID will remain the same throughout execution of the mod. @@ -4973,9 +4974,9 @@ Note that the node being queried needs to have already been been registered. The following builtin node types have their Content IDs defined as constants: -* `minetest.CONTENT_UNKNOWN`: ID for "unknown" nodes -* `minetest.CONTENT_AIR`: ID for "air" nodes -* `minetest.CONTENT_IGNORE`: ID for "ignore" nodes +* `core.CONTENT_UNKNOWN`: ID for "unknown" nodes +* `core.CONTENT_AIR`: ID for "air" nodes +* `core.CONTENT_IGNORE`: ID for "ignore" nodes ### Mapgen VoxelManip objects @@ -4985,12 +4986,12 @@ Mapgen). Most of the rules previously described still apply but with a few differences: * The Mapgen VoxelManip object is retrieved using: - `minetest.get_mapgen_object("voxelmanip")` + `core.get_mapgen_object("voxelmanip")` * This VoxelManip object already has the region of map just generated loaded into it; it's not necessary to call `VoxelManip:read_from_map()`. Note that the region of map it has loaded is NOT THE SAME as the `minp`, `maxp` - parameters of `on_generated()`. Refer to `minetest.get_mapgen_object` docs. + parameters of `on_generated()`. Refer to `core.get_mapgen_object` docs. Once you're done you still need to call `VoxelManip:write_to_map()` * The `on_generated()` callbacks of some mods may place individual nodes in the @@ -4998,7 +4999,7 @@ differences: same Mapgen VoxelManip object is passed through each `on_generated()` callback, it becomes necessary for the Mapgen VoxelManip object to maintain consistency with the current map state. For this reason, calling any of - `minetest.add_node()`, `minetest.set_node()` or `minetest.swap_node()` + `core.add_node()`, `core.set_node()` or `core.swap_node()` will also update the Mapgen VoxelManip object's internal state active on the current thread. @@ -5014,12 +5015,12 @@ flowing. It is recommended to call this function only after having written all buffered data back to the VoxelManip object, save for special situations where the modder desires to only have certain liquid nodes begin flowing. -The functions `minetest.generate_ores()` and `minetest.generate_decorations()` +The functions `core.generate_ores()` and `core.generate_decorations()` will generate all registered decorations and ores throughout the full area inside of the specified VoxelManip object. -`minetest.place_schematic_on_vmanip()` is otherwise identical to -`minetest.place_schematic()`, except instead of placing the specified schematic +`core.place_schematic_on_vmanip()` is otherwise identical to +`core.place_schematic()`, except instead of placing the specified schematic directly on the map at the specified position, it will place the schematic inside the VoxelManip. @@ -5032,13 +5033,13 @@ inside the VoxelManip. * If you attempt to use a VoxelManip to read a region of the map that has already been generated, but is not currently loaded, that region will be loaded from disk. This means that reading a region of the map with a - VoxelManip has a similar effect as calling `minetest.load_area` on that + VoxelManip has a similar effect as calling `core.load_area` on that region. * If a region of the map has either not yet been generated or is outside the map boundaries, it is filled with "ignore" nodes. Writing to regions of the map that are not yet generated may result in unexpected behavior. You - can use `minetest.emerge_area` to make sure that the area you want to + can use `core.emerge_area` to make sure that the area you want to read/write is already generated. * Other mods, or the core itself, could possibly modify the area of the map @@ -5066,7 +5067,7 @@ Methods * if `light` is true, then lighting is automatically recalculated. The default value is true. If `light` is false, no light calculations happen, and you should correct - all modified blocks with `minetest.fix_light()` as soon as possible. + all modified blocks with `core.fix_light()` as soon as possible. Keep in mind that modifying the map where light is incorrect can cause more lighting bugs. * `get_node_at(pos)`: Returns a `MapNode` table of the node currently loaded in @@ -5084,7 +5085,7 @@ Methods a uniform value. * `light` is a table, `{day=<0...15>, night=<0...15>}` * To be used only by a `VoxelManip` object from - `minetest.get_mapgen_object`. + `core.get_mapgen_object`. * (`p1`, `p2`) is the area in which lighting is set, defaults to the whole area if left out. * `get_light_data([buffer])`: Gets the light data read into the @@ -5109,7 +5110,7 @@ Methods the `VoxelManip`. * `calc_lighting([p1, p2], [propagate_shadow])`: Calculate lighting within the `VoxelManip`. - * To be used only with a `VoxelManip` object from `minetest.get_mapgen_object`. + * To be used only with a `VoxelManip` object from `core.get_mapgen_object`. * (`p1`, `p2`) is the area in which lighting is set, defaults to the whole area if left out or nil. For almost all uses these should be left out or nil to use the default. @@ -5119,7 +5120,7 @@ Methods * `update_liquids()`: Update liquid flow * `was_modified()`: Returns `true` if the data in the voxel manipulator has been modified since it was last read from the map. This means you have to call `get_data` again. - This only applies to a `VoxelManip` object from `minetest.get_mapgen_object`, + This only applies to a `VoxelManip` object from `core.get_mapgen_object`, where the engine will keep the map and the VM in sync automatically. * Note: this doesn't do what you think it does and is subject to removal. Don't use it! * `get_emerged_area()`: Returns actual emerged minimum and maximum positions. @@ -5130,7 +5131,7 @@ Methods A helper class for voxel areas. It can be created via `VoxelArea(pmin, pmax)` or `VoxelArea:new({MinEdge = pmin, MaxEdge = pmax})`. -The coordinates are *inclusive*, like most other things in Minetest. +The coordinates are *inclusive*, like most other things in Luanti. ### Methods @@ -5191,7 +5192,7 @@ Mapgen objects A mapgen object is a construct used in map generation. Mapgen objects can be used by an `on_generated` callback to speed up operations by avoiding unnecessary recalculations, these can be retrieved using the -`minetest.get_mapgen_object()` function. If the requested Mapgen object is +`core.get_mapgen_object()` function. If the requested Mapgen object is unavailable, or `get_mapgen_object()` was called outside of an `on_generated` callback, `nil` is returned. @@ -5225,7 +5226,7 @@ generated chunk by the current mapgen. ### `gennotify` Returns a table. You need to announce your interest in a specific -field by calling `minetest.set_gen_notify()` *before* map generation happens. +field by calling `core.set_gen_notify()` *before* map generation happens. * key = string: generation notification type * value = list of positions (usually) @@ -5247,7 +5248,7 @@ Available generation notification types: * (see below) Decorations have a key in the format of `"decoration#id"`, where `id` is the -numeric unique decoration ID as returned by `minetest.get_decoration_id()`. +numeric unique decoration ID as returned by `core.get_decoration_id()`. For example, `decoration#123`. The returned positions are the ground surface 'place_on' nodes, @@ -5276,8 +5277,8 @@ Callbacks: Calling `object:remove()` on an active object will call this with `removal=true`. The mapblock the entity resides in being unloaded will call this with `removal=false`. * Note that this won't be called if the object hasn't been activated in the first place. - In particular, `minetest.clear_objects({mode = "full"})` won't call this, - whereas `minetest.clear_objects({mode = "quick"})` might call this. + In particular, `core.clear_objects({mode = "full"})` won't call this, + whereas `core.clear_objects({mode = "quick"})` might call this. * `on_step(self, dtime, moveresult)` * Called on every server tick, after movement and collision processing. * `dtime`: elapsed time since last call @@ -5422,7 +5423,7 @@ apple_tree={ fruit_chance=10, fruit="default:apple" } -minetest.spawn_tree(pos,apple_tree) +core.spawn_tree(pos,apple_tree) ``` Privileges @@ -5436,7 +5437,7 @@ this ability is implemented in `/teleport` command which requires `teleport` pri Registering privileges ---------------------- -A mod can register a custom privilege using `minetest.register_privilege` function +A mod can register a custom privilege using `core.register_privilege` function to give server administrators fine-grained access control over mod functionality. For consistency and practical reasons, privileges should strictly increase the abilities of the user. @@ -5445,27 +5446,27 @@ Do not register custom privileges that e.g. restrict the player from certain in- Checking privileges ------------------- -A mod can call `minetest.check_player_privs` to test whether a player has privileges +A mod can call `core.check_player_privs` to test whether a player has privileges to perform an operation. -Also, when registering a chat command with `minetest.register_chatcommand` a mod can +Also, when registering a chat command with `core.register_chatcommand` a mod can declare privileges that the command requires using the `privs` field of the command definition. Managing player privileges -------------------------- -A mod can update player privileges using `minetest.set_player_privs` function. +A mod can update player privileges using `core.set_player_privs` function. Players holding the `privs` privilege can see and manage privileges for all players on the server. -A mod can subscribe to changes in player privileges using `minetest.register_on_priv_grant` -and `minetest.register_on_priv_revoke` functions. +A mod can subscribe to changes in player privileges using `core.register_on_priv_grant` +and `core.register_on_priv_revoke` functions. Built-in privileges ------------------- -Minetest includes a set of built-in privileges that control capabilities -provided by the Minetest engine and can be used by mods: +Luanti includes a set of built-in privileges that control capabilities +provided by the Luanti engine and can be used by mods: * Basic privileges are normally granted to all players: * `shout`: can communicate using the in-game chat. @@ -5505,30 +5506,30 @@ provided by the Minetest engine and can be used by mods: Related settings ---------------- -Minetest includes the following settings to control behavior of privileges: +Luanti includes the following settings to control behavior of privileges: * `default_privs`: defines privileges granted to new players. * `basic_privs`: defines privileges that can be granted/revoked by players having the `basic_privs` privilege. This can be used, for example, to give limited moderation powers to selected users. -'minetest' namespace reference -============================== +'core' namespace reference +========================== Utilities --------- -* `minetest.get_current_modname()`: returns the currently loading mod's name, +* `core.get_current_modname()`: returns the currently loading mod's name, when loading a mod. -* `minetest.get_modpath(modname)`: returns the directory path for a mod, +* `core.get_modpath(modname)`: returns the directory path for a mod, e.g. `"/home/user/.minetest/usermods/modname"`. * Returns nil if the mod is not enabled or does not exist (not installed). * Works regardless of whether the mod has been loaded yet. * Useful for loading additional `.lua` modules or static data from a mod, or checking if a mod is enabled. -* `minetest.get_modnames()`: returns a list of enabled mods, sorted alphabetically. +* `core.get_modnames()`: returns a list of enabled mods, sorted alphabetically. * Does not include disabled mods, even if they are installed. -* `minetest.get_game_info()`: returns a table containing information about the +* `core.get_game_info()`: returns a table containing information about the current game. Note that other meta information (e.g. version/release number) can be manually read from `game.conf` in the game's root directory. @@ -5542,16 +5543,16 @@ Utilities } ``` -* `minetest.get_worldpath()`: returns e.g. `"/home/user/.minetest/world"` +* `core.get_worldpath()`: returns e.g. `"/home/user/.minetest/world"` * Useful for storing custom data -* `minetest.get_mod_data_path()`: returns e.g. `"/home/user/.minetest/mod_data/mymod"` +* `core.get_mod_data_path()`: returns e.g. `"/home/user/.minetest/mod_data/mymod"` * Useful for storing custom data *independently of worlds*. * Must be called during mod load time. * Can read or write to this directory at any time. - * It's possible that multiple Minetest instances are running at the same + * It's possible that multiple Luanti instances are running at the same time, which may lead to corruption if you are not careful. -* `minetest.is_singleplayer()` -* `minetest.features`: Table containing API feature flags +* `core.is_singleplayer()` +* `core.features`: Table containing API feature flags ```lua { @@ -5585,7 +5586,7 @@ Utilities formspec_version_element = true, -- Whether AreaStore's IDs are kept on save/load (5.1.0) area_store_persistent_ids = true, - -- Whether minetest.find_path is functional (5.2.0) + -- Whether core.find_path is functional (5.2.0) pathfinder_works = true, -- Whether Collision info is available to an objects' on_step (5.3.0) object_step_has_moveresult = true, @@ -5627,7 +5628,7 @@ Utilities -- PseudoRandom has get_state method -- PcgRandom has get_state and set_state methods (5.9.0) random_state_restore = true, - -- minetest.after guarantees that coexisting jobs are executed primarily + -- core.after guarantees that coexisting jobs are executed primarily -- in order of expiry and secondarily in order of registration (5.9.0) after_order_expiry_registration = true, -- wallmounted nodes mounted at floor or ceiling may additionally @@ -5646,11 +5647,11 @@ Utilities -- Overridable pointing range using the itemstack meta key `"range"` (5.9.0) item_meta_range = true, -- Allow passing an optional "actor" ObjectRef to the following functions: - -- minetest.place_node, minetest.dig_node, minetest.punch_node (5.9.0) + -- core.place_node, core.dig_node, core.punch_node (5.9.0) node_interaction_actor = true, -- "new_pos" field in entity moveresult (5.9.0) moveresult_new_pos = true, - -- Allow removing definition fields in `minetest.override_item` (5.9.0) + -- Allow removing definition fields in `core.override_item` (5.9.0) override_item_remove_fields = true, -- The predefined hotbar is a Lua HUD element of type `hotbar` (5.10.0) hotbar_hud_element = true, @@ -5661,10 +5662,10 @@ Utilities } ``` -* `minetest.has_feature(arg)`: returns `boolean, missing_features` +* `core.has_feature(arg)`: returns `boolean, missing_features` * `arg`: string or table in format `{foo=true, bar=true}` * `missing_features`: `{foo=true, bar=true}` -* `minetest.get_player_information(player_name)`: Table containing information +* `core.get_player_information(player_name)`: Table containing information about a player. Example return value: ```lua @@ -5694,7 +5695,7 @@ Utilities } ``` -* `minetest.get_player_window_information(player_name)`: +* `core.get_player_window_information(player_name)`: ```lua -- Will only be present if the client sent this information (requires v5.7+) @@ -5715,7 +5716,7 @@ Utilities y = 577, }, - -- Estimated maximum formspec size before Minetest will start shrinking the + -- Estimated maximum formspec size before Luanti will start shrinking the -- formspec to fit. For a fullscreen formspec, use this formspec size and -- `padding[0,0]`. `bgcolor[;true]` is also recommended. max_formspec_size = { @@ -5733,40 +5734,40 @@ Utilities -- Whether the touchscreen controls are enabled. -- Usually (but not always) `true` on Android. - -- Requires at least Minetest 5.9.0 on the client. For older clients, it + -- Requires at least version 5.9.0 on the client. For older clients, it -- is always set to `false`. touch_controls = false, } ``` -* `minetest.mkdir(path)`: returns success. +* `core.mkdir(path)`: returns success. * Creates a directory specified by `path`, creating parent directories if they don't exist. -* `minetest.rmdir(path, recursive)`: returns success. +* `core.rmdir(path, recursive)`: returns success. * Removes a directory specified by `path`. * If `recursive` is set to `true`, the directory is recursively removed. Otherwise, the directory will only be removed if it is empty. * Returns true on success, false on failure. -* `minetest.cpdir(source, destination)`: returns success. +* `core.cpdir(source, destination)`: returns success. * Copies a directory specified by `path` to `destination` * Any files in `destination` will be overwritten if they already exist. * Returns true on success, false on failure. -* `minetest.mvdir(source, destination)`: returns success. +* `core.mvdir(source, destination)`: returns success. * Moves a directory specified by `path` to `destination`. * If the `destination` is a non-empty directory, then the move will fail. * Returns true on success, false on failure. -* `minetest.get_dir_list(path, [is_dir])`: returns list of entry names +* `core.get_dir_list(path, [is_dir])`: returns list of entry names * is_dir is one of: * nil: return all entries, * true: return only subdirectory names, or * false: return only file names. -* `minetest.safe_file_write(path, content)`: returns boolean indicating success +* `core.safe_file_write(path, content)`: returns boolean indicating success * Replaces contents of file at path with new contents in a safe (atomic) way. Use this instead of below code when writing e.g. database files: `local f = io.open(path, "wb"); f:write(content); f:close()` -* `minetest.get_version()`: returns a table containing components of the +* `core.get_version()`: returns a table containing components of the engine version. Components: - * `project`: Name of the project, eg, "Minetest" + * `project`: Name of the project, eg, "Luanti" * `string`: Simple version, eg, "1.2.3-dev" * `proto_min`: The minimum supported protocol version * `proto_max`: The maximum supported protocol version @@ -5778,27 +5779,27 @@ Utilities reliable or verifiable. Compatible forks will have a different name and version entirely. To check for the presence of engine features, test whether the functions exported by the wanted features exist. For example: - `if minetest.check_for_falling then ... end`. -* `minetest.sha1(data, [raw])`: returns the sha1 hash of data + `if core.check_for_falling then ... end`. +* `core.sha1(data, [raw])`: returns the sha1 hash of data * `data`: string of data to hash * `raw`: return raw bytes instead of hex digits, default: false -* `minetest.sha256(data, [raw])`: returns the sha256 hash of data +* `core.sha256(data, [raw])`: returns the sha256 hash of data * `data`: string of data to hash * `raw`: return raw bytes instead of hex digits, default: false -* `minetest.colorspec_to_colorstring(colorspec)`: Converts a ColorSpec to a +* `core.colorspec_to_colorstring(colorspec)`: Converts a ColorSpec to a ColorString. If the ColorSpec is invalid, returns `nil`. * `colorspec`: The ColorSpec to convert -* `minetest.colorspec_to_bytes(colorspec)`: Converts a ColorSpec to a raw +* `core.colorspec_to_bytes(colorspec)`: Converts a ColorSpec to a raw string of four bytes in an RGBA layout, returned as a string. * `colorspec`: The ColorSpec to convert -* `minetest.colorspec_to_table(colorspec)`: Converts a ColorSpec into RGBA table +* `core.colorspec_to_table(colorspec)`: Converts a ColorSpec into RGBA table form. If the ColorSpec is invalid, returns `nil`. You can use this to parse ColorStrings. * `colorspec`: The ColorSpec to convert -* `minetest.time_to_day_night_ratio(time_of_day)`: Returns a "day-night ratio" value +* `core.time_to_day_night_ratio(time_of_day)`: Returns a "day-night ratio" value (as accepted by `ObjectRef:override_day_night_ratio`) that is equivalent to - the given "time of day" value (as returned by `minetest.get_timeofday`). -* `minetest.encode_png(width, height, data, [compression])`: Encode a PNG + the given "time of day" value (as returned by `core.get_timeofday`). +* `core.encode_png(width, height, data, [compression])`: Encode a PNG image and return it in string form. * `width`: Width of the image * `height`: Height of the image @@ -5811,16 +5812,16 @@ Utilities You can use `colorspec_to_bytes` to generate raw RGBA values. Palettes are not supported at the moment. You may use this to procedurally generate textures during server init. -* `minetest.urlencode(str)`: Encodes reserved URI characters by a +* `core.urlencode(str)`: Encodes reserved URI characters by a percent sign followed by two hex digits. See [RFC 3986, section 2.3](https://datatracker.ietf.org/doc/html/rfc3986#section-2.3). Logging ------- -* `minetest.debug(...)` - * Equivalent to `minetest.log(table.concat({...}, "\t"))` -* `minetest.log([level,] text)` +* `core.debug(...)` + * Equivalent to `core.log(table.concat({...}, "\t"))` +* `core.log([level,] text)` * `level` is one of `"none"`, `"error"`, `"warning"`, `"action"`, `"info"`, or `"verbose"`. Default is `"none"`. @@ -5831,51 +5832,51 @@ Call these functions only at load time! ### Environment -* `minetest.register_node(name, node definition)` -* `minetest.register_craftitem(name, item definition)` -* `minetest.register_tool(name, item definition)` -* `minetest.override_item(name, redefinition, del_fields)` +* `core.register_node(name, node definition)` +* `core.register_craftitem(name, item definition)` +* `core.register_tool(name, item definition)` +* `core.override_item(name, redefinition, del_fields)` * `redefinition` is a table of fields `[name] = new_value`, overwriting fields of or adding fields to the existing definition. * `del_fields` is a list of field names to be set to `nil` ("deleted from") the original definition. * Overrides fields of an item registered with register_node/tool/craftitem. * Note: Item must already be defined, (opt)depend on the mod defining it. - * Example: `minetest.override_item("default:mese", - {light_source=minetest.LIGHT_MAX}, {"sounds"})`: + * Example: `core.override_item("default:mese", + {light_source=core.LIGHT_MAX}, {"sounds"})`: Overwrites the `light_source` field, removes the sounds from the definition of the mese block. -* `minetest.unregister_item(name)` +* `core.unregister_item(name)` * Unregisters the item from the engine, and deletes the entry with key - `name` from `minetest.registered_items` and from the associated item table - according to its nature: `minetest.registered_nodes`, etc. -* `minetest.register_entity(name, entity definition)` -* `minetest.register_abm(abm definition)` -* `minetest.register_lbm(lbm definition)` -* `minetest.register_alias(alias, original_name)` + `name` from `core.registered_items` and from the associated item table + according to its nature: `core.registered_nodes`, etc. +* `core.register_entity(name, entity definition)` +* `core.register_abm(abm definition)` +* `core.register_lbm(lbm definition)` +* `core.register_alias(alias, original_name)` * Also use this to set the 'mapgen aliases' needed in a game for the core mapgens. See [Mapgen aliases] section above. -* `minetest.register_alias_force(alias, original_name)` -* `minetest.register_ore(ore definition)` +* `core.register_alias_force(alias, original_name)` +* `core.register_ore(ore definition)` * Returns an integer object handle uniquely identifying the registered ore on success. * The order of ore registrations determines the order of ore generation. -* `minetest.register_biome(biome definition)` +* `core.register_biome(biome definition)` * Returns an integer object handle uniquely identifying the registered - biome on success. To get the biome ID, use `minetest.get_biome_id`. -* `minetest.unregister_biome(name)` + biome on success. To get the biome ID, use `core.get_biome_id`. +* `core.unregister_biome(name)` * Unregisters the biome from the engine, and deletes the entry with key - `name` from `minetest.registered_biomes`. + `name` from `core.registered_biomes`. * Warning: This alters the biome to biome ID correspondences, so any decorations or ores using the 'biomes' field must afterwards be cleared and re-registered. -* `minetest.register_decoration(decoration definition)` +* `core.register_decoration(decoration definition)` * Returns an integer object handle uniquely identifying the registered decoration on success. To get the decoration ID, use - `minetest.get_decoration_id`. + `core.get_decoration_id`. * The order of decoration registrations determines the order of decoration generation. -* `minetest.register_schematic(schematic definition)` +* `core.register_schematic(schematic definition)` * Returns an integer object handle uniquely identifying the registered schematic on success. * If the schematic is loaded from a file, the `name` field is set to the @@ -5883,45 +5884,45 @@ Call these functions only at load time! * If the function is called when loading the mod, and `name` is a relative path, then the current mod path will be prepended to the schematic filename. -* `minetest.clear_registered_biomes()` +* `core.clear_registered_biomes()` * Clears all biomes currently registered. * Warning: Clearing and re-registering biomes alters the biome to biome ID correspondences, so any decorations or ores using the 'biomes' field must afterwards be cleared and re-registered. -* `minetest.clear_registered_decorations()` +* `core.clear_registered_decorations()` * Clears all decorations currently registered. -* `minetest.clear_registered_ores()` +* `core.clear_registered_ores()` * Clears all ores currently registered. -* `minetest.clear_registered_schematics()` +* `core.clear_registered_schematics()` * Clears all schematics currently registered. ### Gameplay -* `minetest.register_craft(recipe)` +* `core.register_craft(recipe)` * Check recipe table syntax for different types below. -* `minetest.clear_craft(recipe)` +* `core.clear_craft(recipe)` * Will erase existing craft based either on output item or on input recipe. * Specify either output or input only. If you specify both, input will be ignored. For input use the same recipe table syntax as for - `minetest.register_craft(recipe)`. For output specify only the item, + `core.register_craft(recipe)`. For output specify only the item, without a quantity. * Returns false if no erase candidate could be found, otherwise returns true. * **Warning**! The type field ("shaped", "cooking" or any other) will be ignored if the recipe contains output. Erasing is then done independently from the crafting method. -* `minetest.register_chatcommand(cmd, chatcommand definition)` -* `minetest.override_chatcommand(name, redefinition)` +* `core.register_chatcommand(cmd, chatcommand definition)` +* `core.override_chatcommand(name, redefinition)` * Overrides fields of a chatcommand registered with `register_chatcommand`. -* `minetest.unregister_chatcommand(name)` +* `core.unregister_chatcommand(name)` * Unregisters a chatcommands registered with `register_chatcommand`. -* `minetest.register_privilege(name, definition)` +* `core.register_privilege(name, definition)` * `definition` can be a description or a definition table (see [Privilege definition]). * If it is a description, the priv will be granted to singleplayer and admin by default. * To allow players with `basic_privs` to grant, see the `basic_privs` minetest.conf setting. -* `minetest.register_authentication_handler(authentication handler definition)` +* `core.register_authentication_handler(authentication handler definition)` * Registers an auth handler that overrides the builtin one. * This function can be called by a single mod once only. @@ -5930,39 +5931,39 @@ Global callback registration functions Call these functions only at load time! -* `minetest.register_globalstep(function(dtime))` +* `core.register_globalstep(function(dtime))` * Called every server step, usually interval of 0.1s. * `dtime` is the time since last execution in seconds. -* `minetest.register_on_mods_loaded(function())` +* `core.register_on_mods_loaded(function())` * Called after mods have finished loading and before the media is cached or the aliases handled. -* `minetest.register_on_shutdown(function())` +* `core.register_on_shutdown(function())` * Called before server shutdown * Players that were kicked by the shutdown procedure are still fully accessible - in `minetest.get_connected_players()`. + in `core.get_connected_players()`. * **Warning**: If the server terminates abnormally (i.e. crashes), the registered callbacks **will likely not be run**. Data should be saved at semi-frequent intervals as well as on server shutdown. -* `minetest.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack, pointed_thing))` +* `core.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack, pointed_thing))` * Called when a node has been placed * If return `true` no item is taken from `itemstack` * `placer` may be any valid ObjectRef or nil. * **Not recommended**; use `on_construct` or `after_place_node` in node definition whenever possible. -* `minetest.register_on_dignode(function(pos, oldnode, digger))` +* `core.register_on_dignode(function(pos, oldnode, digger))` * Called when a node has been dug. * **Not recommended**; Use `on_destruct` or `after_dig_node` in node definition whenever possible. -* `minetest.register_on_punchnode(function(pos, node, puncher, pointed_thing))` +* `core.register_on_punchnode(function(pos, node, puncher, pointed_thing))` * Called when a node is punched -* `minetest.register_on_generated(function(minp, maxp, blockseed))` +* `core.register_on_generated(function(minp, maxp, blockseed))` * Called after generating a piece of world between `minp` and `maxp`. * **Avoid using this** whenever possible. As with other callbacks this blocks the main thread and introduces noticeable latency. Consider [Mapgen environment] for an alternative. -* `minetest.register_on_newplayer(function(ObjectRef))` +* `core.register_on_newplayer(function(ObjectRef))` * Called when a new player enters the world for the first time -* `minetest.register_on_punchplayer(function(player, hitter, time_from_last_punch, tool_capabilities, dir, damage))` +* `core.register_on_punchplayer(function(player, hitter, time_from_last_punch, tool_capabilities, dir, damage))` * Called when a player is punched * Note: This callback is invoked even if the punched player is dead. * `player`: ObjectRef - Player that was punched @@ -5974,12 +5975,12 @@ Call these functions only at load time! the puncher to the punched. * `damage`: Number that represents the damage calculated by the engine * should return `true` to prevent the default damage mechanism -* `minetest.register_on_rightclickplayer(function(player, clicker))` +* `core.register_on_rightclickplayer(function(player, clicker))` * Called when the 'place/use' key was used while pointing a player (not necessarily an actual rightclick) * `player`: ObjectRef - Player that is acted upon * `clicker`: ObjectRef - Object that acted upon `player`, may or may not be a player -* `minetest.register_on_player_hpchange(function(player, hp_change, reason), modifier)` +* `core.register_on_player_hpchange(function(player, hp_change, reason), modifier)` * Called when the player gets damaged or healed * When `hp == 0`, damage doesn't trigger this callback. * When `hp == hp_max`, healing does still trigger this callback. @@ -5987,7 +5988,7 @@ Call these functions only at load time! * `hp_change`: the amount of change. Negative when it is damage. * Historically, the new HP value was clamped to [0, 65535] before calculating the HP change. This clamping has been removed as of - Minetest 5.10.0 + version 5.10.0 * `reason`: a PlayerHPChangeReason table. * The `type` field will have one of the following values: * `set_hp`: A mod or the engine called `set_hp` without @@ -6005,34 +6006,34 @@ Call these functions only at load time! Note: modifiers only get a temporary `hp_change` that can be modified by later modifiers. Modifiers can return true as a second argument to stop the execution of further functions. Non-modifiers receive the final HP change calculated by the modifiers. -* `minetest.register_on_dieplayer(function(ObjectRef, reason))` +* `core.register_on_dieplayer(function(ObjectRef, reason))` * Called when a player dies * `reason`: a PlayerHPChangeReason table, see register_on_player_hpchange - * For customizing the death screen, see `minetest.show_death_screen`. -* `minetest.register_on_respawnplayer(function(ObjectRef))` + * For customizing the death screen, see `core.show_death_screen`. +* `core.register_on_respawnplayer(function(ObjectRef))` * Called when player is to be respawned * Called _before_ repositioning of player occurs * return true in func to disable regular player placement -* `minetest.register_on_prejoinplayer(function(name, ip))` +* `core.register_on_prejoinplayer(function(name, ip))` * Called when a client connects to the server, prior to authentication * If it returns a string, the client is disconnected with that string as reason. -* `minetest.register_on_joinplayer(function(ObjectRef, last_login))` +* `core.register_on_joinplayer(function(ObjectRef, last_login))` * Called when a player joins the game * `last_login`: The timestamp of the previous login, or nil if player is new -* `minetest.register_on_leaveplayer(function(ObjectRef, timed_out))` +* `core.register_on_leaveplayer(function(ObjectRef, timed_out))` * Called when a player leaves the game * Does not get executed for connected players on shutdown. * `timed_out`: True for timeout, false for other reasons. -* `minetest.register_on_authplayer(function(name, ip, is_success))` +* `core.register_on_authplayer(function(name, ip, is_success))` * Called when a client attempts to log into an account. * `name`: The name of the account being authenticated. * `ip`: The IP address of the client * `is_success`: Whether the client was successfully authenticated * For newly registered accounts, `is_success` will always be true -* `minetest.register_on_auth_fail(function(name, ip))` - * Deprecated: use `minetest.register_on_authplayer(name, ip, is_success)` instead. -* `minetest.register_on_cheat(function(ObjectRef, cheat))` +* `core.register_on_auth_fail(function(name, ip))` + * Deprecated: use `core.register_on_authplayer(name, ip, is_success)` instead. +* `core.register_on_cheat(function(ObjectRef, cheat))` * Called when a player cheats * `cheat`: `{type=}`, where `` is one of: * `moved_too_fast` @@ -6042,16 +6043,16 @@ Call these functions only at load time! * `finished_unknown_dig` * `dug_unbreakable` * `dug_too_fast` -* `minetest.register_on_chat_message(function(name, message))` +* `core.register_on_chat_message(function(name, message))` * Called always when a player says something * Return `true` to mark the message as handled, which means that it will not be sent to other players. -* `minetest.register_on_chatcommand(function(name, command, params))` - * Called always when a chatcommand is triggered, before `minetest.registered_chatcommands` +* `core.register_on_chatcommand(function(name, command, params))` + * Called always when a chatcommand is triggered, before `core.registered_chatcommands` is checked to see if the command exists, but after the input is parsed. * Return `true` to mark the command as handled, which means that the default handlers will be prevented. -* `minetest.register_on_player_receive_fields(function(player, formname, fields))` +* `core.register_on_player_receive_fields(function(player, formname, fields))` * Called when the server received input from `player`. Specifically, this is called on any of the following events: @@ -6064,7 +6065,7 @@ Call these functions only at load time! * an entry was double-clicked in a textlist or table, * a scrollbar was moved, or * the form was actively closed by the player. - * `formname` is the name passed to `minetest.show_formspec`. + * `formname` is the name passed to `core.show_formspec`. Special case: The empty string refers to the player inventory (the formspec set by the `set_inventory_formspec` player method). * Fields are sent for formspec elements which define a field. `fields` @@ -6079,9 +6080,9 @@ Call these functions only at load time! dropdown argument. * `tabheader`: Tab index, starting with `"1"` (only if tab changed) * `checkbox`: `"true"` if checked, `"false"` if unchecked - * `textlist`: See `minetest.explode_textlist_event` - * `table`: See `minetest.explode_table_event` - * `scrollbar`: See `minetest.explode_scrollbar_event` + * `textlist`: See `core.explode_textlist_event` + * `table`: See `core.explode_table_event` + * `scrollbar`: See `core.explode_scrollbar_event` * Special case: `["quit"]="true"` is sent when the user actively closed the form by mouse click, keypress or through a button_exit[] element. @@ -6092,7 +6093,7 @@ Call these functions only at load time! text field. See also: `field_close_on_enter`. * Newest functions are called first * If function returns `true`, remaining functions are not called -* `minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv))` +* `core.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv))` * Called when `player` crafts something * `itemstack` is the output * `old_craft_grid` contains the recipe (Note: the one in the inventory is @@ -6100,16 +6101,16 @@ Call these functions only at load time! * `craft_inv` is the inventory with the crafting grid * Return either an `ItemStack`, to replace the output, or `nil`, to not modify it. -* `minetest.register_craft_predict(function(itemstack, player, old_craft_grid, craft_inv))` +* `core.register_craft_predict(function(itemstack, player, old_craft_grid, craft_inv))` * The same as before, except that it is called before the player crafts, to make craft prediction, and it should not change anything. -* `minetest.register_allow_player_inventory_action(function(player, action, inventory, inventory_info))` +* `core.register_allow_player_inventory_action(function(player, action, inventory, inventory_info))` * Determines how much of a stack may be taken, put or moved to a player inventory. - * Function arguments: see `minetest.register_on_player_inventory_action` + * Function arguments: see `core.register_on_player_inventory_action` * Return a numeric value to limit the amount of items to be taken, put or moved. A value of `-1` for `take` will make the source stack infinite. -* `minetest.register_on_player_inventory_action(function(player, action, inventory, inventory_info))` +* `core.register_on_player_inventory_action(function(player, action, inventory, inventory_info))` * Called after an item take, put or move event from/to/in a player inventory * These inventory actions are recognized: * move: Item was moved within the player inventory @@ -6123,52 +6124,52 @@ Call these functions only at load time! * `put`: `{listname=string, index=number, stack=ItemStack}` * `take`: Same as `put` * Does not accept or handle any return value. -* `minetest.register_on_protection_violation(function(pos, name))` +* `core.register_on_protection_violation(function(pos, name))` * Called by `builtin` and mods when a player violates protection at a position (eg, digs a node or punches a protected entity). * The registered functions can be called using - `minetest.record_protection_violation`. + `core.record_protection_violation`. * The provided function should check that the position is protected by the mod calling this function before it prints a message, if it does, to allow for multiple protection mods. -* `minetest.register_on_item_eat(function(hp_change, replace_with_item, itemstack, user, pointed_thing))` - * Called when an item is eaten, by `minetest.item_eat` +* `core.register_on_item_eat(function(hp_change, replace_with_item, itemstack, user, pointed_thing))` + * Called when an item is eaten, by `core.item_eat` * Return `itemstack` to cancel the default item eat response (i.e.: hp increase). -* `minetest.register_on_item_pickup(function(itemstack, picker, pointed_thing, time_from_last_punch, ...))` - * Called by `minetest.item_pickup` before an item is picked up. - * Function is added to `minetest.registered_on_item_pickups`. +* `core.register_on_item_pickup(function(itemstack, picker, pointed_thing, time_from_last_punch, ...))` + * Called by `core.item_pickup` before an item is picked up. + * Function is added to `core.registered_on_item_pickups`. * Oldest functions are called first. * Parameters are the same as in the `on_pickup` callback. * Return an itemstack to cancel the default item pick-up response (i.e.: adding the item into inventory). -* `minetest.register_on_priv_grant(function(name, granter, priv))` +* `core.register_on_priv_grant(function(name, granter, priv))` * Called when `granter` grants the priv `priv` to `name`. * Note that the callback will be called twice if it's done by a player, once with granter being the player name, and again with granter being nil. -* `minetest.register_on_priv_revoke(function(name, revoker, priv))` +* `core.register_on_priv_revoke(function(name, revoker, priv))` * Called when `revoker` revokes the priv `priv` from `name`. * Note that the callback will be called twice if it's done by a player, once with revoker being the player name, and again with revoker being nil. -* `minetest.register_can_bypass_userlimit(function(name, ip))` +* `core.register_can_bypass_userlimit(function(name, ip))` * Called when `name` user connects with `ip`. * Return `true` to by pass the player limit -* `minetest.register_on_modchannel_message(function(channel_name, sender, message))` +* `core.register_on_modchannel_message(function(channel_name, sender, message))` * Called when an incoming mod channel message is received * You should have joined some channels to receive events. * If message comes from a server mod, `sender` field is an empty string. -* `minetest.register_on_liquid_transformed(function(pos_list, node_list))` +* `core.register_on_liquid_transformed(function(pos_list, node_list))` * Called after liquid nodes (`liquidtype ~= "none"`) are modified by the engine's liquid transformation process. * `pos_list` is an array of all modified positions. * `node_list` is an array of the old node that was previously at the position with the corresponding index in pos_list. -* `minetest.register_on_mapblocks_changed(function(modified_blocks, modified_block_count))` +* `core.register_on_mapblocks_changed(function(modified_blocks, modified_block_count))` * Called soon after any nodes or node metadata have been modified. No modifications will be missed, but there may be false positives. * Will never be called more than once per server step. * `modified_blocks` is the set of modified mapblock position hashes. These - are in the same format as those produced by `minetest.hash_node_position`, - and can be converted to positions with `minetest.get_position_from_hash`. + are in the same format as those produced by `core.hash_node_position`, + and can be converted to positions with `core.get_position_from_hash`. The set is a table where the keys are hashes and the values are `true`. * `modified_block_count` is the number of entries in the set. * Note: callbacks must be registered at mod load time. @@ -6176,86 +6177,86 @@ Call these functions only at load time! Setting-related --------------- -* `minetest.settings`: Settings object containing all of the settings from the +* `core.settings`: Settings object containing all of the settings from the main config file (`minetest.conf`). See [`Settings`]. -* `minetest.setting_get_pos(name)`: Loads a setting from the main settings and +* `core.setting_get_pos(name)`: Loads a setting from the main settings and parses it as a position (in the format `(1,2,3)`). Returns a position or nil. Authentication -------------- -* `minetest.string_to_privs(str[, delim])`: +* `core.string_to_privs(str[, delim])`: * Converts string representation of privs into table form * `delim`: String separating the privs. Defaults to `","`. * Returns `{ priv1 = true, ... }` -* `minetest.privs_to_string(privs[, delim])`: +* `core.privs_to_string(privs[, delim])`: * Returns the string representation of `privs` * `delim`: String to delimit privs. Defaults to `","`. -* `minetest.get_player_privs(name) -> {priv1=true,...}` -* `minetest.check_player_privs(player_or_name, ...)`: +* `core.get_player_privs(name) -> {priv1=true,...}` +* `core.check_player_privs(player_or_name, ...)`: returns `bool, missing_privs` * A quickhand for checking privileges. * `player_or_name`: Either a Player object or the name of a player. * `...` is either a list of strings, e.g. `"priva", "privb"` or a table, e.g. `{ priva = true, privb = true }`. -* `minetest.check_password_entry(name, entry, password)` +* `core.check_password_entry(name, entry, password)` * Returns true if the "password entry" for a player with name matches given password, false otherwise. * The "password entry" is the password representation generated by the engine as returned as part of a `get_auth()` call on the auth handler. * Only use this function for making it possible to log in via password from external protocols such as IRC, other uses are frowned upon. -* `minetest.get_password_hash(name, raw_password)` - * Convert a name-password pair to a password hash that Minetest can use. +* `core.get_password_hash(name, raw_password)` + * Convert a name-password pair to a password hash that Luanti can use. * The returned value alone is not a good basis for password checks based on comparing the password hash in the database with the password hash from the function, with an externally provided password, as the hash in the db might use the new SRP verifier format. - * For this purpose, use `minetest.check_password_entry` instead. -* `minetest.get_player_ip(name)`: returns an IP address string for the player + * For this purpose, use `core.check_password_entry` instead. +* `core.get_player_ip(name)`: returns an IP address string for the player `name`. * The player needs to be online for this to be successful. -* `minetest.get_auth_handler()`: Return the currently active auth handler +* `core.get_auth_handler()`: Return the currently active auth handler * Must be called *after* load time, to ensure that any custom auth handler was already registered. * See the [Authentication handler definition] * Use this to e.g. get the authentication data for a player: - `local auth_data = minetest.get_auth_handler().get_auth(playername)` -* `minetest.notify_authentication_modified(name)` + `local auth_data = core.get_auth_handler().get_auth(playername)` +* `core.notify_authentication_modified(name)` * Must be called by the authentication handler for privilege changes. * `name`: string; if omitted, all auth data should be considered modified -* `minetest.set_player_password(name, password_hash)`: Set password hash of +* `core.set_player_password(name, password_hash)`: Set password hash of player `name`. -* `minetest.set_player_privs(name, privs)`: Set privileges of player `name`. +* `core.set_player_privs(name, privs)`: Set privileges of player `name`. * `privs` is a **set** of privileges: A table where the keys are names of privileges and the values are `true`. - * Example: `minetest.set_player_privs("singleplayer", {interact = true, fly = true})`. + * Example: `core.set_player_privs("singleplayer", {interact = true, fly = true})`. This **sets** the player privileges to `interact` and `fly`; `singleplayer` will only have these two privileges afterwards. -* `minetest.change_player_privs(name, changes)`: Helper to grant or revoke privileges. +* `core.change_player_privs(name, changes)`: Helper to grant or revoke privileges. * `changes`: Table of changes to make. A field `[privname] = true` grants a privilege, whereas `[privname] = false` revokes a privilege. - * Example: `minetest.change_player_privs("singleplayer", {interact = true, fly = false})` + * Example: `core.change_player_privs("singleplayer", {interact = true, fly = false})` will grant singleplayer the `interact` privilege and revoke singleplayer's `fly` privilege. All other privileges will remain unchanged. -* `minetest.auth_reload()` +* `core.auth_reload()` * See `reload()` in authentication handler definition -`minetest.set_player_password`, `minetest.set_player_privs`, -`minetest.get_player_privs` and `minetest.auth_reload` call the authentication +`core.set_player_password`, `core.set_player_privs`, +`core.get_player_privs` and `core.auth_reload` call the authentication handler. Chat ---- -* `minetest.chat_send_all(text)`: send chat message to all players -* `minetest.chat_send_player(name, text)`: send chat message to specific player +* `core.chat_send_all(text)`: send chat message to all players +* `core.chat_send_player(name, text)`: send chat message to specific player * `name`: Name of the player -* `minetest.format_chat_message(name, message)` +* `core.format_chat_message(name, message)` * Used by the server to format a chat message, based on the setting `chat_message_format`. Refer to the documentation of the setting for a list of valid placeholders. * Takes player name and message, and returns the formatted string to be sent to players. @@ -6265,38 +6266,38 @@ Chat Environment access ------------------ -* `minetest.set_node(pos, node)` +* `core.set_node(pos, node)` * Set node at position `pos`. * Any existing metadata is deleted. * `node`: table `{name=string, param1=number, param2=number}` If param1 or param2 is omitted, it's set to `0`. - * e.g. `minetest.set_node({x=0, y=10, z=0}, {name="default:wood"})` -* `minetest.add_node(pos, node)`: alias to `minetest.set_node` -* `minetest.bulk_set_node({pos1, pos2, pos3, ...}, node)` + * e.g. `core.set_node({x=0, y=10, z=0}, {name="default:wood"})` +* `core.add_node(pos, node)`: alias to `core.set_node` +* `core.bulk_set_node({pos1, pos2, pos3, ...}, node)` * Set the same node at all positions in the first argument. - * e.g. `minetest.bulk_set_node({{x=0, y=1, z=1}, {x=1, y=2, z=2}}, {name="default:stone"})` - * For node specification or position syntax see `minetest.set_node` call + * e.g. `core.bulk_set_node({{x=0, y=1, z=1}, {x=1, y=2, z=2}}, {name="default:stone"})` + * For node specification or position syntax see `core.set_node` call * Faster than set_node due to single call, but still considerably slower than Lua Voxel Manipulators (LVM) for large numbers of nodes. Unlike LVMs, this will call node callbacks. It also allows setting nodes in spread out positions which would cause LVMs to waste memory. For setting a cube, this is 1.3x faster than set_node whereas LVM is 20 times faster. -* `minetest.swap_node(pos, node)` +* `core.swap_node(pos, node)` * Swap node at position with another. * This keeps the metadata intact and will not run con-/destructor callbacks. -* `minetest.bulk_swap_node({pos1, pos2, pos3, ...}, node)` - * Equivalent to `minetest.swap_node` but in bulk. -* `minetest.remove_node(pos)`: Remove a node - * Equivalent to `minetest.set_node(pos, {name="air"})`, but a bit faster. -* `minetest.get_node(pos)` +* `core.bulk_swap_node({pos1, pos2, pos3, ...}, node)` + * Equivalent to `core.swap_node` but in bulk. +* `core.remove_node(pos)`: Remove a node + * Equivalent to `core.set_node(pos, {name="air"})`, but a bit faster. +* `core.get_node(pos)` * Returns the node at the given position as table in the same format as `set_node`. * This function never returns `nil` and instead returns `{name="ignore", param1=0, param2=0}` for unloaded areas. -* `minetest.get_node_or_nil(pos)` +* `core.get_node_or_nil(pos)` * Same as `get_node` but returns `nil` for unloaded areas. * Note that even loaded areas can contain "ignore" nodes. -* `minetest.get_node_light(pos[, timeofday])` +* `core.get_node_light(pos[, timeofday])` * Gets the light value at the given position. Note that the light value "inside" the node at the given position is returned, so you usually want to get the light value of a neighbor. @@ -6304,7 +6305,7 @@ Environment access * `timeofday`: `nil` for current time, `0` for night, `0.5` for day * Returns a number between `0` and `15` or `nil` * `nil` is returned e.g. when the map isn't loaded at `pos` -* `minetest.get_natural_light(pos[, timeofday])` +* `core.get_natural_light(pos[, timeofday])` * Figures out the sunlight (or moonlight) value at pos at the given time of day. * `pos`: The position of the node @@ -6312,78 +6313,78 @@ Environment access * Returns a number between `0` and `15` or `nil` * This function tests 203 nodes in the worst case, which happens very unlikely -* `minetest.get_artificial_light(param1)` +* `core.get_artificial_light(param1)` * Calculates the artificial light (light from e.g. torches) value from the `param1` value. * `param1`: The param1 value of a `paramtype = "light"` node. * Returns a number between `0` and `15` * Currently it's the same as `math.floor(param1 / 16)`, except that it ensures compatibility. -* `minetest.place_node(pos, node[, placer])` +* `core.place_node(pos, node[, placer])` * Place node with the same effects that a player would cause * `placer`: The ObjectRef that places the node (optional) -* `minetest.dig_node(pos[, digger])` +* `core.dig_node(pos[, digger])` * Dig node with the same effects that a player would cause * `digger`: The ObjectRef that digs the node (optional) * Returns `true` if successful, `false` on failure (e.g. protected location) -* `minetest.punch_node(pos[, puncher])` +* `core.punch_node(pos[, puncher])` * Punch node with the same effects that a player would cause * `puncher`: The ObjectRef that punches the node (optional) -* `minetest.spawn_falling_node(pos)` +* `core.spawn_falling_node(pos)` * Change node into falling node * Returns `true` and the ObjectRef of the spawned entity if successful, `false` on failure -* `minetest.find_nodes_with_meta(pos1, pos2)` +* `core.find_nodes_with_meta(pos1, pos2)` * Get a table of positions of nodes that have metadata within a region {pos1, pos2}. -* `minetest.get_meta(pos)` +* `core.get_meta(pos)` * Get a `NodeMetaRef` at that position -* `minetest.get_node_timer(pos)` +* `core.get_node_timer(pos)` * Get `NodeTimerRef` -* `minetest.add_entity(pos, name, [staticdata])`: Spawn Lua-defined entity at +* `core.add_entity(pos, name, [staticdata])`: Spawn Lua-defined entity at position. * Returns `ObjectRef`, or `nil` if failed * Entities with `static_save = true` can be added also to unloaded and non-generated blocks. -* `minetest.add_item(pos, item)`: Spawn item +* `core.add_item(pos, item)`: Spawn item * Returns `ObjectRef`, or `nil` if failed * Items can be added also to unloaded and non-generated blocks. -* `minetest.get_player_by_name(name)`: Get an `ObjectRef` to a player +* `core.get_player_by_name(name)`: Get an `ObjectRef` to a player * Returns nothing in case of error (player offline, doesn't exist, ...). -* `minetest.get_objects_inside_radius(center, radius)` +* `core.get_objects_inside_radius(center, radius)` * returns a list of ObjectRefs * `radius`: using a Euclidean metric * **Warning**: Any kind of interaction with the environment or other APIs can cause later objects in the list to become invalid while you're iterating it. (e.g. punching an entity removes its children) - It is recommended to use `minetest.objects_inside_radius` instead, which + It is recommended to use `core.objects_inside_radius` instead, which transparently takes care of this possibility. -* `minetest.objects_inside_radius(center, radius)` +* `core.objects_inside_radius(center, radius)` * returns an iterator of valid objects - * example: `for obj in minetest.objects_inside_radius(center, radius) do obj:punch(...) end` -* `minetest.get_objects_in_area(min_pos, max_pos)` + * example: `for obj in core.objects_inside_radius(center, radius) do obj:punch(...) end` +* `core.get_objects_in_area(min_pos, max_pos)` * returns a list of ObjectRefs * `min_pos` and `max_pos` are the min and max positions of the area to search - * **Warning**: The same warning as for `minetest.get_objects_inside_radius` applies. - Use `minetest.objects_in_area` instead to iterate only valid objects. -* `minetest.objects_in_area(min_pos, max_pos)` + * **Warning**: The same warning as for `core.get_objects_inside_radius` applies. + Use `core.objects_in_area` instead to iterate only valid objects. +* `core.objects_in_area(min_pos, max_pos)` * returns an iterator of valid objects -* `minetest.set_timeofday(val)`: set time of day +* `core.set_timeofday(val)`: set time of day * `val` is between `0` and `1`; `0` for midnight, `0.5` for midday -* `minetest.get_timeofday()`: get time of day -* `minetest.get_gametime()`: returns the time, in seconds, since the world was +* `core.get_timeofday()`: get time of day +* `core.get_gametime()`: returns the time, in seconds, since the world was created. The time is not available (`nil`) before the first server step. -* `minetest.get_day_count()`: returns number days elapsed since world was +* `core.get_day_count()`: returns number days elapsed since world was created. * Time changes are accounted for. -* `minetest.find_node_near(pos, radius, nodenames, [search_center])`: returns +* `core.find_node_near(pos, radius, nodenames, [search_center])`: returns pos or `nil`. * `radius`: using a maximum metric * `nodenames`: e.g. `{"ignore", "group:tree"}` or `"default:dirt"` * `search_center` is an optional boolean (default: `false`) If true `pos` is also checked for the nodes -* `minetest.find_nodes_in_area(pos1, pos2, nodenames, [grouped])` +* `core.find_nodes_in_area(pos1, pos2, nodenames, [grouped])` * `pos1` and `pos2` are the min and max positions of the area to search. * `nodenames`: e.g. `{"ignore", "group:tree"}` or `"default:dirt"` * If `grouped` is true the return value is a table indexed by node name @@ -6393,21 +6394,21 @@ Environment access second value: Table with the count of each node with the node name as index * Area volume is limited to 4,096,000 nodes -* `minetest.find_nodes_in_area_under_air(pos1, pos2, nodenames)`: returns a +* `core.find_nodes_in_area_under_air(pos1, pos2, nodenames)`: returns a list of positions. * `nodenames`: e.g. `{"ignore", "group:tree"}` or `"default:dirt"` * Return value: Table with all node positions with a node air above * Area volume is limited to 4,096,000 nodes -* `minetest.get_perlin(noiseparams)` +* `core.get_perlin(noiseparams)` * Return world-specific perlin noise. * The actual seed used is the noiseparams seed plus the world seed. -* `minetest.get_perlin(seeddiff, octaves, persistence, spread)` - * Deprecated: use `minetest.get_perlin(noiseparams)` instead. +* `core.get_perlin(seeddiff, octaves, persistence, spread)` + * Deprecated: use `core.get_perlin(noiseparams)` instead. * Return world-specific perlin noise. -* `minetest.get_voxel_manip([pos1, pos2])` +* `core.get_voxel_manip([pos1, pos2])` * Return voxel manipulator object. * Loads the manipulator from the map if positions are passed. -* `minetest.set_gen_notify(flags, [deco_ids], [custom_ids])` +* `core.set_gen_notify(flags, [deco_ids], [custom_ids])` * Set the types of on-generate notifications that should be collected. * `flags`: flag field, see [`gennotify`] for available generation notification types. * The following parameters are optional: @@ -6416,41 +6417,41 @@ Environment access * `custom_ids` is a list of user-defined IDs (strings) which are requested. By convention these should be the mod name with an optional colon and specifier added, e.g. `"default"` or `"default:dungeon_loot"` -* `minetest.get_gen_notify()` +* `core.get_gen_notify()` * Returns a flagstring, a table with the `deco_id`s and a table with user-defined IDs. -* `minetest.get_decoration_id(decoration_name)` +* `core.get_decoration_id(decoration_name)` * Returns the decoration ID number for the provided decoration name string, or `nil` on failure. -* `minetest.get_mapgen_object(objectname)` +* `core.get_mapgen_object(objectname)` * Return requested mapgen object if available (see [Mapgen objects]) -* `minetest.get_heat(pos)` +* `core.get_heat(pos)` * Returns the heat at the position, or `nil` on failure. -* `minetest.get_humidity(pos)` +* `core.get_humidity(pos)` * Returns the humidity at the position, or `nil` on failure. -* `minetest.get_biome_data(pos)` +* `core.get_biome_data(pos)` * Returns a table containing: * `biome` the biome id of the biome at that position * `heat` the heat at the position * `humidity` the humidity at the position * Or returns `nil` on failure. -* `minetest.get_biome_id(biome_name)` +* `core.get_biome_id(biome_name)` * Returns the biome id, as used in the biomemap Mapgen object and returned - by `minetest.get_biome_data(pos)`, for a given biome_name string. -* `minetest.get_biome_name(biome_id)` + by `core.get_biome_data(pos)`, for a given biome_name string. +* `core.get_biome_name(biome_id)` * Returns the biome name string for the provided biome id, or `nil` on failure. * If no biomes have been registered, such as in mgv6, returns `default`. -* `minetest.get_mapgen_params()` - * Deprecated: use `minetest.get_mapgen_setting(name)` instead. +* `core.get_mapgen_params()` + * Deprecated: use `core.get_mapgen_setting(name)` instead. * Returns a table containing: * `mgname` * `seed` * `chunksize` * `water_level` * `flags` -* `minetest.set_mapgen_params(MapgenParams)` - * Deprecated: use `minetest.set_mapgen_setting(name, value, override)` +* `core.set_mapgen_params(MapgenParams)` + * Deprecated: use `core.set_mapgen_setting(name, value, override)` instead. * Set map generation parameters. * Function cannot be called after the registration period. @@ -6465,14 +6466,14 @@ Environment access prefix `"no"` is attached, clears instead. * `flags` is in the same format and has the same options as `mg_flags` in `minetest.conf`. -* `minetest.get_mapgen_edges([mapgen_limit[, chunksize]])` +* `core.get_mapgen_edges([mapgen_limit[, chunksize]])` * Returns the minimum and maximum possible generated node positions in that order. * `mapgen_limit` is an optional number. If it is absent, its value is that of the *active* mapgen setting `"mapgen_limit"`. * `chunksize` is an optional number. If it is absent, its value is that of the *active* mapgen setting `"chunksize"`. -* `minetest.get_mapgen_setting(name)` +* `core.get_mapgen_setting(name)` * Gets the *active* mapgen setting (or nil if none exists) in string format with the following order of precedence: 1) Settings loaded from map_meta.txt or overrides set during mod @@ -6480,35 +6481,35 @@ Environment access 2) Settings set by mods without a metafile override 3) Settings explicitly set in the user config file, minetest.conf 4) Settings set as the user config default -* `minetest.get_mapgen_setting_noiseparams(name)` +* `core.get_mapgen_setting_noiseparams(name)` * Same as above, but returns the value as a NoiseParams table if the setting `name` exists and is a valid NoiseParams. -* `minetest.set_mapgen_setting(name, value, [override_meta])` +* `core.set_mapgen_setting(name, value, [override_meta])` * Sets a mapgen param to `value`, and will take effect if the corresponding mapgen setting is not already present in map_meta.txt. * `override_meta` is an optional boolean (default: `false`). If this is set to true, the setting will become the active setting regardless of the map metafile contents. * Note: to set the seed, use `"seed"`, not `"fixed_map_seed"`. -* `minetest.set_mapgen_setting_noiseparams(name, value, [override_meta])` +* `core.set_mapgen_setting_noiseparams(name, value, [override_meta])` * Same as above, except value is a NoiseParams table. -* `minetest.set_noiseparams(name, noiseparams, set_default)` +* `core.set_noiseparams(name, noiseparams, set_default)` * Sets the noiseparams setting of `name` to the noiseparams table specified in `noiseparams`. * `set_default` is an optional boolean (default: `true`) that specifies whether the setting should be applied to the default config or current active config. -* `minetest.get_noiseparams(name)` +* `core.get_noiseparams(name)` * Returns a table of the noiseparams for name. -* `minetest.generate_ores(vm, pos1, pos2)` +* `core.generate_ores(vm, pos1, pos2)` * Generate all registered ores within the VoxelManip `vm` and in the area from `pos1` to `pos2`. * `pos1` and `pos2` are optional and default to mapchunk minp and maxp. -* `minetest.generate_decorations(vm, pos1, pos2)` +* `core.generate_decorations(vm, pos1, pos2)` * Generate all registered decorations within the VoxelManip `vm` and in the area from `pos1` to `pos2`. * `pos1` and `pos2` are optional and default to mapchunk minp and maxp. -* `minetest.clear_objects([options])` +* `core.clear_objects([options])` * Clear all objects in the environment * Takes an optional table as an argument with the field `mode`. * mode = `"full"`: Load and go through every mapblock, clearing @@ -6516,11 +6517,11 @@ Environment access * mode = `"quick"`: Clear objects immediately in loaded mapblocks, clear objects in unloaded mapblocks only when the mapblocks are next activated. -* `minetest.load_area(pos1[, pos2])` +* `core.load_area(pos1[, pos2])` * Load the mapblocks containing the area from `pos1` to `pos2`. `pos2` defaults to `pos1` if not specified. * This function does not trigger map generation. -* `minetest.emerge_area(pos1, pos2, [callback], [param])` +* `core.emerge_area(pos1, pos2, [callback], [param])` * Queue all blocks in the area from `pos1` to `pos2`, inclusive, to be asynchronously fetched from memory, loaded from disk, or if inexistent, generates them. @@ -6531,24 +6532,24 @@ Environment access * `blockpos` is the *block* coordinates of the block that had been emerged. * `action` could be one of the following constant values: - * `minetest.EMERGE_CANCELLED` - * `minetest.EMERGE_ERRORED` - * `minetest.EMERGE_FROM_MEMORY` - * `minetest.EMERGE_FROM_DISK` - * `minetest.EMERGE_GENERATED` + * `core.EMERGE_CANCELLED` + * `core.EMERGE_ERRORED` + * `core.EMERGE_FROM_MEMORY` + * `core.EMERGE_FROM_DISK` + * `core.EMERGE_GENERATED` * `calls_remaining` is the number of callbacks to be expected after this one. * `param` is the user-defined parameter passed to emerge_area (or nil if the parameter was absent). -* `minetest.delete_area(pos1, pos2)` +* `core.delete_area(pos1, pos2)` * delete all mapblocks in the area from pos1 to pos2, inclusive -* `minetest.line_of_sight(pos1, pos2)`: returns `boolean, pos` +* `core.line_of_sight(pos1, pos2)`: returns `boolean, pos` * Checks if there is anything other than air between pos1 and pos2. * Returns false if something is blocking the sight. * Returns the position of the blocking node when `false` * `pos1`: First position * `pos2`: Second position -* `minetest.raycast(pos1, pos2, objects, liquids, pointabilities)`: returns `Raycast` +* `core.raycast(pos1, pos2, objects, liquids, pointabilities)`: returns `Raycast` * Creates a `Raycast` object. * `pos1`: start of the ray * `pos2`: end of the ray @@ -6558,7 +6559,7 @@ Environment access * `pointabilities`: Allows overriding the `pointable` property of nodes and objects. Uses the same format as the `pointabilities` property of item definitions. Default is `nil`. -* `minetest.find_path(pos1,pos2,searchdistance,max_jump,max_drop,algorithm)` +* `core.find_path(pos1,pos2,searchdistance,max_jump,max_drop,algorithm)` * returns table containing path that can be walked on * returns a table of 3D points representing a path from `pos1` to `pos2` or `nil` on failure. @@ -6578,22 +6579,22 @@ Environment access Difference between `"A*"` and `"A*_noprefetch"` is that `"A*"` will pre-calculate the cost-data, the other will calculate it on-the-fly -* `minetest.spawn_tree (pos, {treedef})` +* `core.spawn_tree (pos, {treedef})` * spawns L-system tree at given `pos` with definition in `treedef` table -* `minetest.transforming_liquid_add(pos)` +* `core.transforming_liquid_add(pos)` * add node to liquid flow update queue -* `minetest.get_node_max_level(pos)` +* `core.get_node_max_level(pos)` * get max available level for leveled node -* `minetest.get_node_level(pos)` +* `core.get_node_level(pos)` * get level of leveled node (water, snow) -* `minetest.set_node_level(pos, level)` +* `core.set_node_level(pos, level)` * set level of leveled node, default `level` equals `1` * if `totallevel > maxlevel`, returns rest (`total-max`). -* `minetest.add_node_level(pos, level)` +* `core.add_node_level(pos, level)` * increase level of leveled node by level, default `level` equals `1` * if `totallevel > maxlevel`, returns rest (`total-max`) * `level` must be between -127 and 127 -* `minetest.get_node_boxes(box_type, pos, [node])` +* `core.get_node_boxes(box_type, pos, [node])` * `box_type` must be `"node_box"`, `"collision_box"` or `"selection_box"`. * `pos` must be a node position. * `node` can be a table in the form `{name=string, param1=number, param2=number}`. @@ -6604,7 +6605,7 @@ Environment access `{{x1, y1, z1, x2, y2, z2}, {x1, y1, z1, x2, y2, z2}, ...}`. Coordinates are relative to `pos`. * See also: [Node boxes](#node-boxes) -* `minetest.fix_light(pos1, pos2)`: returns `true`/`false` +* `core.fix_light(pos1, pos2)`: returns `true`/`false` * resets the light in a cuboid-shaped part of the map and removes lighting bugs. * Loads the area if it is not loaded. @@ -6620,16 +6621,16 @@ Environment access might be removed. * returns `false` if the area is not fully generated, `true` otherwise -* `minetest.check_single_for_falling(pos)` +* `core.check_single_for_falling(pos)` * causes an unsupported `group:falling_node` node to fall and causes an unattached `group:attached_node` node to fall. * does not spread these updates to neighbors. -* `minetest.check_for_falling(pos)` +* `core.check_for_falling(pos)` * causes an unsupported `group:falling_node` node to fall and causes an unattached `group:attached_node` node to fall. * spread these updates to neighbors and can cause a cascade of nodes to fall. -* `minetest.get_spawn_level(x, z)` +* `core.get_spawn_level(x, z)` * Returns a player spawn y coordinate for the provided (x, z) coordinates, or `nil` for an unsuitable spawn point. * For most mapgens a 'suitable spawn point' is one with y between @@ -6644,21 +6645,21 @@ Mod channels You can find mod channels communication scheme in `doc/mod_channels.png`. -* `minetest.mod_channel_join(channel_name)` +* `core.mod_channel_join(channel_name)` * Server joins channel `channel_name`, and creates it if necessary. You should listen for incoming messages with - `minetest.register_on_modchannel_message` + `core.register_on_modchannel_message` Inventory --------- -`minetest.get_inventory(location)`: returns an `InvRef` +`core.get_inventory(location)`: returns an `InvRef` * `location` = e.g. * `{type="player", name="celeron55"}` * `{type="node", pos={x=, y=, z=}}` * `{type="detached", name="creative"}` -* `minetest.create_detached_inventory(name, callbacks, [player_name])`: returns +* `core.create_detached_inventory(name, callbacks, [player_name])`: returns an `InvRef`. * `callbacks`: See [Detached inventory callbacks] * `player_name`: Make detached inventory available to one player @@ -6667,111 +6668,111 @@ Inventory Note that this parameter is mostly just a workaround and will be removed in future releases. * Creates a detached inventory. If it already exists, it is cleared. -* `minetest.remove_detached_inventory(name)` +* `core.remove_detached_inventory(name)` * Returns a `boolean` indicating whether the removal succeeded. -* `minetest.do_item_eat(hp_change, replace_with_item, itemstack, user, pointed_thing)`: +* `core.do_item_eat(hp_change, replace_with_item, itemstack, user, pointed_thing)`: returns leftover ItemStack or nil to indicate no inventory change - * See `minetest.item_eat` and `minetest.register_on_item_eat` + * See `core.item_eat` and `core.register_on_item_eat` Formspec -------- -* `minetest.show_formspec(playername, formname, formspec)` +* `core.show_formspec(playername, formname, formspec)` * `playername`: name of player to show formspec * `formname`: name passed to `on_player_receive_fields` callbacks. It should follow the `"modname:"` naming convention. * `formname` must not be empty, unless you want to reshow the inventory formspec without updating it for future opens. * `formspec`: formspec to display -* `minetest.close_formspec(playername, formname)` +* `core.close_formspec(playername, formname)` * `playername`: name of player to close formspec * `formname`: has to exactly match the one given in `show_formspec`, or the formspec will not close. * calling `show_formspec(playername, formname, "")` is equal to this expression. * to close a formspec regardless of the formname, call - `minetest.close_formspec(playername, "")`. + `core.close_formspec(playername, "")`. **USE THIS ONLY WHEN ABSOLUTELY NECESSARY!** -* `minetest.formspec_escape(string)`: returns a string +* `core.formspec_escape(string)`: returns a string * escapes the characters "[", "]", "\", "," and ";", which cannot be used in formspecs. -* `minetest.hypertext_escape(string)`: returns a string +* `core.hypertext_escape(string)`: returns a string * escapes the characters "\", "<", and ">" to show text in a hypertext element. * not safe for use with tag attributes. -* `minetest.explode_table_event(string)`: returns a table +* `core.explode_table_event(string)`: returns a table * returns e.g. `{type="CHG", row=1, column=2}` * `type` is one of: * `"INV"`: no row selected * `"CHG"`: selected * `"DCL"`: double-click -* `minetest.explode_textlist_event(string)`: returns a table +* `core.explode_textlist_event(string)`: returns a table * returns e.g. `{type="CHG", index=1}` * `type` is one of: * `"INV"`: no row selected * `"CHG"`: selected * `"DCL"`: double-click -* `minetest.explode_scrollbar_event(string)`: returns a table +* `core.explode_scrollbar_event(string)`: returns a table * returns e.g. `{type="CHG", value=500}` * `type` is one of: * `"INV"`: something failed * `"CHG"`: has been changed * `"VAL"`: not changed -* `minetest.show_death_screen(player, reason)` +* `core.show_death_screen(player, reason)` * Called when the death screen should be shown. * `player` is an ObjectRef, `reason` is a PlayerHPChangeReason table or nil. * By default, this shows a simple formspec with the option to respawn. Respawning is done via `ObjectRef:respawn`. * You can override this to show a custom death screen. - * For general death handling, use `minetest.register_on_dieplayer` instead. + * For general death handling, use `core.register_on_dieplayer` instead. Item handling ------------- -* `minetest.inventorycube(img1, img2, img3)` +* `core.inventorycube(img1, img2, img3)` * Returns a string for making an image of a cube (useful as an item image) -* `minetest.get_pointed_thing_position(pointed_thing, above)` +* `core.get_pointed_thing_position(pointed_thing, above)` * Returns the position of a `pointed_thing` or `nil` if the `pointed_thing` does not refer to a node or entity. * If the optional `above` parameter is true and the `pointed_thing` refers to a node, then it will return the `above` position of the `pointed_thing`. -* `minetest.dir_to_facedir(dir, is6d)` +* `core.dir_to_facedir(dir, is6d)` * Convert a vector to a facedir value, used in `param2` for `paramtype2="facedir"`. * passing something non-`nil`/`false` for the optional second parameter causes it to take the y component into account. -* `minetest.facedir_to_dir(facedir)` +* `core.facedir_to_dir(facedir)` * Convert a facedir back into a vector aimed directly out the "back" of a node. -* `minetest.dir_to_fourdir(dir)` +* `core.dir_to_fourdir(dir)` * Convert a vector to a 4dir value, used in `param2` for `paramtype2="4dir"`. -* `minetest.fourdir_to_dir(fourdir)` +* `core.fourdir_to_dir(fourdir)` * Convert a 4dir back into a vector aimed directly out the "back" of a node. -* `minetest.dir_to_wallmounted(dir)` +* `core.dir_to_wallmounted(dir)` * Convert a vector to a wallmounted value, used for `paramtype2="wallmounted"`. -* `minetest.wallmounted_to_dir(wallmounted)` +* `core.wallmounted_to_dir(wallmounted)` * Convert a wallmounted value back into a vector aimed directly out the "back" of a node. -* `minetest.dir_to_yaw(dir)` +* `core.dir_to_yaw(dir)` * Convert a vector into a yaw (angle) -* `minetest.yaw_to_dir(yaw)` +* `core.yaw_to_dir(yaw)` * Convert yaw (angle) to a vector -* `minetest.is_colored_paramtype(ptype)` +* `core.is_colored_paramtype(ptype)` * Returns a boolean. Returns `true` if the given `paramtype2` contains color information (`color`, `colorwallmounted`, `colorfacedir`, etc.). -* `minetest.strip_param2_color(param2, paramtype2)` +* `core.strip_param2_color(param2, paramtype2)` * Removes everything but the color information from the given `param2` value. * Returns `nil` if the given `paramtype2` does not contain color information. -* `minetest.get_node_drops(node, toolname)` +* `core.get_node_drops(node, toolname)` * Returns list of itemstrings that are dropped by `node` when dug with the item `toolname` (not limited to tools). * `node`: node as table or node name * `toolname`: name of the item used to dig (can be `nil`) -* `minetest.get_craft_result(input)`: returns `output, decremented_input` +* `core.get_craft_result(input)`: returns `output, decremented_input` * `input.method` = `"normal"` or `"cooking"` or `"fuel"` * `input.width` = for example `3` * `input.items` = for example @@ -6782,7 +6783,7 @@ Item handling placed in `decremented_input.items`. Replacements can be placed in `decremented_input` if the stack of the replaced item has a count of 1. * `decremented_input` = like `input` -* `minetest.get_craft_recipe(output)`: returns input +* `core.get_craft_recipe(output)`: returns input * returns last registered recipe for output item (node) * `output` is a node or item type such as `"default:torch"` * `input.method` = `"normal"` or `"cooking"` or `"fuel"` @@ -6790,7 +6791,7 @@ Item handling * `input.items` = for example `{stack1, stack2, stack3, stack4, stack 5, stack 6, stack 7, stack 8, stack 9}` * `input.items` = `nil` if no recipe found -* `minetest.get_all_craft_recipes(query item)`: returns a table or `nil` +* `core.get_all_craft_recipes(query item)`: returns a table or `nil` * returns indexed table with all registered recipes for query item (node) or `nil` if no recipe was found. * recipe entry table: @@ -6812,13 +6813,13 @@ Item handling } ``` -* `minetest.handle_node_drops(pos, drops, digger)` +* `core.handle_node_drops(pos, drops, digger)` * `drops`: list of itemstrings * Handles drops from nodes after digging: Default action is to put them into digger's inventory. * Can be overridden to get different functionality (e.g. dropping items on ground) -* `minetest.itemstring_with_palette(item, palette_index)`: returns an item +* `core.itemstring_with_palette(item, palette_index)`: returns an item string. * Creates an item string which contains palette index information for hardware colorization. You can use the returned string @@ -6826,7 +6827,7 @@ Item handling * `item`: the item stack which becomes colored. Can be in string, table and native form. * `palette_index`: this index is added to the item stack -* `minetest.itemstring_with_color(item, colorstring)`: returns an item string +* `core.itemstring_with_color(item, colorstring)`: returns an item string * Creates an item string which contains static color information for hardware colorization. Use this method if you wish to colorize an item that does not own a palette. You can use the returned string @@ -6838,11 +6839,11 @@ Item handling Rollback -------- -* `minetest.rollback_get_node_actions(pos, range, seconds, limit)`: +* `core.rollback_get_node_actions(pos, range, seconds, limit)`: returns `{{actor, pos, time, oldnode, newnode}, ...}` * Find who has done something to a node, or near a node * `actor`: `"player:"`, also `"liquid"`. -* `minetest.rollback_revert_actions_by(actor, seconds)`: returns +* `core.rollback_revert_actions_by(actor, seconds)`: returns `boolean, log_messages`. * Revert latest actions of someone * `actor`: `"player:"`, also `"liquid"`. @@ -6850,35 +6851,35 @@ Rollback Defaults for the `on_place` and `on_drop` item definition functions ------------------------------------------------------------------- -* `minetest.item_place_node(itemstack, placer, pointed_thing[, param2, prevent_after_place])` +* `core.item_place_node(itemstack, placer, pointed_thing[, param2, prevent_after_place])` * Place item as a node * `param2` overrides `facedir` and wallmounted `param2` * `prevent_after_place`: if set to `true`, `after_place_node` is not called for the newly placed node to prevent a callback and placement loop * returns `itemstack, position` * `position`: the location the node was placed to. `nil` if nothing was placed. -* `minetest.item_place_object(itemstack, placer, pointed_thing)` +* `core.item_place_object(itemstack, placer, pointed_thing)` * Place item as-is * returns the leftover itemstack * **Note**: This function is deprecated and will never be called. -* `minetest.item_place(itemstack, placer, pointed_thing[, param2])` - * Wrapper that calls `minetest.item_place_node` if appropriate +* `core.item_place(itemstack, placer, pointed_thing[, param2])` + * Wrapper that calls `core.item_place_node` if appropriate * Calls `on_rightclick` of `pointed_thing.under` if defined instead * **Note**: is not called when wielded item overrides `on_place` * `param2` overrides facedir and wallmounted `param2` * returns `itemstack, position` * `position`: the location the node was placed to. `nil` if nothing was placed. -* `minetest.item_pickup(itemstack, picker, pointed_thing, time_from_last_punch, ...)` - * Runs callbacks registered by `minetest.register_on_item_pickup` and adds +* `core.item_pickup(itemstack, picker, pointed_thing, time_from_last_punch, ...)` + * Runs callbacks registered by `core.register_on_item_pickup` and adds the item to the picker's `"main"` inventory list. * Parameters are the same as in `on_pickup`. * Returns the leftover itemstack. -* `minetest.item_drop(itemstack, dropper, pos)` +* `core.item_drop(itemstack, dropper, pos)` * Drop the item * returns the leftover itemstack -* `minetest.item_eat(hp_change[, replace_with_item])` +* `core.item_eat(hp_change[, replace_with_item])` * Returns `function(itemstack, user, pointed_thing)` as a - function wrapper for `minetest.do_item_eat`. + function wrapper for `core.do_item_eat`. * `replace_with_item` is the itemstring which is added to the inventory. If the player is eating a stack and `replace_with_item` doesn't fit onto the eaten stack, then the remainings go to a different spot, or are dropped. @@ -6886,26 +6887,26 @@ Defaults for the `on_place` and `on_drop` item definition functions Defaults for the `on_punch` and `on_dig` node definition callbacks ------------------------------------------------------------------ -* `minetest.node_punch(pos, node, puncher, pointed_thing)` - * Calls functions registered by `minetest.register_on_punchnode()` -* `minetest.node_dig(pos, node, digger)` +* `core.node_punch(pos, node, puncher, pointed_thing)` + * Calls functions registered by `core.register_on_punchnode()` +* `core.node_dig(pos, node, digger)` * Checks if node can be dug, puts item into inventory, removes node - * Calls functions registered by `minetest.registered_on_dignodes()` + * Calls functions registered by `core.registered_on_dignodes()` Sounds ------ -* `minetest.sound_play(spec, parameters, [ephemeral])`: returns a handle +* `core.sound_play(spec, parameters, [ephemeral])`: returns a handle * `spec` is a `SimpleSoundSpec` * `parameters` is a sound parameter table * `ephemeral` is a boolean (default: false) Ephemeral sounds will not return a handle and can't be stopped or faded. It is recommend to use this for short sounds that happen in response to player actions (e.g. door closing). -* `minetest.sound_stop(handle)` - * `handle` is a handle returned by `minetest.sound_play` -* `minetest.sound_fade(handle, step, gain)` - * `handle` is a handle returned by `minetest.sound_play` +* `core.sound_stop(handle)` + * `handle` is a handle returned by `core.sound_play` +* `core.sound_fade(handle, step, gain)` + * `handle` is a handle returned by `core.sound_play` * `step` determines how fast a sound will fade. The gain will change by this much per second, until it reaches the target gain. @@ -6917,7 +6918,7 @@ Sounds Timing ------ -* `minetest.after(time, func, ...)`: returns job table to use as below. +* `core.after(time, func, ...)`: returns job table to use as below. * Call the function `func` after `time` seconds, may be fractional * Optional: Variable number of arguments that are passed to `func` * Jobs set for earlier times are executed earlier. If multiple jobs expire @@ -6937,13 +6938,13 @@ value of the job function once it is finished. The async environment does *not* have access to the map, entities, players or any globals defined in the 'usual' environment. Consequently, functions like -`minetest.get_node()` or `minetest.get_player_by_name()` simply do not exist in it. +`core.get_node()` or `core.get_player_by_name()` simply do not exist in it. Arguments and return values passed through this can contain certain userdata objects that will be seamlessly copied (not shared) to the async environment. This allows you easy interoperability for delegating work to jobs. -* `minetest.handle_async(func, callback, ...)`: +* `core.handle_async(func, callback, ...)`: * Queue the function `func` to be ran in an async environment. Note that there are multiple persistent workers and any of them may end up running a given job. The engine will scale the amount of @@ -6951,10 +6952,10 @@ This allows you easy interoperability for delegating work to jobs. * When `func` returns the callback is called (in the normal environment) with all of the return values as arguments. * Optional: Variable number of arguments that are passed to `func` -* `minetest.register_async_dofile(path)`: +* `core.register_async_dofile(path)`: * Register a path to a Lua file to be imported when an async environment is initialized. You can use this to preload code which you can then call - later using `minetest.handle_async()`. + later using `core.handle_async()`. ### List of APIs available in an async environment @@ -6984,13 +6985,13 @@ Functions: * Standalone helpers such as logging, filesystem, encoding, hashing or compression APIs -* `minetest.register_portable_metatable` +* `core.register_portable_metatable` * IPC Variables: -* `minetest.settings` -* `minetest.registered_items`, `registered_nodes`, `registered_tools`, +* `core.settings` +* `core.registered_items`, `registered_nodes`, `registered_tools`, `registered_craftitems` and `registered_aliases` * with all functions and userdata values replaced by `true`, calling any callbacks here is obviously not possible @@ -7011,13 +7012,13 @@ registered scripts (not all mods!) - see below - are run during initialization o the mapgen environment. After that only callbacks happen. The mapgen env does not have a global step or timer. -* `minetest.register_mapgen_script(path)`: +* `core.register_mapgen_script(path)`: * Register a path to a Lua file to be imported when a mapgen environment is initialized. Run in order of registration. ### List of APIs exclusive to the mapgen env -* `minetest.register_on_generated(function(vmanip, minp, maxp, blockseed))` +* `core.register_on_generated(function(vmanip, minp, maxp, blockseed))` * Called after the engine mapgen finishes a chunk but before it is written to the map. * Chunk data resides in `vmanip`. Other parts of the map are not accessible. @@ -7026,7 +7027,7 @@ does not have a global step or timer. Note: calling `read_from_map()` or `write_to_map()` on the VoxelManipulator object is not necessary and is disallowed. * `blockseed`: 64-bit seed number used for this chunk -* `minetest.save_gen_notify(id, data)` +* `core.save_gen_notify(id, data)` * Saves data for retrieval using the gennotify mechanism (see [Mapgen objects]). * Data is bound to the chunk that is currently being processed, so this function only makes sense inside the `on_generated` callback. @@ -7034,7 +7035,7 @@ does not have a global step or timer. By convention these should be the mod name with an optional colon and specifier added, e.g. `"default"` or `"default:dungeon_loot"` * `data`: any Lua object (will be serialized, no userdata allowed) - * returns `true` if the data was remembered. That is if `minetest.set_gen_notify` + * returns `true` if the data was remembered. That is if `core.set_gen_notify` was called with the same user-defined ID before. ### List of APIs available in the mapgen env @@ -7057,22 +7058,22 @@ Functions: * Standalone helpers such as logging, filesystem, encoding, hashing or compression APIs -* `minetest.get_biome_id`, `get_biome_name`, `get_heat`, `get_humidity`, +* `core.get_biome_id`, `get_biome_name`, `get_heat`, `get_humidity`, `get_biome_data`, `get_mapgen_object`, `get_mapgen_params`, `get_mapgen_edges`, `get_mapgen_setting`, `get_noiseparams`, `get_decoration_id` and more -* `minetest.get_node`, `set_node`, `find_node_near`, `find_nodes_in_area`, +* `core.get_node`, `set_node`, `find_node_near`, `find_nodes_in_area`, `spawn_tree` and similar * these only operate on the current chunk (if inside a callback) * IPC Variables: -* `minetest.settings` -* `minetest.registered_items`, `registered_nodes`, `registered_tools`, +* `core.settings` +* `core.registered_items`, `registered_nodes`, `registered_tools`, `registered_craftitems` and `registered_aliases` * with all functions and userdata values replaced by `true`, calling any callbacks here is obviously not possible -* `minetest.registered_biomes`, `registered_ores`, `registered_decorations` +* `core.registered_biomes`, `registered_ores`, `registered_decorations` Note that node metadata does not exist in the mapgen env, we suggest deferring setting any metadata you need to the `on_generated` callback in the regular env. @@ -7081,32 +7082,32 @@ You can use the gennotify mechanism to transfer this information. Server ------ -* `minetest.request_shutdown([message],[reconnect],[delay])`: request for +* `core.request_shutdown([message],[reconnect],[delay])`: request for server shutdown. Will display `message` to clients. * `reconnect` == true displays a reconnect button * `delay` adds an optional delay (in seconds) before shutdown. Negative delay cancels the current active shutdown. Zero delay triggers an immediate shutdown. -* `minetest.cancel_shutdown_requests()`: cancel current delayed shutdown -* `minetest.get_server_status(name, joined)` +* `core.cancel_shutdown_requests()`: cancel current delayed shutdown +* `core.get_server_status(name, joined)` * Returns the server status string when a player joins or when the command `/status` is called. Returns `nil` or an empty string when the message is disabled. * `joined`: Boolean value, indicates whether the function was called when a player joined. * This function may be overwritten by mods to customize the status message. -* `minetest.get_server_uptime()`: returns the server uptime in seconds -* `minetest.get_server_max_lag()`: returns the current maximum lag +* `core.get_server_uptime()`: returns the server uptime in seconds +* `core.get_server_max_lag()`: returns the current maximum lag of the server in seconds or nil if server is not fully loaded yet -* `minetest.remove_player(name)`: remove player from database (if they are not +* `core.remove_player(name)`: remove player from database (if they are not connected). - * As auth data is not removed, minetest.player_exists will continue to + * As auth data is not removed, `core.player_exists` will continue to return true. Call the below method as well if you want to remove auth data too. * Returns a code (0: successful, 1: no such player, 2: player is connected) -* `minetest.remove_player_auth(name)`: remove player authentication data +* `core.remove_player_auth(name)`: remove player authentication data * Returns boolean indicating success (false if player nonexistent) -* `minetest.dynamic_add_media(options, callback)` +* `core.dynamic_add_media(options, callback)` * `options`: table containing the following parameters * `filename`: name the media file will be usable as (optional if `filepath` present) @@ -7148,11 +7149,11 @@ The engine provides a generalized mechanism to enable sharing data between the different Lua environments (main, mapgen and async). It is essentially a shared in-memory key-value store. -* `minetest.ipc_get(key)`: +* `core.ipc_get(key)`: * Read a value from the shared data area. * `key`: string, should use the `"modname:thing"` convention to avoid conflicts. * returns an arbitrary Lua value, or `nil` if this key does not exist -* `minetest.ipc_set(key, value)`: +* `core.ipc_set(key, value)`: * Write a value to the shared data area. * `key`: as above * `value`: an arbitrary Lua value, cannot be or contain userdata. @@ -7161,14 +7162,14 @@ Interacting with the shared data will perform an operation comparable to (de)serialization on each access. For that reason modifying references will not have any effect, as in this example: ```lua -minetest.ipc_set("test:foo", {}) -minetest.ipc_get("test:foo").subkey = "value" -- WRONG! -minetest.ipc_get("test:foo") -- returns an empty table +core.ipc_set("test:foo", {}) +core.ipc_get("test:foo").subkey = "value" -- WRONG! +core.ipc_get("test:foo") -- returns an empty table ``` **Advanced**: -* `minetest.ipc_cas(key, old_value, new_value)`: +* `core.ipc_cas(key, old_value, new_value)`: * Write a value to the shared data area, but only if the previous value equals what was given. This operation is called Compare-and-Swap and can be used to implement @@ -7177,7 +7178,7 @@ minetest.ipc_get("test:foo") -- returns an empty table * `old_value`: value compared to using `==` (`nil` compares equal for non-existing keys) * `new_value`: value that will be set * returns: true on success, false otherwise -* `minetest.ipc_poll(key, timeout)`: +* `core.ipc_poll(key, timeout)`: * Do a blocking wait until a value (other than `nil`) is present at the key. * **IMPORTANT**: You usually don't need this function. Use this as a last resort if nothing else can satisfy your use case! None of the Lua environments the @@ -7190,18 +7191,18 @@ minetest.ipc_get("test:foo") -- returns an empty table Bans ---- -* `minetest.get_ban_list()`: returns a list of all bans formatted as string -* `minetest.get_ban_description(ip_or_name)`: returns list of bans matching +* `core.get_ban_list()`: returns a list of all bans formatted as string +* `core.get_ban_description(ip_or_name)`: returns list of bans matching IP address or name formatted as string -* `minetest.ban_player(name)`: ban the IP of a currently connected player +* `core.ban_player(name)`: ban the IP of a currently connected player * Returns boolean indicating success -* `minetest.unban_player_or_ip(ip_or_name)`: remove ban record matching +* `core.unban_player_or_ip(ip_or_name)`: remove ban record matching IP address or name -* `minetest.kick_player(name[, reason[, reconnect]])`: disconnect a player with an optional +* `core.kick_player(name[, reason[, reconnect]])`: disconnect a player with an optional reason. * Returns boolean indicating success (false if player nonexistent) * If `reconnect` is true, allow the user to reconnect. -* `minetest.disconnect_player(name[, reason[, reconnect]])`: disconnect a player with an +* `core.disconnect_player(name[, reason[, reconnect]])`: disconnect a player with an optional reason, this will not prefix with 'Kicked: ' like kick_player. If no reason is given, it will default to 'Disconnected.' * Returns boolean indicating success (false if player nonexistent) @@ -7209,15 +7210,15 @@ Bans Particles --------- -* `minetest.add_particle(particle definition)` - * Deprecated: `minetest.add_particle(pos, velocity, acceleration, +* `core.add_particle(particle definition)` + * Deprecated: `core.add_particle(pos, velocity, acceleration, expirationtime, size, collisiondetection, texture, playername)` -* `minetest.add_particlespawner(particlespawner definition)` +* `core.add_particlespawner(particlespawner definition)` * Add a `ParticleSpawner`, an object that spawns an amount of particles over `time` seconds. * Returns an `id`, and -1 if adding didn't succeed - * Deprecated: `minetest.add_particlespawner(amount, time, + * Deprecated: `core.add_particlespawner(amount, time, minpos, maxpos, minvel, maxvel, minacc, maxacc, @@ -7225,16 +7226,16 @@ Particles minsize, maxsize, collisiondetection, texture, playername)` -* `minetest.delete_particlespawner(id, player)` +* `core.delete_particlespawner(id, player)` * Delete `ParticleSpawner` with `id` (return value from - `minetest.add_particlespawner`). + `core.add_particlespawner`). * If playername is specified, only deletes on the player's client, otherwise on all clients. Schematics ---------- -* `minetest.create_schematic(p1, p2, probability_list, filename, slice_prob_list)` +* `core.create_schematic(p1, p2, probability_list, filename, slice_prob_list)` * Create a schematic from the volume of map specified by the box formed by p1 and p2. * Apply the specified probability and per-node force-place to the specified @@ -7261,9 +7262,9 @@ Schematics applied, the lowest slice being `ypos = 0`. * If slice probability list equals `nil`, no slice probabilities are applied. - * Saves schematic in the Minetest Schematic format to filename. + * Saves schematic in the Luanti Schematic format to filename. -* `minetest.place_schematic(pos, schematic, rotation, replacements, force_placement, flags)` +* `core.place_schematic(pos, schematic, rotation, replacements, force_placement, flags)` * Place the schematic specified by schematic (see [Schematic specifier]) at `pos`. * `rotation` can equal `"0"`, `"90"`, `"180"`, `"270"`, or `"random"`. @@ -7282,8 +7283,8 @@ Schematics * place_center_y * place_center_z -* `minetest.place_schematic_on_vmanip(vmanip, pos, schematic, rotation, replacement, force_placement, flags)`: - * This function is analogous to minetest.place_schematic, but places a +* `core.place_schematic_on_vmanip(vmanip, pos, schematic, rotation, replacement, force_placement, flags)`: + * This function is analogous to core.place_schematic, but places a schematic onto the specified VoxelManip object `vmanip` instead of the map. * Returns false if any part of the schematic was cut-off due to the @@ -7297,7 +7298,7 @@ Schematics * place_center_y * place_center_z -* `minetest.serialize_schematic(schematic, format, options)` +* `core.serialize_schematic(schematic, format, options)` * Return the serialized schematic specified by schematic (see [Schematic specifier]) * in the `format` of either "mts" or "lua". @@ -7313,7 +7314,7 @@ Schematics the Lua code generated will use that number of spaces as indentation instead of a tab character. -* `minetest.read_schematic(schematic, options)` +* `core.read_schematic(schematic, options)` * Returns a Lua table representing the schematic (see: [Schematic specifier]) * `schematic` is the schematic to read (see: [Schematic specifier]) * `options` is a table containing the following optional parameters: @@ -7328,7 +7329,7 @@ Schematics HTTP Requests ------------- -* `minetest.request_http_api()`: +* `core.request_http_api()`: * returns `HTTPApiTable` containing http functions if the calling mod has been granted access by being listed in the `secure.http_mods` or `secure.trusted_mods` setting, otherwise returns `nil`. @@ -7336,7 +7337,7 @@ HTTP Requests `fetch_async_get` described below. * Only works at init time and must be called from the mod's main scope (not from a function). - * Function only exists if minetest server was built with cURL support. + * Function only exists if Luanti server was built with cURL support. * **DO NOT ALLOW ANY OTHER MODS TO ACCESS THE RETURNED TABLE, STORE IT IN A LOCAL VARIABLE!** * `HTTPApiTable.fetch(HTTPRequest req, callback)` @@ -7352,24 +7353,24 @@ HTTP Requests Storage API ----------- -* `minetest.get_mod_storage()`: +* `core.get_mod_storage()`: * returns reference to mod private `StorageRef` * must be called during mod load time Misc. ----- -* `minetest.get_connected_players()`: returns list of `ObjectRefs` -* `minetest.is_player(obj)`: boolean, whether `obj` is a player -* `minetest.player_exists(name)`: boolean, whether player exists +* `core.get_connected_players()`: returns list of `ObjectRefs` +* `core.is_player(obj)`: boolean, whether `obj` is a player +* `core.player_exists(name)`: boolean, whether player exists (regardless of online status) -* `minetest.is_valid_player_name(name)`: boolean, whether the given name +* `core.is_valid_player_name(name)`: boolean, whether the given name could be used as a player name (regardless of whether said player exists). -* `minetest.hud_replace_builtin(name, hud_definition)` +* `core.hud_replace_builtin(name, hud_definition)` * Replaces definition of a builtin hud element * `name`: `"breath"`, `"health"`, `"minimap"` or `"hotbar"` * `hud_definition`: definition to replace builtin definition -* `minetest.parse_relative_number(arg, relative_to)`: returns number or nil +* `core.parse_relative_number(arg, relative_to)`: returns number or nil * Helper function for chat commands. * For parsing an optionally relative number of a chat command parameter, using the chat command tilde notation. @@ -7380,31 +7381,31 @@ Misc. * Anything else will return `nil` * `relative_to`: Number to which the `arg` number might be relative to * Examples: - * `minetest.parse_relative_number("5", 10)` returns 5 - * `minetest.parse_relative_number("~5", 10)` returns 15 - * `minetest.parse_relative_number("~", 10)` returns 10 -* `minetest.send_join_message(player_name)` + * `core.parse_relative_number("5", 10)` returns 5 + * `core.parse_relative_number("~5", 10)` returns 15 + * `core.parse_relative_number("~", 10)` returns 10 +* `core.send_join_message(player_name)` * This function can be overridden by mods to change the join message. -* `minetest.send_leave_message(player_name, timed_out)` +* `core.send_leave_message(player_name, timed_out)` * This function can be overridden by mods to change the leave message. -* `minetest.hash_node_position(pos)`: returns a 48-bit integer +* `core.hash_node_position(pos)`: returns a 48-bit integer * `pos`: table {x=number, y=number, z=number}, * Gives a unique hash number for a node position (16+16+16=48bit) -* `minetest.get_position_from_hash(hash)`: returns a position - * Inverse transform of `minetest.hash_node_position` -* `minetest.get_item_group(name, group)`: returns a rating +* `core.get_position_from_hash(hash)`: returns a position + * Inverse transform of `core.hash_node_position` +* `core.get_item_group(name, group)`: returns a rating * Get rating of a group of an item. (`0` means: not in group) -* `minetest.get_node_group(name, group)`: returns a rating +* `core.get_node_group(name, group)`: returns a rating * Deprecated: An alias for the former. -* `minetest.raillike_group(name)`: returns a rating +* `core.raillike_group(name)`: returns a rating * Returns rating of the connect_to_raillike group corresponding to name * If name is not yet the name of a connect_to_raillike group, a new group id is created, with that name. -* `minetest.get_content_id(name)`: returns an integer +* `core.get_content_id(name)`: returns an integer * Gets the internal content ID of `name` -* `minetest.get_name_from_content_id(content_id)`: returns a string +* `core.get_name_from_content_id(content_id)`: returns a string * Gets the name of the content with that content ID -* `minetest.parse_json(string[, nullvalue, return_error])`: returns something +* `core.parse_json(string[, nullvalue, return_error])`: returns something * Convert a string containing JSON data into the Lua equivalent * `nullvalue`: returned in place of the JSON null; defaults to `nil` * On success returns a table, a string, a number, a boolean or `nullvalue` @@ -7412,7 +7413,7 @@ Misc. outputs an error message and returns `nil`. Otherwise returns `nil, err` (error message). * Example: `parse_json("[10, {\"a\":false}]")`, returns `{10, {a = false}}` -* `minetest.write_json(data[, styled])`: returns a string or `nil` and an error +* `core.write_json(data[, styled])`: returns a string or `nil` and an error message. * Convert a Lua table into a JSON string * styled: Outputs in a human-readable format if this is set, defaults to @@ -7426,12 +7427,12 @@ Misc. values. * Example: `write_json({10, {a = false}})`, returns `'[10, {"a": false}]'` -* `minetest.serialize(table)`: returns a string +* `core.serialize(table)`: returns a string * Convert a table containing tables, strings, numbers, booleans and `nil`s - into string form readable by `minetest.deserialize` + into string form readable by `core.deserialize` * Example: `serialize({foo="bar"})`, returns `'return { ["foo"] = "bar" }'` -* `minetest.deserialize(string[, safe])`: returns a table - * Convert a string returned by `minetest.serialize` into a table +* `core.deserialize(string[, safe])`: returns a table + * Convert a string returned by `core.serialize` into a table * `string` is loaded in an empty sandbox environment. * Will load functions if safe is false or omitted. Although these functions cannot directly access the global environment, they could bypass this @@ -7445,7 +7446,7 @@ Misc. * Example: `deserialize('print("foo")')`, returns `nil` (function call fails), returns `error:[string "print("foo")"]:1: attempt to call global 'print' (a nil value)` -* `minetest.compress(data, method, ...)`: returns `compressed_data` +* `core.compress(data, method, ...)`: returns `compressed_data` * Compress a string of data. * `method` is a string identifying the compression method to be used. * Supported compression methods: @@ -7457,22 +7458,22 @@ Misc. * Zstandard: `level` - Compression level. Integer or `nil`. Default `3`. Note any supported Zstandard compression level could be used here, but these are subject to change between Zstandard versions. -* `minetest.decompress(compressed_data, method, ...)`: returns data +* `core.decompress(compressed_data, method, ...)`: returns data * Decompress a string of data using the algorithm specified by `method`. - * See documentation on `minetest.compress()` for supported compression + * See documentation on `core.compress()` for supported compression methods. * `...` indicates method-specific arguments. Currently, no methods use this -* `minetest.rgba(red, green, blue[, alpha])`: returns a string +* `core.rgba(red, green, blue[, alpha])`: returns a string * Each argument is an 8 Bit unsigned integer * Returns the ColorString from rgb or rgba values - * Example: `minetest.rgba(10, 20, 30, 40)`, returns `"#0A141E28"` -* `minetest.encode_base64(string)`: returns string encoded in base64 + * Example: `core.rgba(10, 20, 30, 40)`, returns `"#0A141E28"` +* `core.encode_base64(string)`: returns string encoded in base64 * Encodes a string in base64. -* `minetest.decode_base64(string)`: returns string or nil on failure +* `core.decode_base64(string)`: returns string or nil on failure * Padding characters are only supported starting at version 5.4.0, where 5.5.0 and newer perform proper checks. * Decodes a string encoded in base64. -* `minetest.is_protected(pos, name)`: returns boolean +* `core.is_protected(pos, name)`: returns boolean * Returning `true` restricts the player `name` from modifying (i.e. digging, placing) the node at position `pos`. * `name` will be `""` for non-players or unknown players. @@ -7482,25 +7483,25 @@ Misc. not protected by the mod. This will allow using multiple protection mods. * Example: ```lua - local old_is_protected = minetest.is_protected - function minetest.is_protected(pos, name) + local old_is_protected = core.is_protected + function core.is_protected(pos, name) if mymod:position_protected_from(pos, name) then return true end return old_is_protected(pos, name) end ``` -* `minetest.record_protection_violation(pos, name)` +* `core.record_protection_violation(pos, name)` * This function calls functions registered with - `minetest.register_on_protection_violation`. -* `minetest.is_creative_enabled(name)`: returns boolean + `core.register_on_protection_violation`. +* `core.is_creative_enabled(name)`: returns boolean * Returning `true` means that Creative Mode is enabled for player `name`. * `name` will be `""` for non-players or if the player is unknown. * This function should be overridden by Creative Mode-related mods to implement a per-player Creative Mode. * By default, this function returns `true` if the setting `creative_mode` is `true` and `false` otherwise. -* `minetest.is_area_protected(pos1, pos2, player_name, interval)` +* `core.is_area_protected(pos1, pos2, player_name, interval)` * Returns the position of the first node that `player_name` may not modify in the specified cuboid between `pos1` and `pos2`. * Returns `false` if no protections were found. @@ -7511,10 +7512,10 @@ Misc. * `interval` defaults to 4. * `interval` should be carefully chosen and maximized to avoid an excessive number of points being checked. - * Like `minetest.is_protected`, this function may be extended or + * Like `core.is_protected`, this function may be extended or overwritten by mods to provide a faster implementation to check the cuboid for intersections. -* `minetest.rotate_and_place(itemstack, placer, pointed_thing[, infinitestacks, +* `core.rotate_and_place(itemstack, placer, pointed_thing[, infinitestacks, orient_flags, prevent_after_place])` * Attempt to predict the desired orientation of the facedir-capable node defined by `itemstack`, and place it accordingly (on-wall, on the floor, @@ -7531,14 +7532,14 @@ Misc. when placing on the floor or ceiling. * The first four options are mutually-exclusive; the last in the list takes precedence over the first. - * `prevent_after_place` is directly passed to `minetest.item_place_node` + * `prevent_after_place` is directly passed to `core.item_place_node` * Returns the new itemstack after placement -* `minetest.rotate_node(itemstack, placer, pointed_thing)` +* `core.rotate_node(itemstack, placer, pointed_thing)` * calls `rotate_and_place()` with `infinitestacks` set according to the state of the creative mode setting, checks for "sneak" to set the `invert_wall` parameter and `prevent_after_place` set to `true`. -* `minetest.calculate_knockback(player, hitter, time_from_last_punch, +* `core.calculate_knockback(player, hitter, time_from_last_punch, tool_capabilities, dir, distance, damage)` * Returns the amount of knockback applied on the punched player. * Arguments are equivalent to `register_on_punchplayer`, except the following: @@ -7547,7 +7548,7 @@ Misc. * You may want to cache and call the old function to allow multiple mods to change knockback behavior. -* `minetest.forceload_block(pos[, transient[, limit]])` +* `core.forceload_block(pos[, transient[, limit]])` * forceloads the position `pos`. * returns `true` if area could be forceloaded * If `transient` is `false` or absent, the forceload will be persistent @@ -7558,12 +7559,12 @@ Misc. absent, the limit is the value of the setting `"max_forceloaded_blocks"`. If the call would put the number of blocks over the limit, the call fails. -* `minetest.forceload_free_block(pos[, transient])` +* `core.forceload_free_block(pos[, transient])` * stops forceloading the position `pos` * If `transient` is `false` or absent, frees a persistent forceload. If `true`, frees a transient forceload. -* `minetest.compare_block_status(pos, condition)` +* `core.compare_block_status(pos, condition)` * Checks whether the mapblock at position `pos` is in the wanted condition. * `condition` may be one of the following values: * `"unknown"`: not in memory @@ -7576,7 +7577,7 @@ Misc. * `true`: Mapblock meets the requirement * `nil`: Unsupported `condition` value -* `minetest.request_insecure_environment()`: returns an environment containing +* `core.request_insecure_environment()`: returns an environment containing insecure functions if the calling mod has been listed as trusted in the `secure.trusted_mods` setting or security is disabled, otherwise returns `nil`. @@ -7585,10 +7586,10 @@ Misc. * **DO NOT ALLOW ANY OTHER MODS TO ACCESS THE RETURNED ENVIRONMENT, STORE IT IN A LOCAL VARIABLE!** -* `minetest.global_exists(name)` +* `core.global_exists(name)` * Checks if a global variable has been set, without triggering a warning. -* `minetest.register_portable_metatable(name, mt)`: +* `core.register_portable_metatable(name, mt)`: * Register a metatable that should be preserved when Lua data is transferred between environments (via IPC or `handle_async`). * `name` is a string that identifies the metatable. It is recommended to @@ -7602,10 +7603,12 @@ Misc. Global objects -------------- -* `minetest.env`: `EnvRef` of the server environment and world. - * Any function in the minetest namespace can be called using the syntax - `minetest.env:somefunction(somearguments)` - instead of `minetest.somefunction(somearguments)` +* `core.env`: `EnvRef` of the server environment and world. + * Any function in the `core` namespace can be called using the syntax + `core.env:somefunction(somearguments)` + instead of `core.somefunction(somearguments)` + * Deprecated, but support is not to be dropped soon +* `minetest`: alias for the `core` namespace * Deprecated, but support is not to be dropped soon Global tables @@ -7613,87 +7616,87 @@ Global tables ### Registered definition tables -* `minetest.registered_items` +* `core.registered_items` * Map of registered items, indexed by name -* `minetest.registered_nodes` +* `core.registered_nodes` * Map of registered node definitions, indexed by name -* `minetest.registered_craftitems` +* `core.registered_craftitems` * Map of registered craft item definitions, indexed by name -* `minetest.registered_tools` +* `core.registered_tools` * Map of registered tool definitions, indexed by name -* `minetest.registered_entities` +* `core.registered_entities` * Map of registered entity prototypes, indexed by name * Values in this table may be modified directly. Note: changes to initial properties will only affect entities spawned afterwards, as they are only read when spawning. -* `minetest.object_refs` +* `core.object_refs` * Map of object references, indexed by active object id -* `minetest.luaentities` +* `core.luaentities` * Map of Lua entities, indexed by active object id -* `minetest.registered_abms` +* `core.registered_abms` * List of ABM definitions -* `minetest.registered_lbms` +* `core.registered_lbms` * List of LBM definitions -* `minetest.registered_aliases` +* `core.registered_aliases` * Map of registered aliases, indexed by name -* `minetest.registered_ores` +* `core.registered_ores` * Map of registered ore definitions, indexed by the `name` field. * If `name` is nil, the key is the object handle returned by - `minetest.register_ore`. -* `minetest.registered_biomes` + `core.register_ore`. +* `core.registered_biomes` * Map of registered biome definitions, indexed by the `name` field. * If `name` is nil, the key is the object handle returned by - `minetest.register_biome`. -* `minetest.registered_decorations` + `core.register_biome`. +* `core.registered_decorations` * Map of registered decoration definitions, indexed by the `name` field. * If `name` is nil, the key is the object handle returned by - `minetest.register_decoration`. -* `minetest.registered_chatcommands` + `core.register_decoration`. +* `core.registered_chatcommands` * Map of registered chat command definitions, indexed by name -* `minetest.registered_privileges` +* `core.registered_privileges` * Map of registered privilege definitions, indexed by name * Registered privileges can be modified directly in this table. ### Registered callback tables All callbacks registered with [Global callback registration functions] are added -to corresponding `minetest.registered_*` tables. +to corresponding `core.registered_*` tables. For historical reasons, the use of an -s suffix in these names is inconsistent. -* `minetest.registered_on_chat_messages` -* `minetest.registered_on_chatcommands` -* `minetest.registered_globalsteps` -* `minetest.registered_on_punchnodes` -* `minetest.registered_on_placenodes` -* `minetest.registered_on_dignodes` -* `minetest.registered_on_generateds` -* `minetest.registered_on_newplayers` -* `minetest.registered_on_dieplayers` -* `minetest.registered_on_respawnplayers` -* `minetest.registered_on_prejoinplayers` -* `minetest.registered_on_joinplayers` -* `minetest.registered_on_leaveplayers` -* `minetest.registered_on_player_receive_fields` -* `minetest.registered_on_cheats` -* `minetest.registered_on_crafts` -* `minetest.registered_craft_predicts` -* `minetest.registered_on_item_eats` -* `minetest.registered_on_item_pickups` -* `minetest.registered_on_punchplayers` -* `minetest.registered_on_authplayers` -* `minetest.registered_on_player_inventory_actions` -* `minetest.registered_allow_player_inventory_actions` -* `minetest.registered_on_rightclickplayers` -* `minetest.registered_on_mods_loaded` -* `minetest.registered_on_shutdown` -* `minetest.registered_on_protection_violation` -* `minetest.registered_on_priv_grant` -* `minetest.registered_on_priv_revoke` -* `minetest.registered_can_bypass_userlimit` -* `minetest.registered_on_modchannel_message` -* `minetest.registered_on_liquid_transformed` -* `minetest.registered_on_mapblocks_changed` +* `core.registered_on_chat_messages` +* `core.registered_on_chatcommands` +* `core.registered_globalsteps` +* `core.registered_on_punchnodes` +* `core.registered_on_placenodes` +* `core.registered_on_dignodes` +* `core.registered_on_generateds` +* `core.registered_on_newplayers` +* `core.registered_on_dieplayers` +* `core.registered_on_respawnplayers` +* `core.registered_on_prejoinplayers` +* `core.registered_on_joinplayers` +* `core.registered_on_leaveplayers` +* `core.registered_on_player_receive_fields` +* `core.registered_on_cheats` +* `core.registered_on_crafts` +* `core.registered_craft_predicts` +* `core.registered_on_item_eats` +* `core.registered_on_item_pickups` +* `core.registered_on_punchplayers` +* `core.registered_on_authplayers` +* `core.registered_on_player_inventory_actions` +* `core.registered_allow_player_inventory_actions` +* `core.registered_on_rightclickplayers` +* `core.registered_on_mods_loaded` +* `core.registered_on_shutdown` +* `core.registered_on_protection_violation` +* `core.registered_on_priv_grant` +* `core.registered_on_priv_revoke` +* `core.registered_can_bypass_userlimit` +* `core.registered_on_modchannel_message` +* `core.registered_on_liquid_transformed` +* `core.registered_on_mapblocks_changed` Class reference =============== @@ -7718,7 +7721,7 @@ use the provided load and write functions for this. * `type_name`: optional, forces the internally used API. * Possible values: `"LibSpatial"` (default). * When other values are specified, or SpatialIndex is not available, - the custom Minetest functions are used. + the custom Luanti functions are used. * `get_area(id, include_corners, include_data)` * Returns the area information about the specified ID. * Returned values are either of these: @@ -7813,7 +7816,7 @@ An `InvRef` is a reference to an inventory. unique item this way will likely remove the wrong one -- to do that use `set_stack` with an empty `ItemStack`. * `get_location()`: returns a location compatible to - `minetest.get_inventory(location)`. + `core.get_inventory(location)`. * returns `{type="undefined"}` in case location is not known ### Callbacks @@ -8055,7 +8058,7 @@ An interface to use mod channels on client and server ------------- Node metadata: reference extra data and functionality stored in a node. -Can be obtained via `minetest.get_meta(pos)`. +Can be obtained via `core.get_meta(pos)`. ### Methods @@ -8071,7 +8074,7 @@ Can be obtained via `minetest.get_meta(pos)`. -------------- Node Timers: a high resolution persistent per-node timer. -Can be gotten via `minetest.get_node_timer(pos)`. +Can be gotten via `core.get_node_timer(pos)`. ### Methods @@ -8622,7 +8625,7 @@ child will follow movement and rotation of that bone. at sunrise and sunset. (default: `#7f99cc`) * `fog_tint_type`: string, changes which mode the directional fog abides by, `"custom"` uses `sun_tint` and `moon_tint`, while - `"default"` uses the classic Minetest sun and moon tinting. + `"default"` uses the classic Luanti sun and moon tinting. Will use tonemaps, if set to `"default"`. (default: `"default"`) * `fog`: A table with following optional fields: * `fog_distance`: integer, set an upper bound for the client's viewing_range. @@ -8733,7 +8736,7 @@ child will follow movement and rotation of that bone. * `0`...`1`: Overrides day-night ratio, controlling sunlight to a specific amount. * Passing no arguments disables override, defaulting to sunlight based on day-night cycle - * See also `minetest.time_to_day_night_ratio`, + * See also `core.time_to_day_night_ratio`, * `get_day_night_ratio()`: returns the ratio or nil if it isn't overridden * `set_local_animation(idle, walk, dig, walk_while_dig, frame_speed)`: set animation for player model in third person view. @@ -8850,15 +8853,15 @@ offering very strong randomness. ------------- A perlin noise generator. -It can be created via `PerlinNoise()` or `minetest.get_perlin()`. -For `minetest.get_perlin()`, the actual seed used is the noiseparams seed +It can be created via `PerlinNoise()` or `core.get_perlin()`. +For `core.get_perlin()`, the actual seed used is the noiseparams seed plus the world seed, to create world-specific noise. `PerlinNoise(noiseparams)` `PerlinNoise(seed, octaves, persistence, spread)` (Deprecated). -`minetest.get_perlin(noiseparams)` -`minetest.get_perlin(seeddiff, octaves, persistence, spread)` (Deprecated). +`core.get_perlin(noiseparams)` +`core.get_perlin(seeddiff, octaves, persistence, spread)` (Deprecated). ### Methods @@ -8871,8 +8874,8 @@ plus the world seed, to create world-specific noise. A fast, bulk perlin noise generator. It can be created via `PerlinNoiseMap(noiseparams, size)` or -`minetest.get_perlin_map(noiseparams, size)`. -For `minetest.get_perlin_map()`, the actual seed used is the noiseparams seed +`core.get_perlin_map(noiseparams, size)`. +For `core.get_perlin_map()`, the actual seed used is the noiseparams seed plus the world seed, to create world-specific noise. Format of `size` is `{x=dimx, y=dimy, z=dimz}`. The `z` component is omitted @@ -8962,7 +8965,7 @@ The map is loaded as the ray advances. If the map is modified after the `Raycast` is created, the changes may or may not have an effect on the object. It can be created via `Raycast(pos1, pos2, objects, liquids)` or -`minetest.raycast(pos1, pos2, objects, liquids)` where: +`core.raycast(pos1, pos2, objects, liquids)` where: * `pos1`: start of the ray * `pos2`: end of the ray @@ -9009,11 +9012,11 @@ secure random device cannot be found on the system. An interface to read config files in the format of `minetest.conf`. -`minetest.settings` is a `Settings` instance that can be used to access the +`core.settings` is a `Settings` instance that can be used to access the main config file (`minetest.conf`). Instances for other config files can be created via `Settings(filename)`. -Engine settings on the `minetest.settings` object have internal defaults that +Engine settings on the `core.settings` object have internal defaults that will be returned if a setting is unset. The engine does *not* (yet) read `settingtypes.txt` for this purpose. This means that no defaults will be returned for mod settings. @@ -9036,7 +9039,7 @@ means that no defaults will be returned for mod settings. * Setting names can't contain whitespace or any of `="{}#`. * Setting values can't contain the sequence `\n"""`. * Setting names starting with "secure." can't be set on the main settings - object (`minetest.settings`). + object (`core.settings`). * `set_bool(key, value)` * See documentation for `set()` above. * `set_np_group(key, value)` @@ -9048,7 +9051,7 @@ means that no defaults will be returned for mod settings. * Returns a boolean indicating whether `key` exists. * In contrast to the various getter functions, `has()` doesn't consider any default values. - * This means that on the main settings object (`minetest.settings`), + * This means that on the main settings object (`core.settings`), `get(key)` might return a value even if `has(key)` returns `false`. * `write()`: returns a boolean (`true` for success) * Writes changes to file. @@ -9069,7 +9072,7 @@ The settings have the format `key = value`. Example: ------------ Mod metadata: per mod metadata, saved automatically. -Can be obtained via `minetest.get_mod_storage()` during load time. +Can be obtained via `core.get_mod_storage()` during load time. WARNING: This storage backend is incapable of saving raw binary data due to restrictions of JSON. @@ -9097,10 +9100,10 @@ Player properties need to be saved manually. hp_max = 10, -- Defines the maximum and default HP of the entity -- For Lua entities the maximum is not enforced. - -- For players this defaults to `minetest.PLAYER_MAX_HP_DEFAULT`. + -- For players this defaults to `core.PLAYER_MAX_HP_DEFAULT`. breath_max = 0, - -- For players only. Defaults to `minetest.PLAYER_MAX_BREATH_DEFAULT`. + -- For players only. Defaults to `core.PLAYER_MAX_BREATH_DEFAULT`. zoom_fov = 0.0, -- For players only. Zoom FOV in degrees. @@ -9155,7 +9158,7 @@ Player properties need to be saved manually. -- Otherwise for non-node items, the object will be an extrusion of -- 'inventory_image'. -- If 'itemname' contains a ColorString or palette index (e.g. from - -- `minetest.itemstring_with_palette()`), the entity will inherit the color. + -- `core.itemstring_with_palette()`), the entity will inherit the color. -- Wielditems are scaled a bit. If you want a wielditem to appear -- to be as large as a node, use `0.667` in `visual_size` -- "item" is similar to "wielditem" but ignores the 'wield_image' parameter. @@ -9267,7 +9270,7 @@ Player properties need to be saved manually. Entity definition ----------------- -Used by `minetest.register_entity`. +Used by `core.register_entity`. The entity definition table becomes a metatable of a newly created per-entity luaentity table, meaning its fields (e.g. `initial_properties`) will be shared between all instances of an entity. @@ -9305,7 +9308,7 @@ between all instances of an entity. ABM (ActiveBlockModifier) definition ------------------------------------ -Used by `minetest.register_abm`. +Used by `core.register_abm`. ```lua { @@ -9359,7 +9362,7 @@ Used by `minetest.register_abm`. LBM (LoadingBlockModifier) definition ------------------------------------- -Used by `minetest.register_lbm`. +Used by `core.register_lbm`. A loading block modifier (LBM) is used to define a function that is called for specific nodes (defined by `nodenames`) when a mapblock which contains such nodes @@ -9397,7 +9400,7 @@ contain a matching node. bulk_action = function(pos_list, dtime_s) end, -- Function triggered with a list of all applicable node positions at once. -- This can be provided as an alternative to `action` (not both). - -- Available since `minetest.features.bulk_lbms` (5.10.0) + -- Available since `core.features.bulk_lbms` (5.10.0) -- `dtime_s`: as above } ``` @@ -9458,8 +9461,8 @@ Tile animation definition Item definition --------------- -Used by `minetest.register_node`, `minetest.register_craftitem`, and -`minetest.register_tool`. +Used by `core.register_node`, `core.register_craftitem`, and +`core.register_tool`. ```lua { @@ -9544,8 +9547,8 @@ Used by `minetest.register_node`, `minetest.register_craftitem`, and light_source = 0, -- When used for nodes: Defines amount of light emitted by node. -- Otherwise: Defines texture glow when viewed as a dropped item - -- To set the maximum (14), use the value 'minetest.LIGHT_MAX'. - -- A value outside the range 0 to minetest.LIGHT_MAX causes undefined + -- To set the maximum (14), use the value 'core.LIGHT_MAX'. + -- A value outside the range 0 to core.LIGHT_MAX causes undefined -- behavior. -- See "Tool Capabilities" section for an example including explanation @@ -9626,7 +9629,7 @@ Used by `minetest.register_node`, `minetest.register_craftitem`, and -- When tool breaks due to wear. Ignored for non-tools eat = , - -- When item is eaten with `minetest.do_item_eat` + -- When item is eaten with `core.do_item_eat` punch_use = , -- When item is used with the 'punch/mine' key pointing at a node or entity @@ -9641,7 +9644,7 @@ Used by `minetest.register_node`, `minetest.register_craftitem`, and -- Shall place item and return the leftover itemstack -- or nil to not modify the inventory. -- The placer may be any ObjectRef or nil. - -- default: minetest.item_place + -- default: core.item_place on_secondary_use = function(itemstack, user, pointed_thing), -- Same as on_place but called when not pointing at a node. @@ -9653,7 +9656,7 @@ Used by `minetest.register_node`, `minetest.register_craftitem`, and on_drop = function(itemstack, dropper, pos), -- Shall drop item and return the leftover itemstack. -- The dropper may be any ObjectRef or nil. - -- default: minetest.item_drop + -- default: core.item_drop on_pickup = function(itemstack, picker, pointed_thing, time_from_last_punch, ...), -- Called when a dropped item is punched by a player. @@ -9666,7 +9669,7 @@ Used by `minetest.register_node`, `minetest.register_craftitem`, and -- luaentity) as `type="object"` `pointed_thing`. -- * `time_from_last_punch, ...` (optional): Other parameters from -- `luaentity:on_punch`. - -- default: `minetest.item_pickup` + -- default: `core.item_pickup` on_use = function(itemstack, user, pointed_thing), -- default: nil @@ -9699,7 +9702,7 @@ Used by `minetest.register_node`, `minetest.register_craftitem`, and Node definition --------------- -Used by `minetest.register_node`. +Used by `core.register_node`. ```lua { @@ -9881,7 +9884,7 @@ Used by `minetest.register_node`. leveled_max = 127, -- Maximum value for `leveled` (0-127), enforced in - -- `minetest.set_node_level` and `minetest.add_node_level`. + -- `core.set_node_level` and `core.add_node_level`. -- Values above 124 might causes collision detection issues. liquid_range = 8, @@ -10033,9 +10036,9 @@ Used by `minetest.register_node`. -- Node constructor; called after adding node. -- Can set up metadata and stuff like that. -- Not called for bulk node placement (i.e. schematics and VoxelManip). - -- Note: Within an on_construct callback, minetest.set_node can cause an + -- Note: Within an on_construct callback, core.set_node can cause an -- infinite loop if it invokes the same callback. - -- Consider using minetest.swap_node instead. + -- Consider using core.swap_node instead. -- default: nil on_destruct = function(pos), @@ -10072,14 +10075,14 @@ Used by `minetest.register_node`. after_place_node = function(pos, placer, itemstack, pointed_thing), -- Called after constructing node when node was placed using - -- minetest.item_place_node / minetest.place_node. + -- core.item_place_node / core.place_node. -- If return true no item is taken from itemstack. -- `placer` may be any valid ObjectRef or nil. -- default: nil after_dig_node = function(pos, oldnode, oldmetadata, digger), -- Called after destructing the node when node was dug using - -- `minetest.node_dig` / `minetest.dig_node`. + -- `core.node_dig` / `core.dig_node`. -- * `pos`: node position -- * `oldnode`: node table of node before it was dug -- * `oldmetadata`: metadata of node before it was dug, @@ -10092,9 +10095,9 @@ Used by `minetest.register_node`. -- default: nil on_punch = function(pos, node, puncher, pointed_thing), - -- default: minetest.node_punch + -- default: core.node_punch -- Called when puncher (an ObjectRef) punches the node at pos. - -- By default calls minetest.register_on_punchnode callbacks. + -- By default calls core.register_on_punchnode callbacks. on_rightclick = function(pos, node, clicker, itemstack, pointed_thing), -- default: nil @@ -10108,14 +10111,14 @@ Used by `minetest.register_node`. -- "formspec" node metadata field is set. on_dig = function(pos, node, digger), - -- default: minetest.node_dig + -- default: core.node_dig -- By default checks privileges, wears out item (if tool) and removes node. -- return true if the node was dug successfully, false otherwise. -- Deprecated: returning nil is the same as returning true. on_timer = function(pos, elapsed), -- default: nil - -- called by NodeTimers, see minetest.get_node_timer and NodeTimerRef. + -- called by NodeTimers, see core.get_node_timer and NodeTimerRef. -- elapsed is the total time passed since the timer was started. -- return true to run the timer for another cycle with the same timeout -- value. @@ -10124,7 +10127,7 @@ Used by `minetest.register_node`. -- fields = {name1 = value1, name2 = value2, ...} -- formname should be the empty string; you **must not** use formname. -- Called when an UI form (e.g. sign text input) returns data. - -- See minetest.register_on_player_receive_fields for more info. + -- See core.register_on_player_receive_fields for more info. -- default: nil allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player), @@ -10209,7 +10212,7 @@ Crafting converts one or more inputs to one output itemstack of arbitrary count (except for fuels, which don't have an output). The conversion reduces each input ItemStack by 1. -Craft recipes are registered by `minetest.register_craft` and use a +Craft recipes are registered by `core.register_craft` and use a table format. The accepted parameters are listed below. Recipe input items can either be specified by item name (item count = 1) @@ -10250,7 +10253,7 @@ Parameters: `old_item` is the input item to replace (same syntax as for a regular input slot; groups are allowed) and `new_item` is an itemstring for the item stack it will become - * When the output is crafted, Minetest iterates through the list + * When the output is crafted, Luanti iterates through the list of input items if the crafting grid. For each input item stack, it checks if it matches with an `old_item` in the item pair list. * If it matches, the item will be replaced. Also, this item pair @@ -10417,7 +10420,7 @@ an oven, furnace, or something similar; the exact meaning is up for games to decide, if they choose to use cooking at all. The engine does not implement anything specific to cooking recipes, but -the recipes can be retrieved later using `minetest.get_craft_result` to +the recipes can be retrieved later using `core.get_craft_result` to have a consistent interface across different games/mods. Parameters: @@ -10455,7 +10458,7 @@ furnaces, ovens, stoves, etc. Like with cooking recipes, the engine does not do anything specific with fuel recipes and it's up to games and mods to use them by retrieving -them via `minetest.get_craft_result`. +them via `core.get_craft_result`. Parameters: @@ -10498,7 +10501,7 @@ if used: Ore definition -------------- -Used by `minetest.register_ore`. +Used by `core.register_ore`. See [Ores] section above for essential information. @@ -10605,7 +10608,7 @@ See [Ores] section above for essential information. Biome definition ---------------- -Used by `minetest.register_biome`. +Used by `core.register_biome`. The maximum number of biomes that can be used is 65535. However, using an excessive number of biomes will slow down map generation. Depending on desired @@ -10699,7 +10702,7 @@ performance and computing power the practical limit is much lower. Decoration definition --------------------- -See [Decoration types]. Used by `minetest.register_decoration`. +See [Decoration types]. Used by `core.register_decoration`. ```lua { @@ -10819,7 +10822,7 @@ See [Decoration types]. Used by `minetest.register_decoration`. schematic = "foobar.mts", -- If schematic is a string, it is the filepath relative to the current - -- working directory of the specified Minetest schematic file. + -- working directory of the specified Luanti schematic file. -- Could also be the ID of a previously registered schematic. schematic = { @@ -10861,7 +10864,7 @@ See [Decoration types]. Used by `minetest.register_decoration`. ----- L-system-type parameters treedef = {}, - -- Same as for `minetest.spawn_tree`. + -- Same as for `core.spawn_tree`. -- See section [L-system trees] for more details. } ``` @@ -10869,7 +10872,7 @@ See [Decoration types]. Used by `minetest.register_decoration`. Chat command definition ----------------------- -Used by `minetest.register_chatcommand`. +Used by `core.register_chatcommand`. Specifies the function to be called and the privileges required when a player issues the command. A help message that is the concatenation of the params and @@ -10884,7 +10887,7 @@ description fields is shown when the "/help" chatcommand is issued. -- General description of the command's purpose. privs = {}, - -- Required privileges to run. See `minetest.check_player_privs()` for + -- Required privileges to run. See `core.check_player_privs()` for -- the format and see [Privileges] for an overview of privileges. func = function(name, param), @@ -10926,7 +10929,7 @@ Example: Privilege definition -------------------- -Used by `minetest.register_privilege`. +Used by `core.register_privilege`. ```lua { @@ -10959,7 +10962,7 @@ Used by `minetest.register_privilege`. Detached inventory callbacks ---------------------------- -Used by `minetest.create_detached_inventory`. +Used by `core.create_detached_inventory`. ```lua { @@ -11042,7 +11045,7 @@ Used by `ObjectRef:hud_add`. Returned by `ObjectRef:hud_get`. Particle definition ------------------- -Used by `minetest.add_particle`. +Used by `core.add_particle`. ```lua { @@ -11121,7 +11124,7 @@ Used by `minetest.add_particle`. `ParticleSpawner` definition ---------------------------- -Used by `minetest.add_particlespawner`. +Used by `core.add_particlespawner`. Before v5.6.0, particlespawners used a different syntax and had a more limited set of features. Definition fields that are the same in both legacy and modern versions @@ -11556,7 +11559,7 @@ Used by `HTTPApiTable.fetch` and `HTTPApiTable.fetch_async`. -- table as x-www-form-urlencoded key-value pairs. user_agent = "ExampleUserAgent", - -- Optional, if specified replaces the default minetest user agent with + -- Optional, if specified replaces the default Luanti user agent with -- given string extra_headers = { "Accept-Language: en-us", "Accept-Charset: utf-8" }, @@ -11602,7 +11605,7 @@ Passed to `HTTPApiTable.fetch` callback. Returned by Authentication handler definition --------------------------------- -Used by `minetest.register_authentication_handler`. +Used by `core.register_authentication_handler`. ```lua { @@ -11653,7 +11656,7 @@ See http://bitop.luajit.org/ for advanced information. Tracy Profiler -------------- -Minetest can be built with support for the Tracy profiler, which can also be +Luanti can be built with support for the Tracy profiler, which can also be useful for profiling mods and is exposed to Lua as the global `tracy`. See doc/developing/misc.md for details. @@ -11663,13 +11666,13 @@ Note: This is a development feature and not covered by compatibility promises. Error Handling -------------- -When an error occurs that is not caught, Minetest calls the function -`minetest.error_handler` with the error object as its first argument. The second +When an error occurs that is not caught, Luanti calls the function +`core.error_handler` with the error object as its first argument. The second argument is the stack level where the error occurred. The return value is the error string that should be shown. By default this is a backtrace from `debug.traceback`. If the error object is not a string, it is first converted with `tostring` before being displayed. This means that you can use tables as error objects so long as you give them `__tostring` metamethods. -You can override `minetest.error_handler`. You should call the previous handler +You can override `core.error_handler`. You should call the previous handler with the correct stack level in your implementation. diff --git a/doc/menu_lua_api.md b/doc/menu_lua_api.md index c03c0501e..f69c5917f 100644 --- a/doc/menu_lua_api.md +++ b/doc/menu_lua_api.md @@ -1,5 +1,5 @@ -Minetest Lua Mainmenu API Reference 5.10.0 -========================================= +Luanti Lua Mainmenu API Reference 5.10.0 +======================================== Introduction ------------- @@ -128,7 +128,7 @@ HTTP Requests * returns `HTTPApiTable` containing http functions. * The returned table contains the functions `fetch_sync`, `fetch_async` and `fetch_async_get` described below. - * Function only exists if minetest server was built with cURL support. + * Function only exists if Luanti server was built with cURL support. * `HTTPApiTable.fetch_sync(HTTPRequest req)`: returns HTTPRequestResult * Performs given request synchronously * `HTTPApiTable.fetch_async(HTTPRequest req)`: returns handle @@ -155,7 +155,7 @@ Used by `HTTPApiTable.fetch` and `HTTPApiTable.fetch_async`. -- If post_data is not specified, a GET request is performed instead. user_agent = "ExampleUserAgent", - -- Optional, if specified replaces the default minetest user agent with + -- Optional, if specified replaces the default Luanti user agent with -- given string extra_headers = { "Accept-Language: en-us", "Accept-Charset: utf-8" }, @@ -257,7 +257,7 @@ GUI y = 577, }, - -- Estimated maximum formspec size before Minetest will start shrinking the + -- Estimated maximum formspec size before Luanti will start shrinking the -- formspec to fit. For a fullscreen formspec, use this formspec size and -- `padding[0,0]`. `bgcolor[;true]` is also recommended. max_formspec_size = { @@ -295,7 +295,7 @@ Package - content which is downloadable from the content db, may or may not be i * `core.get_modpaths()` (possible in async calls) * returns table of virtual path to global modpaths, where mods have been installed The difference with `core.get_modpath` is that no mods should be installed in these - directories by Minetest -- they might be read-only. + directories by Luanti -- they might be read-only. Ex: diff --git a/doc/mkdocs/build.sh b/doc/mkdocs/build.sh index 8d8ecb7ca..20defbffa 100755 --- a/doc/mkdocs/build.sh +++ b/doc/mkdocs/build.sh @@ -4,7 +4,7 @@ cat ../lua_api.md | csplit -sz -f docs/section - '/^=/-1' '{*}' cat > mkdocs.yml << EOF -site_name: Minetest API Documentation +site_name: Luanti API Documentation theme: name: readthedocs highlightjs: False diff --git a/doc/protocol.txt b/doc/protocol.txt index 4c8ddd500..b0d4a78f7 100644 --- a/doc/protocol.txt +++ b/doc/protocol.txt @@ -1,4 +1,4 @@ -Minetest protocol (incomplete, early draft): +Luanti protocol (incomplete, early draft): Updated 2011-06-18 A custom protocol over UDP. @@ -70,7 +70,7 @@ function check_if_minetestserver_up($host, $port) return false; } -- Here's a Python script for checking if a minetest server is up, confirmed working +- Here's a Python script for checking if a Luanti server is up, confirmed working #!/usr/bin/env python3 import sys, time, socket diff --git a/doc/texture_packs.md b/doc/texture_packs.md index 890f5a950..256915b81 100644 --- a/doc/texture_packs.md +++ b/doc/texture_packs.md @@ -1,4 +1,4 @@ -Minetest Texture Pack Reference +Luanti Texture Pack Reference =============================== Texture packs allow you to replace textures provided by a mod with your own @@ -25,7 +25,7 @@ texture pack. The name must not be “base”. ### `texture_pack.conf` A key-value config file with the following keys: -* `name`: The texture pack name. Allows Minetest to determine the texture pack name even if +* `name`: The texture pack name. Allows Luanti to determine the texture pack name even if the folder is wrongly named. * `title` - human-readable title * `description` - short description, shown in the content tab @@ -107,9 +107,9 @@ by texture packs. All existing fallback textures can be found in the directory * `progress_bar.png`: foreground texture of the loading screen's progress bar * `progress_bar_bg.png`: background texture of the loading screen's progress bar -* `moon.png`: texture of the moon. Default texture is generated by Minetest +* `moon.png`: texture of the moon. Default texture is generated by Luanti * `moon_tonemap.png`: tonemap to be used when `moon.png` was found -* `sun.png`: texture of the sun. Default texture is generated by Minetest +* `sun.png`: texture of the sun. Default texture is generated by Luanti * `sun_tonemap.png`: tonemap to be used when `sun.png` was found * `sunrisebg.png`: shown sky texture when the sun rises @@ -226,7 +226,7 @@ The special* targets only apply to specific drawtypes: Designing leaves textures for the leaves rendering options ---------------------------------------------------------- -Minetest has three modes for rendering leaves nodes if the node has the +Luanti has three modes for rendering leaves nodes if the node has the `allfaces_optional` drawtype. ### Fancy diff --git a/doc/world_format.md b/doc/world_format.md index 93920f391..94dface89 100644 --- a/doc/world_format.md +++ b/doc/world_format.md @@ -1,4 +1,4 @@ -# Minetest World Format 22...29 +# Luanti World Format 22...29 This applies to a world format carrying the block serialization version 22...27, used at least in @@ -249,14 +249,14 @@ Example content: # Map File Format -Minetest maps consist of `MapBlock`s, chunks of 16x16x16 nodes. +Luanti maps consist of `MapBlock`s, chunks of 16x16x16 nodes. In addition to the bulk node data, `MapBlock`s stored on disk also contain other things. ## History -Initially, Minetest stored maps in a format called the "sectors" format. +Initially, Luanti stored maps in a format called the "sectors" format. It was a directory/file structure like this: sectors2/XXX/ZZZ/YYYY @@ -265,7 +265,7 @@ For example, the `MapBlock` at `(0, 1, -2)` was this file: sectors2/000/ffd/0001 -Eventually Minetest outgrew this directory structure, as filesystems were +Eventually Luanti outgrew this directory structure, as filesystems were struggling under the number of files and directories. Large servers seriously needed a new format, and thus the base of the @@ -370,7 +370,7 @@ See below for description. * Indicates if the light is correct at the sides of a map block. Lighting may not be correct if the light changed, but a neighbor block was not loaded at that time. - If these flags are false, Minetest will automatically recompute light + If these flags are false, Luanti will automatically recompute light when both this block and its required neighbor are loaded. * The bit order is: @@ -383,7 +383,7 @@ See below for description. to indicate if direct sunlight spreading is finished. * Example: if the block at `(0, 0, 0)` has `lighting_complete = 0b1111111111111110`, - Minetest will correct lighting in the day light bank when the block at + Luanti will correct lighting in the day light bank when the block at `(1, 0, 0)` is also loaded. Timestamp and node ID mappings were introduced in map format version 29. diff --git a/misc/redirect.html b/misc/redirect.html index e13e4b8a4..f08a49ae1 100644 --- a/misc/redirect.html +++ b/misc/redirect.html @@ -2,7 +2,7 @@ - Minetest API documentation + Luanti API documentation From e441b5d2406978252dd0d8408864067a690e5038 Mon Sep 17 00:00:00 2001 From: LoneWolfHT Date: Wed, 23 Oct 2024 01:52:28 -0700 Subject: [PATCH 036/178] Fix spelling mistakes in player_sao.cpp --- src/server/player_sao.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/player_sao.cpp b/src/server/player_sao.cpp index 57b39d403..a5961fa39 100644 --- a/src/server/player_sao.cpp +++ b/src/server/player_sao.cpp @@ -504,7 +504,7 @@ u32 PlayerSAO::punch(v3f dir, } else { actionstream << "(none)"; } - actionstream << " puched " << + actionstream << " punched " << getDescription() << " (id=" << m_id << ", hp=" << m_hp << "), damage=" << (old_hp - (s32)getHP()) << (damage_handled ? " (handled by Lua)" : "") << std::endl; @@ -663,7 +663,7 @@ bool PlayerSAO::checkMovementCheat() NOTE: Actually the server should handle player physics like the client does and compare player's position to what is calculated on our side. This is required when eg. players fly due to an - explosion. Altough a node-based alternative might be possible + explosion. Although a node-based alternative might be possible too, and much more lightweight. */ From 2d135cc1bb63a213ccb5fc334f48c01046a001e6 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Thu, 24 Oct 2024 17:52:06 +0200 Subject: [PATCH 037/178] Revert "Use EGL over GLX" (#15315) This reverts commit aa273119f292e52df8d99f663df5337bac31556d. --- irr/src/CEGLManager.cpp | 119 +++-------- irr/src/CEGLManager.h | 7 - irr/src/CGLXManager.cpp | 401 ++++++++++++++++++++++++++++++++++++ irr/src/CGLXManager.h | 76 +++++++ irr/src/CIrrDeviceLinux.cpp | 50 ++--- irr/src/CMakeLists.txt | 13 +- 6 files changed, 539 insertions(+), 127 deletions(-) create mode 100644 irr/src/CGLXManager.cpp create mode 100644 irr/src/CGLXManager.h diff --git a/irr/src/CEGLManager.cpp b/irr/src/CEGLManager.cpp index 2f2a412ee..6c39c5c74 100644 --- a/irr/src/CEGLManager.cpp +++ b/irr/src/CEGLManager.cpp @@ -40,26 +40,29 @@ bool CEGLManager::initialize(const SIrrlichtCreationParameters ¶ms, const SE if (EglWindow != 0 && EglDisplay != EGL_NO_DISPLAY) return true; - // Window is depend on platform. - setWindow(Data); + // Window is depend on platform. #if defined(_IRR_COMPILE_WITH_WINDOWS_DEVICE_) + EglWindow = (NativeWindowType)Data.OpenGLWin32.HWnd; + Data.OpenGLWin32.HDc = GetDC((HWND)EglWindow); EglDisplay = eglGetDisplay((NativeDisplayType)Data.OpenGLWin32.HDc); #elif defined(_IRR_EMSCRIPTEN_PLATFORM_) + EglWindow = 0; EglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY); #elif defined(_IRR_COMPILE_WITH_X11_DEVICE_) + EglWindow = (NativeWindowType)Data.OpenGLLinux.X11Window; EglDisplay = eglGetDisplay((NativeDisplayType)Data.OpenGLLinux.X11Display); #endif // We must check if EGL display is valid. if (EglDisplay == EGL_NO_DISPLAY) { - os::Printer::log("Could not get EGL display.", ELL_ERROR); + os::Printer::log("Could not get EGL display."); terminate(); return false; } // Initialize EGL here. if (!eglInitialize(EglDisplay, &MajorVersion, &MinorVersion)) { - os::Printer::log("Could not initialize EGL display.", ELL_ERROR); + os::Printer::log("Could not initialize EGL display."); EglDisplay = EGL_NO_DISPLAY; terminate(); @@ -70,22 +73,6 @@ bool CEGLManager::initialize(const SIrrlichtCreationParameters ¶ms, const SE return true; } -void CEGLManager::setWindow(const SExposedVideoData &inData) -{ -#if defined(_IRR_COMPILE_WITH_WINDOWS_DEVICE_) - Data.OpenGLWin32.HWnd = inData.OpenGLWin32.HWnd; - if (Data.OpenGLWin32.HWnd) { - EglWindow = (NativeWindowType)Data.OpenGLWin32.HWnd; - Data.OpenGLWin32.HDc = GetDC((HWND)EglWindow); - } -#elif defined(_IRR_EMSCRIPTEN_PLATFORM_) - EglWindow = 0; -#elif defined(_IRR_COMPILE_WITH_X11_DEVICE_) - Data.OpenGLLinux.X11Window = inData.OpenGLLinux.X11Window; - EglWindow = (NativeWindowType)Data.OpenGLLinux.X11Window; -#endif -} - void CEGLManager::terminate() { if (EglWindow == 0 && EglDisplay == EGL_NO_DISPLAY) @@ -118,16 +105,20 @@ bool CEGLManager::generateSurface() if (EglSurface != EGL_NO_SURFACE) return true; - if (!EglConfig) { -#if defined(_IRR_EMSCRIPTEN_PLATFORM_) - EglConfig = chooseConfig(ECS_IRR_CHOOSE); -#else - EglConfig = chooseConfig(ECS_EGL_CHOOSE_FIRST_LOWER_EXPECTATIONS); -#endif - } + // We should assign new WindowID on platforms, where WindowID may change at runtime, + // at this time only Android support this feature. + // this needs an update method instead! - if (!EglConfig) { - os::Printer::log("Could not choose EGL config.", ELL_ERROR); +#if defined(_IRR_EMSCRIPTEN_PLATFORM_) + // eglChooseConfig is currently only implemented as stub in emscripten (version 1.37.22 at point of writing) + // But the other solution would also be fine as it also only generates a single context so there is not much to choose from. + EglConfig = chooseConfig(ECS_IRR_CHOOSE); +#else + EglConfig = chooseConfig(ECS_EGL_CHOOSE_FIRST_LOWER_EXPECTATIONS); +#endif + + if (EglConfig == 0) { + os::Printer::log("Could not get config for EGL display."); return false; } @@ -138,26 +129,11 @@ bool CEGLManager::generateSurface() EglSurface = eglCreateWindowSurface(EglDisplay, EglConfig, 0, 0); if (EGL_NO_SURFACE == EglSurface) - os::Printer::log("Could not create EGL surface.", ELL_ERROR); + os::Printer::log("Could not create EGL surface."); #ifdef EGL_VERSION_1_2 - if (MinorVersion > 1) { - EGLBoolean ok = 0; - switch (Params.DriverType) { - case EDT_OGLES2: - case EDT_WEBGL1: - ok = eglBindAPI(EGL_OPENGL_ES_API); - break; - case EDT_OPENGL: - ok = eglBindAPI(EGL_OPENGL_API); - default: - break; - } - if (!ok) { - os::Printer::log("Could not bind EGL API.", ELL_ERROR); - return false; - } - } + if (MinorVersion > 1) + eglBindAPI(EGL_OPENGL_ES_API); #endif if (Params.Vsync) @@ -166,26 +142,6 @@ bool CEGLManager::generateSurface() return true; } -EGLint CEGLManager::getNativeVisualID() -{ - if (!EglConfig) { -#if defined(_IRR_EMSCRIPTEN_PLATFORM_) - EglConfig = chooseConfig(ECS_IRR_CHOOSE); -#else - EglConfig = chooseConfig(ECS_EGL_CHOOSE_FIRST_LOWER_EXPECTATIONS); -#endif - } - - if (!EglConfig) { - os::Printer::log("Could not choose EGL config.", ELL_WARNING); - return 0; - } - - EGLint ret = 0; - eglGetConfigAttrib(EglDisplay, EglConfig, EGL_NATIVE_VISUAL_ID, &ret); - return ret; -} - EGLConfig CEGLManager::chooseConfig(EConfigStyle confStyle) { EGLConfig configResult = 0; @@ -197,8 +153,6 @@ EGLConfig CEGLManager::chooseConfig(EConfigStyle confStyle) case EDT_WEBGL1: eglOpenGLBIT = EGL_OPENGL_ES2_BIT; break; - case EDT_OPENGL: - eglOpenGLBIT = EGL_OPENGL_BIT; default: break; } @@ -339,8 +293,6 @@ EGLConfig CEGLManager::chooseConfig(EConfigStyle confStyle) } delete[] configs; - } else { - _IRR_DEBUG_BREAK_IF(1) } return configResult; @@ -498,36 +450,33 @@ bool CEGLManager::generateContext() if (EglContext != EGL_NO_CONTEXT) return true; - std::vector ContextAttrib; + EGLint OpenGLESVersion = 0; switch (Params.DriverType) { case EDT_OGLES2: case EDT_WEBGL1: -#ifdef EGL_VERSION_1_3 - ContextAttrib.push_back(EGL_CONTEXT_CLIENT_VERSION); - ContextAttrib.push_back(2); -#endif - break; - case EDT_OPENGL: -#ifdef EGL_VERSION_1_5 - ContextAttrib.push_back(EGL_CONTEXT_OPENGL_PROFILE_MASK); - ContextAttrib.push_back(EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT); -#endif + OpenGLESVersion = 2; break; default: break; } - ContextAttrib.push_back(EGL_NONE); - ContextAttrib.push_back(0); + EGLint ContextAttrib[] = { +#ifdef EGL_VERSION_1_3 + EGL_CONTEXT_CLIENT_VERSION, OpenGLESVersion, +#endif + EGL_NONE, 0, + }; - EglContext = eglCreateContext(EglDisplay, EglConfig, EGL_NO_CONTEXT, ContextAttrib.data()); + EglContext = eglCreateContext(EglDisplay, EglConfig, EGL_NO_CONTEXT, ContextAttrib); if (testEGLError()) { os::Printer::log("Could not create EGL context.", ELL_ERROR); return false; } + os::Printer::log("EGL context created with OpenGLESVersion: ", core::stringc((int)OpenGLESVersion), ELL_DEBUG); + return true; } diff --git a/irr/src/CEGLManager.h b/irr/src/CEGLManager.h index 2a1338b9d..49371e469 100644 --- a/irr/src/CEGLManager.h +++ b/irr/src/CEGLManager.h @@ -31,10 +31,6 @@ public: aren't create. */ bool initialize(const SIrrlichtCreationParameters ¶ms, const SExposedVideoData &data) override; - // Set EGL window. - // Call this if window is not known at time of initialize() - void setWindow(const SExposedVideoData &data); - // Terminate EGL. /* Terminate EGL context. This method break both existed surface and context. */ void terminate() override; @@ -70,9 +66,6 @@ public: // Swap buffers. bool swapBuffers() override; - // Returns native visual ID. Will choose config if not already done. - EGLint getNativeVisualID(); - protected: enum EConfigStyle { diff --git a/irr/src/CGLXManager.cpp b/irr/src/CGLXManager.cpp new file mode 100644 index 000000000..8593621b7 --- /dev/null +++ b/irr/src/CGLXManager.cpp @@ -0,0 +1,401 @@ +// Copyright (C) 2013 Christian Stehno +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in Irrlicht.h + +#include "CGLXManager.h" + +#ifdef _IRR_COMPILE_WITH_GLX_MANAGER_ + +#include "os.h" + +#define GL_GLEXT_LEGACY 1 +#define GLX_GLXEXT_LEGACY 1 +#include +#include +#include +#include + +namespace irr +{ +namespace video +{ + +CGLXManager::CGLXManager(const SIrrlichtCreationParameters ¶ms, const SExposedVideoData &videodata, int screennr) : + Params(params), PrimaryContext(videodata), VisualInfo(0), glxFBConfig(0), GlxWin(0) +{ +#ifdef _DEBUG + setDebugName("CGLXManager"); +#endif + + CurrentContext.OpenGLLinux.X11Display = PrimaryContext.OpenGLLinux.X11Display; + + int major, minor; + Display *display = (Display *)PrimaryContext.OpenGLLinux.X11Display; + const bool isAvailableGLX = glXQueryExtension(display, &major, &minor); + + if (isAvailableGLX && glXQueryVersion(display, &major, &minor)) { +#if defined(GLX_VERSION_1_3) + typedef GLXFBConfig *(*PFNGLXCHOOSEFBCONFIGPROC)(Display *dpy, int screen, const int *attrib_list, int *nelements); + + PFNGLXCHOOSEFBCONFIGPROC glxChooseFBConfig = (PFNGLXCHOOSEFBCONFIGPROC)glXGetProcAddress(reinterpret_cast("glXChooseFBConfig")); + if (major == 1 && minor > 2 && glxChooseFBConfig) { + os::Printer::log("GLX >= 1.3", ELL_DEBUG); + // attribute array for the draw buffer + int visualAttrBuffer[] = { + GLX_RENDER_TYPE, + GLX_RGBA_BIT, + GLX_RED_SIZE, + 4, + GLX_GREEN_SIZE, + 4, + GLX_BLUE_SIZE, + 4, + GLX_ALPHA_SIZE, + Params.WithAlphaChannel ? 1 : 0, + GLX_DEPTH_SIZE, + Params.ZBufferBits, // 10,11 + GLX_DOUBLEBUFFER, + Params.Doublebuffer ? True : False, + GLX_STENCIL_SIZE, + Params.Stencilbuffer ? 1 : 0, +#if defined(GLX_VERSION_1_4) && defined(GLX_SAMPLE_BUFFERS) // we need to check the extension string! + GLX_SAMPLE_BUFFERS, + 1, + GLX_SAMPLES, + Params.AntiAlias, // 18,19 +#elif defined(GLX_ARB_multisample) + GLX_SAMPLE_BUFFERS_ARB, + 1, + GLX_SAMPLES_ARB, + Params.AntiAlias, // 18,19 +#elif defined(GLX_SGIS_multisample) + GLX_SAMPLE_BUFFERS_SGIS, + 1, + GLX_SAMPLES_SGIS, + Params.AntiAlias, // 18,19 +#endif + GLX_STEREO, + Params.Stereobuffer ? True : False, + None, + }; + + GLXFBConfig *configList = 0; + int nitems = 0; + if (Params.AntiAlias < 2) { + visualAttrBuffer[17] = 0; + visualAttrBuffer[19] = 0; + } + // first round with unchanged values + { + configList = glxChooseFBConfig(display, screennr, visualAttrBuffer, &nitems); + if (!configList && Params.AntiAlias) { + while (!configList && (visualAttrBuffer[19] > 1)) { + visualAttrBuffer[19] -= 1; + configList = glxChooseFBConfig(display, screennr, visualAttrBuffer, &nitems); + } + if (!configList) { + visualAttrBuffer[17] = 0; + visualAttrBuffer[19] = 0; + configList = glxChooseFBConfig(display, screennr, visualAttrBuffer, &nitems); + if (configList) { + os::Printer::log("No FSAA available.", ELL_WARNING); + Params.AntiAlias = 0; + } else { + // reenable multisampling + visualAttrBuffer[17] = 1; + visualAttrBuffer[19] = Params.AntiAlias; + } + } + } + } + // Next try with flipped stencil buffer value + // If the first round was with stencil flag it's now without + // Other way round also makes sense because some configs + // only have depth buffer combined with stencil buffer + if (!configList) { + if (Params.Stencilbuffer) + os::Printer::log("No stencilbuffer available, disabling stencil shadows.", ELL_WARNING); + Params.Stencilbuffer = !Params.Stencilbuffer; + visualAttrBuffer[15] = Params.Stencilbuffer ? 1 : 0; + + configList = glxChooseFBConfig(display, screennr, visualAttrBuffer, &nitems); + if (!configList && Params.AntiAlias) { + while (!configList && (visualAttrBuffer[19] > 1)) { + visualAttrBuffer[19] -= 1; + configList = glxChooseFBConfig(display, screennr, visualAttrBuffer, &nitems); + } + if (!configList) { + visualAttrBuffer[17] = 0; + visualAttrBuffer[19] = 0; + configList = glxChooseFBConfig(display, screennr, visualAttrBuffer, &nitems); + if (configList) { + os::Printer::log("No FSAA available.", ELL_WARNING); + Params.AntiAlias = 0; + } else { + // reenable multisampling + visualAttrBuffer[17] = 1; + visualAttrBuffer[19] = Params.AntiAlias; + } + } + } + } + // Next try without double buffer + if (!configList && Params.Doublebuffer) { + os::Printer::log("No doublebuffering available.", ELL_WARNING); + Params.Doublebuffer = false; + visualAttrBuffer[13] = GLX_DONT_CARE; + Params.Stencilbuffer = false; + visualAttrBuffer[15] = 0; + configList = glxChooseFBConfig(display, screennr, visualAttrBuffer, &nitems); + if (!configList && Params.AntiAlias) { + while (!configList && (visualAttrBuffer[19] > 1)) { + visualAttrBuffer[19] -= 1; + configList = glxChooseFBConfig(display, screennr, visualAttrBuffer, &nitems); + } + if (!configList) { + visualAttrBuffer[17] = 0; + visualAttrBuffer[19] = 0; + configList = glxChooseFBConfig(display, screennr, visualAttrBuffer, &nitems); + if (configList) { + os::Printer::log("No FSAA available.", ELL_WARNING); + Params.AntiAlias = 0; + } else { + // reenable multisampling + visualAttrBuffer[17] = 1; + visualAttrBuffer[19] = Params.AntiAlias; + } + } + } + } + if (configList) { + glxFBConfig = configList[0]; + XFree(configList); + typedef XVisualInfo *(*PFNGLXGETVISUALFROMFBCONFIGPROC)(Display *dpy, GLXFBConfig config); + PFNGLXGETVISUALFROMFBCONFIGPROC glxGetVisualFromFBConfig = (PFNGLXGETVISUALFROMFBCONFIGPROC)glXGetProcAddress(reinterpret_cast("glXGetVisualFromFBConfig")); + if (glxGetVisualFromFBConfig) + VisualInfo = glxGetVisualFromFBConfig(display, (GLXFBConfig)glxFBConfig); + } + } else +#endif + { + // attribute array for the draw buffer + int visualAttrBuffer[] = { + GLX_RGBA, GLX_USE_GL, + GLX_RED_SIZE, 4, + GLX_GREEN_SIZE, 4, + GLX_BLUE_SIZE, 4, + GLX_ALPHA_SIZE, Params.WithAlphaChannel ? 1 : 0, + GLX_DEPTH_SIZE, Params.ZBufferBits, + GLX_STENCIL_SIZE, Params.Stencilbuffer ? 1 : 0, // 12,13 + // The following attributes have no flags, but are + // either present or not. As a no-op we use + // GLX_USE_GL, which is silently ignored by glXChooseVisual + Params.Doublebuffer ? GLX_DOUBLEBUFFER : GLX_USE_GL, // 14 + Params.Stereobuffer ? GLX_STEREO : GLX_USE_GL, // 15 + None, + }; + + VisualInfo = glXChooseVisual(display, screennr, visualAttrBuffer); + if (!VisualInfo) { + if (Params.Stencilbuffer) + os::Printer::log("No stencilbuffer available, disabling.", ELL_WARNING); + Params.Stencilbuffer = !Params.Stencilbuffer; + visualAttrBuffer[13] = Params.Stencilbuffer ? 1 : 0; + + VisualInfo = glXChooseVisual(display, screennr, visualAttrBuffer); + if (!VisualInfo && Params.Doublebuffer) { + os::Printer::log("No doublebuffering available.", ELL_WARNING); + Params.Doublebuffer = false; + visualAttrBuffer[14] = GLX_USE_GL; + VisualInfo = glXChooseVisual(display, screennr, visualAttrBuffer); + } + } + } + } else + os::Printer::log("No GLX support available. OpenGL driver will not work.", ELL_WARNING); +} + +CGLXManager::~CGLXManager() +{ +} + +bool CGLXManager::initialize(const SIrrlichtCreationParameters ¶ms, const SExposedVideoData &videodata) +{ + // store params + Params = params; + + // set display + CurrentContext.OpenGLLinux.X11Display = videodata.OpenGLLinux.X11Display; + + // now get new window + CurrentContext.OpenGLLinux.X11Window = videodata.OpenGLLinux.X11Window; + if (!PrimaryContext.OpenGLLinux.X11Window) { + PrimaryContext.OpenGLLinux.X11Window = CurrentContext.OpenGLLinux.X11Window; + } + + return true; +} + +void CGLXManager::terminate() +{ + memset((void *)&CurrentContext, 0, sizeof(CurrentContext)); +} + +bool CGLXManager::generateSurface() +{ + if (glxFBConfig) { + GlxWin = glXCreateWindow((Display *)CurrentContext.OpenGLLinux.X11Display, (GLXFBConfig)glxFBConfig, CurrentContext.OpenGLLinux.X11Window, NULL); + if (!GlxWin) { + os::Printer::log("Could not create GLX window.", ELL_WARNING); + return false; + } + + CurrentContext.OpenGLLinux.GLXWindow = GlxWin; + } else { + CurrentContext.OpenGLLinux.GLXWindow = CurrentContext.OpenGLLinux.X11Window; + } + return true; +} + +void CGLXManager::destroySurface() +{ + if (GlxWin) + glXDestroyWindow((Display *)CurrentContext.OpenGLLinux.X11Display, GlxWin); +} + +#if defined(GLX_ARB_create_context) +static int IrrIgnoreError(Display *display, XErrorEvent *event) +{ + char msg[256]; + XGetErrorText(display, event->error_code, msg, 256); + os::Printer::log("Ignoring an X error", msg, ELL_DEBUG); + return 0; +} +#endif + +bool CGLXManager::generateContext() +{ + GLXContext context = 0; + + if (glxFBConfig) { + if (GlxWin) { +#if defined(GLX_ARB_create_context) + + PFNGLXCREATECONTEXTATTRIBSARBPROC glxCreateContextAttribsARB = (PFNGLXCREATECONTEXTATTRIBSARBPROC)glXGetProcAddress(reinterpret_cast("glXCreateContextAttribsARB")); + + if (glxCreateContextAttribsARB) { + os::Printer::log("GLX with GLX_ARB_create_context", ELL_DEBUG); + int contextAttrBuffer[] = { + GLX_CONTEXT_MAJOR_VERSION_ARB, 3, + GLX_CONTEXT_MINOR_VERSION_ARB, 0, + // GLX_CONTEXT_PROFILE_MASK_ARB, GLX_CONTEXT_CORE_PROFILE_BIT_ARB, + None}; + XErrorHandler old = XSetErrorHandler(IrrIgnoreError); + context = glxCreateContextAttribsARB((Display *)CurrentContext.OpenGLLinux.X11Display, (GLXFBConfig)glxFBConfig, NULL, True, contextAttrBuffer); + XSetErrorHandler(old); + // transparently fall back to legacy call + } + if (!context) +#endif + { + // create glx context + context = glXCreateNewContext((Display *)CurrentContext.OpenGLLinux.X11Display, (GLXFBConfig)glxFBConfig, GLX_RGBA_TYPE, NULL, True); + if (!context) { + os::Printer::log("Could not create GLX rendering context.", ELL_WARNING); + return false; + } + } + } else { + os::Printer::log("GLX window was not properly created.", ELL_WARNING); + return false; + } + } else { + context = glXCreateContext((Display *)CurrentContext.OpenGLLinux.X11Display, VisualInfo, NULL, True); + if (!context) { + os::Printer::log("Could not create GLX rendering context.", ELL_WARNING); + return false; + } + } + CurrentContext.OpenGLLinux.X11Context = context; + return true; +} + +const SExposedVideoData &CGLXManager::getContext() const +{ + return CurrentContext; +} + +bool CGLXManager::activateContext(const SExposedVideoData &videoData, bool restorePrimaryOnZero) +{ + // TODO: handle restorePrimaryOnZero + + if (videoData.OpenGLLinux.X11Window) { + if (videoData.OpenGLLinux.X11Display && videoData.OpenGLLinux.X11Context) { + if (!glXMakeCurrent((Display *)videoData.OpenGLLinux.X11Display, videoData.OpenGLLinux.GLXWindow, (GLXContext)videoData.OpenGLLinux.X11Context)) { + os::Printer::log("Context activation failed."); + return false; + } else { + CurrentContext.OpenGLLinux.GLXWindow = videoData.OpenGLLinux.GLXWindow; + CurrentContext.OpenGLLinux.X11Window = videoData.OpenGLLinux.X11Window; + CurrentContext.OpenGLLinux.X11Display = videoData.OpenGLLinux.X11Display; + } + } else { + // in case we only got a window ID, try with the existing values for display and context + if (!glXMakeCurrent((Display *)PrimaryContext.OpenGLLinux.X11Display, videoData.OpenGLLinux.GLXWindow, (GLXContext)PrimaryContext.OpenGLLinux.X11Context)) { + os::Printer::log("Context activation failed."); + return false; + } else { + CurrentContext.OpenGLLinux.GLXWindow = videoData.OpenGLLinux.GLXWindow; + CurrentContext.OpenGLLinux.X11Window = videoData.OpenGLLinux.X11Window; + CurrentContext.OpenGLLinux.X11Display = PrimaryContext.OpenGLLinux.X11Display; + } + } + } else if (!restorePrimaryOnZero && !videoData.OpenGLLinux.X11Window && !videoData.OpenGLLinux.X11Display) { + if (!glXMakeCurrent((Display *)PrimaryContext.OpenGLLinux.X11Display, None, NULL)) { + os::Printer::log("Render Context reset failed."); + return false; + } + CurrentContext.OpenGLLinux.X11Window = 0; + CurrentContext.OpenGLLinux.X11Display = 0; + } + // set back to main context + else if (CurrentContext.OpenGLLinux.X11Display != PrimaryContext.OpenGLLinux.X11Display) { + if (!glXMakeCurrent((Display *)PrimaryContext.OpenGLLinux.X11Display, PrimaryContext.OpenGLLinux.X11Window, (GLXContext)PrimaryContext.OpenGLLinux.X11Context)) { + os::Printer::log("Context activation failed."); + return false; + } else { + CurrentContext = PrimaryContext; + } + } + return true; +} + +void CGLXManager::destroyContext() +{ + if (CurrentContext.OpenGLLinux.X11Context) { + if (GlxWin) { + if (!glXMakeContextCurrent((Display *)CurrentContext.OpenGLLinux.X11Display, None, None, NULL)) + os::Printer::log("Could not release glx context.", ELL_WARNING); + } else { + if (!glXMakeCurrent((Display *)CurrentContext.OpenGLLinux.X11Display, None, NULL)) + os::Printer::log("Could not release glx context.", ELL_WARNING); + } + glXDestroyContext((Display *)CurrentContext.OpenGLLinux.X11Display, (GLXContext)CurrentContext.OpenGLLinux.X11Context); + } +} + +void *CGLXManager::getProcAddress(const std::string &procName) +{ + return (void *)glXGetProcAddressARB(reinterpret_cast(procName.c_str())); +} + +bool CGLXManager::swapBuffers() +{ + glXSwapBuffers((Display *)CurrentContext.OpenGLLinux.X11Display, CurrentContext.OpenGLLinux.GLXWindow); + return true; +} + +} +} + +#endif diff --git a/irr/src/CGLXManager.h b/irr/src/CGLXManager.h new file mode 100644 index 000000000..f940d4316 --- /dev/null +++ b/irr/src/CGLXManager.h @@ -0,0 +1,76 @@ +// Copyright (C) 2013 Christian Stehno +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in Irrlicht.h + +#pragma once + +#ifdef _IRR_COMPILE_WITH_GLX_MANAGER_ + +#include "SIrrCreationParameters.h" +#include "SExposedVideoData.h" +#include "IContextManager.h" +#include "SColor.h" +#include +#include + +// we can't include glx.h here, because gl.h has incompatible types with ogl es headers and it +// cause redefinition errors, thats why we use ugly trick with void* types and casts. + +namespace irr +{ +namespace video +{ +// GLX manager. +class CGLXManager : public IContextManager +{ +public: + //! Constructor. + CGLXManager(const SIrrlichtCreationParameters ¶ms, const SExposedVideoData &videodata, int screennr); + + //! Destructor + ~CGLXManager(); + + // Initialize + bool initialize(const SIrrlichtCreationParameters ¶ms, const SExposedVideoData &data) override; + + // Terminate + void terminate() override; + + // Create surface. + bool generateSurface() override; + + // Destroy surface. + void destroySurface() override; + + // Create context. + bool generateContext() override; + + // Destroy context. + void destroyContext() override; + + //! Get current context + const SExposedVideoData &getContext() const override; + + //! Change render context, disable old and activate new defined by videoData + bool activateContext(const SExposedVideoData &videoData, bool restorePrimaryOnZero) override; + + // Get procedure address. + void *getProcAddress(const std::string &procName) override; + + // Swap buffers. + bool swapBuffers() override; + + XVisualInfo *getVisual() const { return VisualInfo; } // return XVisualInfo + +private: + SIrrlichtCreationParameters Params; + SExposedVideoData PrimaryContext; + SExposedVideoData CurrentContext; + XVisualInfo *VisualInfo; + void *glxFBConfig; // GLXFBConfig + XID GlxWin; // GLXWindow +}; +} +} + +#endif diff --git a/irr/src/CIrrDeviceLinux.cpp b/irr/src/CIrrDeviceLinux.cpp index bb6968f03..c00f52380 100644 --- a/irr/src/CIrrDeviceLinux.cpp +++ b/irr/src/CIrrDeviceLinux.cpp @@ -34,10 +34,14 @@ #include #endif -#if defined(_IRR_COMPILE_WITH_OPENGL_) || defined(_IRR_COMPILE_WITH_OGLES2_) +#if defined(_IRR_COMPILE_WITH_OGLES2_) #include "CEGLManager.h" #endif +#if defined(_IRR_COMPILE_WITH_OPENGL_) +#include "CGLXManager.h" +#endif + #ifdef _IRR_LINUX_XCURSOR_ #include #endif @@ -148,20 +152,8 @@ CIrrDeviceLinux::CIrrDeviceLinux(const SIrrlichtCreationParameters ¶m) : // without it, multi-threaded GL drivers may crash XInitThreads(); + // create window if (CreationParams.DriverType != video::EDT_NULL) { - // initialize EGL so it can choose a config -#ifdef _IRR_COMPILE_WITH_X11_ -#if defined(_IRR_COMPILE_WITH_OPENGL_) || defined(_IRR_COMPILE_WITH_OGLES2_) - video::SExposedVideoData data; - data.OpenGLLinux.X11Window = 0; // not created yet, but that's ok - data.OpenGLLinux.X11Display = XDisplay; - - ContextManager = new video::CEGLManager(); - if (!ContextManager->initialize(CreationParams, data)) - return; -#endif -#endif - // create the window, only if we do not use the null device if (!createWindow()) return; @@ -405,14 +397,14 @@ bool CIrrDeviceLinux::createWindow() if (WMCheck != None) HasNetWM = true; -#if defined(_IRR_COMPILE_WITH_OPENGL_) || defined(_IRR_COMPILE_WITH_OGLES2_) - if (ContextManager) { - auto *c = static_cast(ContextManager); - os::Printer::log("Using X visual from EGL"); - XVisualInfo templ; - int n; - templ.visualid = static_cast(c->getNativeVisualID()); - VisualInfo = XGetVisualInfo(XDisplay, VisualIDMask, &templ, &n); +#if defined(_IRR_COMPILE_WITH_OPENGL_) + // don't use the XVisual with OpenGL, because it ignores all requested + // properties of the CreationParams + if (CreationParams.DriverType == video::EDT_OPENGL) { + video::SExposedVideoData data; + data.OpenGLLinux.X11Display = XDisplay; + ContextManager = new video::CGLXManager(CreationParams, data, Screennr); + VisualInfo = ((video::CGLXManager *)ContextManager)->getVisual(); } #endif @@ -551,7 +543,9 @@ void CIrrDeviceLinux::createDriver() { video::SExposedVideoData data; data.OpenGLLinux.X11Window = XWindow; - static_cast(ContextManager)->setWindow(data); + data.OpenGLLinux.X11Display = XDisplay; + + ContextManager->initialize(CreationParams, data); VideoDriver = video::createOpenGLDriver(CreationParams, FileSystem, ContextManager); } @@ -564,7 +558,10 @@ void CIrrDeviceLinux::createDriver() { video::SExposedVideoData data; data.OpenGLLinux.X11Window = XWindow; - static_cast(ContextManager)->setWindow(data); + data.OpenGLLinux.X11Display = XDisplay; + + ContextManager = new video::CEGLManager(); + ContextManager->initialize(CreationParams, data); VideoDriver = video::createOGLES2Driver(CreationParams, FileSystem, ContextManager); } @@ -577,7 +574,10 @@ void CIrrDeviceLinux::createDriver() { video::SExposedVideoData data; data.OpenGLLinux.X11Window = XWindow; - static_cast(ContextManager)->setWindow(data); + data.OpenGLLinux.X11Display = XDisplay; + + ContextManager = new video::CEGLManager(); + ContextManager->initialize(CreationParams, data); VideoDriver = video::createWebGL1Driver(CreationParams, FileSystem, ContextManager); } diff --git a/irr/src/CMakeLists.txt b/irr/src/CMakeLists.txt index a31f0790d..768ee8d37 100644 --- a/irr/src/CMakeLists.txt +++ b/irr/src/CMakeLists.txt @@ -158,7 +158,7 @@ if(ENABLE_OPENGL) if(DEVICE STREQUAL "WINDOWS") add_definitions(-D_IRR_COMPILE_WITH_WGL_MANAGER_) elseif(DEVICE STREQUAL "X11") - add_definitions(-D_IRR_COMPILE_WITH_EGL_MANAGER_) + add_definitions(-D_IRR_COMPILE_WITH_GLX_MANAGER_) elseif(DEVICE STREQUAL "OSX") add_definitions(-D_IRR_COMPILE_WITH_NSOGL_MANAGER_) endif() @@ -213,15 +213,7 @@ if(ENABLE_GLES2) find_package(OpenGLES2 REQUIRED) endif() if(ENABLE_OPENGL) - if(DEVICE STREQUAL "X11") - # use components so we can grab EGL - find_package(OpenGL REQUIRED COMPONENTS EGL OpenGL) - set(OPENGL_LIBRARIES OpenGL::GL) - set(EGL_INCLUDE_DIR OpenGL::EGL) - set(EGL_LIBRARY OpenGL::EGL) - else() - find_package(OpenGL REQUIRED) - endif() + find_package(OpenGL REQUIRED) endif() if(USE_SDL2) if(NOT ANDROID) @@ -338,6 +330,7 @@ target_link_libraries(IRROBJ PRIVATE IRRMESHOBJ) set(IRRDRVROBJ CNullDriver.cpp + CGLXManager.cpp CWGLManager.cpp CEGLManager.cpp CSDLManager.cpp From 3f306a407c5efde4640aaee57acadd10ec84f329 Mon Sep 17 00:00:00 2001 From: DS Date: Thu, 24 Oct 2024 17:52:27 +0200 Subject: [PATCH 038/178] `core.after`: Improve documentation details about how `time` is handled (#15316) --- doc/lua_api.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/doc/lua_api.md b/doc/lua_api.md index f886e1097..c4fba1aa4 100644 --- a/doc/lua_api.md +++ b/doc/lua_api.md @@ -6923,6 +6923,14 @@ Timing * Optional: Variable number of arguments that are passed to `func` * Jobs set for earlier times are executed earlier. If multiple jobs expire at exactly the same time, then they are executed in registration order. + * `time` is a lower bound. The job is executed in the first server-step that + started at least `time` seconds after the last time a server-step started, + measured with globalstep dtime. + * In particular this can result in relatively large delays if `time` is close + to the server-step dtime. For example, with a target server-step of 0.09 s, + `core.after(0.09, ...)` often waits two steps, resulting in a delay of about + 0.18 s. + * If `time` is `0`, the job is executed in the next step. * `job:cancel()` * Cancels the job function from being called From c3b5cc8611497e6e49cd1b9699ac4cd6f5771880 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=86lla=20Chiana=20Moskopp?= Date: Fri, 25 Oct 2024 16:04:19 +0200 Subject: [PATCH 039/178] Rename erle in credits (as requested by them) --- .mailmap | 1 + LICENSE.txt | 4 ++-- builtin/mainmenu/credits.json | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.mailmap b/.mailmap index 164c285c0..c3467f4b6 100644 --- a/.mailmap +++ b/.mailmap @@ -72,3 +72,4 @@ Lars Müller Lars Müller <34514239+appgurueu@users.noreply.github.com> ROllerozxa ROllerozxa +Ælla Chiana Moskopp diff --git a/LICENSE.txt b/LICENSE.txt index 03ca35100..2308f8d16 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -39,7 +39,7 @@ rubenwardy, paramat: textures/base/pack/start_icon.png textures/base/pack/end_icon.png -erlehmann: +erle: misc/minetest-icon-24x24.png misc/minetest-icon.ico misc/minetest.svg @@ -68,7 +68,7 @@ Zughy: appgurueu: textures/base/pack/server_incompatible.png -erlehmann, Warr1024, rollerozxa: +erle, Warr1024, rollerozxa: textures/base/pack/no_screenshot.png kilbith: diff --git a/builtin/mainmenu/credits.json b/builtin/mainmenu/credits.json index 261cf5407..f128d3695 100644 --- a/builtin/mainmenu/credits.json +++ b/builtin/mainmenu/credits.json @@ -64,7 +64,7 @@ "superfloh247" ], "previous_contributors": [ - "Nils Dagsson Moskopp (erlehmann) [Minetest logo]", + "Ælla Chiana Moskopp (erle) [Minetest logo]", "red-001 ", "Giuseppe Bilotta", "HybridDog", From cb6c8eb2f013edfe127ce18f760c432aee5aba01 Mon Sep 17 00:00:00 2001 From: Erich Schubert Date: Sat, 26 Oct 2024 17:39:45 +0200 Subject: [PATCH 040/178] Fix collisions with long dtime, in particular with bouncing (#15029) --- src/collision.cpp | 273 +++++++++++++++++++++++++--------------------- 1 file changed, 146 insertions(+), 127 deletions(-) diff --git a/src/collision.cpp b/src/collision.cpp index 47a03fba9..0ef48830d 100644 --- a/src/collision.cpp +++ b/src/collision.cpp @@ -85,6 +85,14 @@ inline v3f truncate(const v3f vec, const f32 factor) ); } +inline v3f rangelimv(const v3f vec, const f32 low, const f32 high) +{ + return v3f( + rangelim(vec.X, low, high), + rangelim(vec.Y, low, high), + rangelim(vec.Z, low, high) + ); +} } // Helper function: @@ -348,6 +356,10 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef, collisionMoveResult result; + // Assume no collisions when no velocity and no acceleration + if (*speed_f == v3f() && accel_f == v3f()) + return result; + /* Calculate new velocity */ @@ -362,30 +374,19 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef, time_notification_done = false; } - v3f dpos_f = (*speed_f + accel_f * 0.5f * dtime) * dtime; - v3f newpos_f = *pos_f + dpos_f; - *speed_f += accel_f * dtime; - - // If the object is static, there are no collisions - if (dpos_f == v3f()) - return result; - + // Average speed + v3f aspeed_f = *speed_f + accel_f * 0.5f * dtime; // Limit speed for avoiding hangs - speed_f->Y = rangelim(speed_f->Y, -5000, 5000); - speed_f->X = rangelim(speed_f->X, -5000, 5000); - speed_f->Z = rangelim(speed_f->Z, -5000, 5000); + aspeed_f = truncate(rangelimv(aspeed_f, -5000.0f, 5000.0f), 10000.0f); - *speed_f = truncate(*speed_f, 10000.0f); - - /* - Collect node boxes in movement range - */ + // Collect node boxes in movement range // cached allocation thread_local std::vector cinfo; cinfo.clear(); - { + // Movement if no collisions + v3f newpos_f = *pos_f + aspeed_f * dtime; v3f minpos_f( MYMIN(pos_f->X, newpos_f.X), MYMIN(pos_f->Y, newpos_f.Y) + 0.01f * BS, // bias rounding, player often at +/-n.5 @@ -411,26 +412,16 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef, } } - /* - Collect object boxes in movement range - */ + // Collect object boxes in movement range if (collide_with_objects) { - add_object_boxes(env, box_0, dtime, *pos_f, *speed_f, self, cinfo); - } - - /* - Collision detection - */ + add_object_boxes(env, box_0, dtime, *pos_f, aspeed_f, self, cinfo); + } + // Collision detection f32 d = 0.0f; - - int loopcount = 0; - - while(dtime > BS * 1e-10f) { - // Avoid infinite loop - loopcount++; + for (int loopcount = 0;; loopcount++) { if (loopcount >= 100) { - warningstream << "collisionMoveSimple: Loop count exceeded, aborting to avoid infiniite loop" << std::endl; + warningstream << "collisionMoveSimple: Loop count exceeded, aborting to avoid infinite loop" << std::endl; break; } @@ -442,9 +433,7 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef, f32 nearest_dtime = dtime; int nearest_boxindex = -1; - /* - Go through every nodebox, find nearest collision - */ + // Go through every nodebox, find nearest collision for (u32 boxindex = 0; boxindex < cinfo.size(); boxindex++) { const NearbyCollisionInfo &box_info = cinfo[boxindex]; // Ignore if already stepped up this nodebox. @@ -454,8 +443,7 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef, // Find nearest collision of the two boxes (raytracing-like) f32 dtime_tmp = nearest_dtime; CollisionAxis collided = axisAlignedCollision(box_info.box, - movingbox, *speed_f, &dtime_tmp); - + movingbox, aspeed_f, &dtime_tmp); if (collided == -1 || dtime_tmp >= nearest_dtime) continue; @@ -466,96 +454,127 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef, if (nearest_collided == COLLISION_AXIS_NONE) { // No collision with any collision box. - *pos_f += truncate(*speed_f * dtime, 100.0f); - dtime = 0; // Set to 0 to avoid "infinite" loop due to small FP numbers - } else { - // Otherwise, a collision occurred. - NearbyCollisionInfo &nearest_info = cinfo[nearest_boxindex]; - const aabb3f& cbox = nearest_info.box; - - //movingbox except moved to the horizontal position it would be after step up - aabb3f stepbox = movingbox; - stepbox.MinEdge.X += speed_f->X * dtime; - stepbox.MinEdge.Z += speed_f->Z * dtime; - stepbox.MaxEdge.X += speed_f->X * dtime; - stepbox.MaxEdge.Z += speed_f->Z * dtime; - // Check for stairs. - bool step_up = (nearest_collided != COLLISION_AXIS_Y) && // must not be Y direction - (movingbox.MinEdge.Y < cbox.MaxEdge.Y) && - (movingbox.MinEdge.Y + stepheight > cbox.MaxEdge.Y) && - (!wouldCollideWithCeiling(cinfo, stepbox, - cbox.MaxEdge.Y - movingbox.MinEdge.Y, - d)); - - // Get bounce multiplier - float bounce = -(float)nearest_info.bouncy / 100.0f; - - // Move to the point of collision and reduce dtime by nearest_dtime - if (nearest_dtime < 0) { - // Handle negative nearest_dtime - if (!step_up) { - if (nearest_collided == COLLISION_AXIS_X) - pos_f->X += speed_f->X * nearest_dtime; - if (nearest_collided == COLLISION_AXIS_Y) - pos_f->Y += speed_f->Y * nearest_dtime; - if (nearest_collided == COLLISION_AXIS_Z) - pos_f->Z += speed_f->Z * nearest_dtime; - } - } else { - *pos_f += truncate(*speed_f * nearest_dtime, 100.0f); - dtime -= nearest_dtime; - } - - bool is_collision = true; - if (nearest_info.is_unloaded) - is_collision = false; - - CollisionInfo info; - if (nearest_info.isObject()) - info.type = COLLISION_OBJECT; - else - info.type = COLLISION_NODE; - - info.node_p = nearest_info.position; - info.object = nearest_info.obj; - info.new_pos = *pos_f; - info.old_speed = *speed_f; - info.plane = nearest_collided; - - // Set the speed component that caused the collision to zero - if (step_up) { - // Special case: Handle stairs - nearest_info.is_step_up = true; - is_collision = false; - } else if (nearest_collided == COLLISION_AXIS_X) { - if (fabs(speed_f->X) > BS * 3) - speed_f->X *= bounce; - else - speed_f->X = 0; - result.collides = true; - } else if (nearest_collided == COLLISION_AXIS_Y) { - if(fabs(speed_f->Y) > BS * 3) - speed_f->Y *= bounce; - else - speed_f->Y = 0; - result.collides = true; - } else if (nearest_collided == COLLISION_AXIS_Z) { - if (fabs(speed_f->Z) > BS * 3) - speed_f->Z *= bounce; - else - speed_f->Z = 0; - result.collides = true; - } - - info.new_speed = *speed_f; - if (info.new_speed.getDistanceFrom(info.old_speed) < 0.1f * BS) - is_collision = false; - - if (is_collision) { - info.axis = nearest_collided; - result.collisions.push_back(std::move(info)); - } + *pos_f += truncate(aspeed_f * dtime, 100.0f); + // Final speed: + *speed_f += accel_f * dtime; + // Limit speed for avoiding hangs + *speed_f = truncate(rangelimv(*speed_f, -5000.0f, 5000.0f), 10000.0f); + break; } + // Otherwise, a collision occurred. + NearbyCollisionInfo &nearest_info = cinfo[nearest_boxindex]; + const aabb3f& cbox = nearest_info.box; + + //movingbox except moved to the horizontal position it would be after step up + bool step_up = false; + if (nearest_collided != COLLISION_AXIS_Y) { + aabb3f stepbox = movingbox; + // Look slightly ahead for checking the height when stepping + // to ensure we also check above the node we collided with + // otherwise, might allow glitches such as a stack of stairs + float extra_dtime = nearest_dtime + 0.1f * fabsf(dtime - nearest_dtime); + stepbox.MinEdge.X += aspeed_f.X * extra_dtime; + stepbox.MinEdge.Z += aspeed_f.Z * extra_dtime; + stepbox.MaxEdge.X += aspeed_f.X * extra_dtime; + stepbox.MaxEdge.Z += aspeed_f.Z * extra_dtime; + // Check for stairs. + step_up = (movingbox.MinEdge.Y < cbox.MaxEdge.Y) && + (movingbox.MinEdge.Y + stepheight > cbox.MaxEdge.Y) && + (!wouldCollideWithCeiling(cinfo, stepbox, + cbox.MaxEdge.Y - movingbox.MinEdge.Y, + d)); + } + + // Get bounce multiplier + float bounce = -(float)nearest_info.bouncy / 100.0f; + + // Move to the point of collision and reduce dtime by nearest_dtime + if (nearest_dtime < 0) { + // Handle negative nearest_dtime + // This largely means an "instant" collision, e.g., with the floor. + // We use aspeed and nearest_dtime to be consistent with above and resolve this collision + if (!step_up) { + if (nearest_collided == COLLISION_AXIS_X) + pos_f->X += aspeed_f.X * nearest_dtime; + if (nearest_collided == COLLISION_AXIS_Y) + pos_f->Y += aspeed_f.Y * nearest_dtime; + if (nearest_collided == COLLISION_AXIS_Z) + pos_f->Z += aspeed_f.Z * nearest_dtime; + } + } else if (nearest_dtime > 0) { + // updated average speed for the sub-interval up to nearest_dtime + aspeed_f = *speed_f + accel_f * 0.5f * nearest_dtime; + *pos_f += truncate(aspeed_f * nearest_dtime, 100.0f); + // Speed at (approximated) collision: + *speed_f += accel_f * nearest_dtime; + // Limit speed for avoiding hangs + *speed_f = truncate(rangelimv(*speed_f, -5000.0f, 5000.0f), 10000.0f); + dtime -= nearest_dtime; + } + + bool is_collision = true; + if (nearest_info.is_unloaded) + is_collision = false; + + CollisionInfo info; + if (nearest_info.isObject()) + info.type = COLLISION_OBJECT; + else + info.type = COLLISION_NODE; + + info.node_p = nearest_info.position; + info.object = nearest_info.obj; + info.new_pos = *pos_f; + info.old_speed = *speed_f; + info.plane = nearest_collided; + + // Set the speed component that caused the collision to zero + if (step_up) { + // Special case: Handle stairs + nearest_info.is_step_up = true; + is_collision = false; + } else if (nearest_collided == COLLISION_AXIS_X) { + if (bounce < -1e-4 && fabsf(speed_f->X) > BS * 3) { + speed_f->X *= bounce; + } else { + speed_f->X = 0; + accel_f.X = 0; + } + result.collides = true; + } else if (nearest_collided == COLLISION_AXIS_Y) { + if(bounce < -1e-4 && fabsf(speed_f->Y) > BS * 3) { + speed_f->Y *= bounce; + } else { + speed_f->Y = 0; + accel_f.Y = 0; + } + result.collides = true; + } else if (nearest_collided == COLLISION_AXIS_Z) { + if (bounce < -1e-4 && fabsf(speed_f->Z) > BS * 3) { + speed_f->Z *= bounce; + } else { + speed_f->Z = 0; + accel_f.Z = 0; + } + result.collides = true; + } + + info.new_speed = *speed_f; + if (info.new_speed.getDistanceFrom(info.old_speed) < 0.1f * BS) + is_collision = false; + + if (is_collision) { + info.axis = nearest_collided; + result.collisions.push_back(info); + } + + if (dtime < BS * 1e-10f) + break; + + // Speed for finding the next collision + aspeed_f = *speed_f + accel_f * 0.5f * dtime; + // Limit speed for avoiding hangs + aspeed_f = truncate(rangelimv(aspeed_f, -5000.0f, 5000.0f), 10000.0f); } /* From 6ead789509ee6635bcb21fd9ac6e1d043505fc94 Mon Sep 17 00:00:00 2001 From: BoySanic Date: Sat, 26 Oct 2024 08:40:11 -0700 Subject: [PATCH 041/178] Update documentation to reflect player constant values (#15308) Co-authored-by: grorp --- doc/lua_api.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/doc/lua_api.md b/doc/lua_api.md index c4fba1aa4..e93e18c2a 100644 --- a/doc/lua_api.md +++ b/doc/lua_api.md @@ -9106,12 +9106,14 @@ Player properties need to be saved manually. ```lua { hp_max = 10, - -- Defines the maximum and default HP of the entity - -- For Lua entities the maximum is not enforced. - -- For players this defaults to `core.PLAYER_MAX_HP_DEFAULT`. + -- Defines the maximum and default HP of the object. + -- For Lua entities, the maximum is not enforced. + -- For players, this defaults to `core.PLAYER_MAX_HP_DEFAULT` (20). + -- For Lua entities, the default is 10. breath_max = 0, - -- For players only. Defaults to `core.PLAYER_MAX_BREATH_DEFAULT`. + -- For players only. Defines the maximum amount of "breath" for the player. + -- Defaults to `core.PLAYER_MAX_BREATH_DEFAULT` (10). zoom_fov = 0.0, -- For players only. Zoom FOV in degrees. From 4deb5b999c9b9481b8fcd9783849f01164249373 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Sat, 26 Oct 2024 17:40:29 +0200 Subject: [PATCH 042/178] DevTest: Change "Minetest" to "DevTest" (#15326) --- games/devtest/LICENSE.txt | 2 +- games/devtest/game.conf | 2 +- games/devtest/mods/broken/init.lua | 2 +- games/devtest/mods/testnodes/drawtypes.lua | 2 +- games/devtest/mods/testnodes/textures.lua | 8 ++++---- games/devtest/mods/testpathfinder/mod.conf | 2 +- games/devtest/mods/unittests/crafting.lua | 2 +- 7 files changed, 10 insertions(+), 10 deletions(-) diff --git a/games/devtest/LICENSE.txt b/games/devtest/LICENSE.txt index 71bd0e596..a76b0a17e 100644 --- a/games/devtest/LICENSE.txt +++ b/games/devtest/LICENSE.txt @@ -1,4 +1,4 @@ License information for Development Test ---------------------------------------- -The same license as for Minetest applies. +The same license as for Luanti applies. diff --git a/games/devtest/game.conf b/games/devtest/game.conf index 8184881a2..e79cc9489 100644 --- a/games/devtest/game.conf +++ b/games/devtest/game.conf @@ -1,4 +1,4 @@ title = Development Test -description = Testing environment to help with testing the engine features of Minetest. It can also be helpful in mod development. +description = Testing environment to help with testing the engine features of Luanti. It can also be helpful in mod development. first_mod = first_mod last_mod = last_mod diff --git a/games/devtest/mods/broken/init.lua b/games/devtest/mods/broken/init.lua index 04993ca16..7bbf49856 100644 --- a/games/devtest/mods/broken/init.lua +++ b/games/devtest/mods/broken/init.lua @@ -1,4 +1,4 @@ --- Register stuff with empty definitions to test if Minetest fallback options +-- Register stuff with empty definitions to test if Luanti fallback options -- for these things work properly. -- The itemstrings are deliberately kept descriptive to keep them easy to diff --git a/games/devtest/mods/testnodes/drawtypes.lua b/games/devtest/mods/testnodes/drawtypes.lua index 4a657b739..06bafbc24 100644 --- a/games/devtest/mods/testnodes/drawtypes.lua +++ b/games/devtest/mods/testnodes/drawtypes.lua @@ -1,5 +1,5 @@ --[[ Drawtype Test: This file tests out and provides examples for -all drawtypes in Minetest. It is attempted to keep the node +all drawtypes in Luanti. It is attempted to keep the node definitions as simple and minimal as possible to keep side-effects to a minimum. diff --git a/games/devtest/mods/testnodes/textures.lua b/games/devtest/mods/testnodes/textures.lua index b95fbd62e..c0eefcf3c 100644 --- a/games/devtest/mods/testnodes/textures.lua +++ b/games/devtest/mods/testnodes/textures.lua @@ -255,17 +255,17 @@ data_ck = nil The following nodes can be used to demonstrate the TGA format support. -Minetest supports TGA types 1, 2, 3 & 10. While adding the support for +Luanti supports TGA types 1, 2, 3 & 10. While adding the support for TGA type 9 (RLE-compressed, color-mapped) is easy, it is not advisable -to do so, as it is not backwards compatible with any Minetest pre-5.5; +to do so, as it is not backwards compatible with any engine version pre-5.5; content creators should therefore either use TGA type 1 or 10, or PNG. TODO: Types 1, 2 & 10 should have two test nodes each (i.e. bottom-top and top-bottom) for 16bpp (A1R5G5B5), 24bpp (B8G8R8), 32bpp (B8G8R8A8) colors. -Note: Minetest requires the optional TGA footer for a texture to load. -If a TGA image does not load in Minetest, append eight (8) null bytes, +Note: Luanti requires the optional TGA footer for a texture to load. +If a TGA image does not load in Luanti, append eight (8) null bytes, then the string “TRUEVISION-XFILE.”, then another null byte. ]]-- diff --git a/games/devtest/mods/testpathfinder/mod.conf b/games/devtest/mods/testpathfinder/mod.conf index e6034ae8c..6b2c0e355 100644 --- a/games/devtest/mods/testpathfinder/mod.conf +++ b/games/devtest/mods/testpathfinder/mod.conf @@ -1,2 +1,2 @@ name = testpathfinder -description = Tool to test Minetest's pathfinder function +description = Tool to test Luanti's pathfinder function diff --git a/games/devtest/mods/unittests/crafting.lua b/games/devtest/mods/unittests/crafting.lua index 8c16d3efb..d5ffc2e1f 100644 --- a/games/devtest/mods/unittests/crafting.lua +++ b/games/devtest/mods/unittests/crafting.lua @@ -87,7 +87,7 @@ local function test_get_craft_result() minetest.log("info", "[unittests] repairable tool crafting output.item:to_table(): "..dump(output.item:to_table())) assert(output.item:get_name() == "unittests:repairable_tool") -- Test the wear value. - -- See src/craftdef.cpp in Minetest source code for the formula. The formula to calculate + -- See src/craftdef.cpp in Luanti source code for the formula. The formula to calculate -- the value 51187 is: -- 65536 - ((65536-60000)+(65536-60000)) + floor(additonal_wear * 65536 + 0.5) = 51187 -- where additional_wear = 0.05 From b7073df68cc9ca89e62a2b97c5fbb23cd1454bdf Mon Sep 17 00:00:00 2001 From: cx384 Date: Sat, 26 Oct 2024 17:40:39 +0200 Subject: [PATCH 043/178] Move hud_hotbar_max_width setting to HUD section (#15335) --- builtin/settingtypes.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/builtin/settingtypes.txt b/builtin/settingtypes.txt index 99bfe9ca9..08902521e 100644 --- a/builtin/settingtypes.txt +++ b/builtin/settingtypes.txt @@ -730,6 +730,10 @@ show_debug (Show debug info) bool false # Radius to use when the block bounds HUD feature is set to near blocks. show_block_bounds_radius_near (Block bounds HUD radius) int 4 0 1000 +# Maximum proportion of current window to be used for hotbar. +# Useful if there's something to be displayed right or left of hotbar. +hud_hotbar_max_width (Maximum hotbar width) float 1.0 0.001 1.0 + [**Chat] # Maximum number of recent chat messages to show @@ -744,10 +748,6 @@ console_color (Console color) string (0,0,0) # In-game chat console background alpha (opaqueness, between 0 and 255). console_alpha (Console alpha) int 200 0 255 -# Maximum proportion of current window to be used for hotbar. -# Useful if there's something to be displayed right or left of hotbar. -hud_hotbar_max_width (Maximum hotbar width) float 1.0 0.001 1.0 - # Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console output. clickable_chat_weblinks (Chat weblinks) bool true From 4b90e582b42c4881860100b10a9572d8d33a39da Mon Sep 17 00:00:00 2001 From: grorp Date: Sun, 27 Oct 2024 14:04:51 +0100 Subject: [PATCH 044/178] Rename to Luanti (#15294) The new header intentionally isn't in MTG stone design (or any other MTG-esque design), since we want to distance Luanti and MTG from each other. The font "undefined medium" (https://undefined-medium.com/) was used. ASCII art generated by https://patorjk.com/software/taag/#p=display&f=Graffiti&t=luanti https://github.com/minetest/minetest/pull/11952#issuecomment-1013364703 --------- Co-authored-by: sfan5 --- .github/CONTRIBUTING.md | 2 +- .github/workflows/android.yml | 10 ++--- .github/workflows/docker_image.yml | 6 +-- .github/workflows/linux.yml | 10 ++--- .github/workflows/macos.yml | 4 +- .github/workflows/windows.yml | 10 ++--- CMakeLists.txt | 20 ++++----- Dockerfile | 38 +++++++++--------- LICENSE.txt | 23 ++++++----- android/app/build.gradle | 6 +-- android/app/src/main/AndroidManifest.xml | 3 -- .../net/minetest/minetest/GameActivity.java | 4 +- .../net/minetest/minetest/UnzipService.java | 2 +- android/app/src/main/res/values/strings.xml | 6 +-- android/settings.gradle | 2 +- builtin/mainmenu/content/dlg_contentdb.lua | 2 +- builtin/mainmenu/credits.json | 2 +- builtin/mainmenu/tab_about.lua | 2 +- builtin/mainmenu/tab_local.lua | 4 +- ...estAndroidLibs.cmake => AndroidLibs.cmake} | 0 cmake/Modules/FindGettextLib.cmake | 2 +- doc/{minetest.6 => luanti.6} | 17 +++----- doc/luantiserver.6 | 2 + doc/minetestserver.6 | 2 - doc/mkdocs/docs/img/favicon.ico | 2 +- irr/src/CIrrDeviceLinux.cpp | 6 +-- irr/src/CIrrDeviceSDL.cpp | 2 +- irr/src/CMakeLists.txt | 2 +- misc/AppImageBuilder.yml | 10 ++--- misc/Info.plist | 10 ++--- ...t-icon-24x24.png => luanti-icon-24x24.png} | Bin misc/{minetest-icon.icns => luanti-icon.icns} | Bin misc/{minetest-icon.ico => luanti-icon.ico} | Bin ...-icon-128.png => luanti-xorg-icon-128.png} | Bin ...etest.exe.manifest => luanti.exe.manifest} | 2 +- misc/{minetest.svg => luanti.svg} | 0 misc/net.minetest.minetest.desktop | 8 ++-- misc/net.minetest.minetest.metainfo.xml | 28 ++++++------- misc/winresource.rc | 9 ++--- po/ar/{minetest.po => luanti.po} | 0 po/be/{minetest.po => luanti.po} | 0 po/bg/{minetest.po => luanti.po} | 0 po/ca/{minetest.po => luanti.po} | 0 po/cs/{minetest.po => luanti.po} | 0 po/cy/{minetest.po => luanti.po} | 0 po/da/{minetest.po => luanti.po} | 0 po/de/{minetest.po => luanti.po} | 0 po/dv/{minetest.po => luanti.po} | 0 po/el/{minetest.po => luanti.po} | 0 po/eo/{minetest.po => luanti.po} | 0 po/es/{minetest.po => luanti.po} | 0 po/et/{minetest.po => luanti.po} | 0 po/eu/{minetest.po => luanti.po} | 0 po/fa/{minetest.po => luanti.po} | 0 po/fi/{minetest.po => luanti.po} | 0 po/fil/{minetest.po => luanti.po} | 0 po/fr/{minetest.po => luanti.po} | 0 po/ga/{minetest.po => luanti.po} | 0 po/gd/{minetest.po => luanti.po} | 0 po/gl/{minetest.po => luanti.po} | 0 po/he/{minetest.po => luanti.po} | 0 po/hi/{minetest.po => luanti.po} | 0 po/hu/{minetest.po => luanti.po} | 0 po/ia/{minetest.po => luanti.po} | 0 po/id/{minetest.po => luanti.po} | 0 po/it/{minetest.po => luanti.po} | 0 po/ja/{minetest.po => luanti.po} | 0 po/jbo/{minetest.po => luanti.po} | 0 po/jv/{minetest.po => luanti.po} | 0 po/kk/{minetest.po => luanti.po} | 0 po/kn/{minetest.po => luanti.po} | 0 po/ko/{minetest.po => luanti.po} | 0 po/kv/{minetest.po => luanti.po} | 0 po/ky/{minetest.po => luanti.po} | 0 po/lt/{minetest.po => luanti.po} | 0 po/{minetest.pot => luanti.pot} | 0 po/lv/{minetest.po => luanti.po} | 0 po/lzh/{minetest.po => luanti.po} | 0 po/mi/{minetest.po => luanti.po} | 0 po/mn/{minetest.po => luanti.po} | 0 po/mr/{minetest.po => luanti.po} | 0 po/ms/{minetest.po => luanti.po} | 0 po/ms_Arab/{minetest.po => luanti.po} | 0 po/nb/{minetest.po => luanti.po} | 0 po/nl/{minetest.po => luanti.po} | 0 po/nn/{minetest.po => luanti.po} | 0 po/oc/{minetest.po => luanti.po} | 0 po/pl/{minetest.po => luanti.po} | 0 po/pt/{minetest.po => luanti.po} | 0 po/pt_BR/{minetest.po => luanti.po} | 0 po/ro/{minetest.po => luanti.po} | 0 po/ru/{minetest.po => luanti.po} | 0 po/sk/{minetest.po => luanti.po} | 0 po/sl/{minetest.po => luanti.po} | 0 po/sr_Cyrl/{minetest.po => luanti.po} | 0 po/sr_Latn/{minetest.po => luanti.po} | 0 po/sv/{minetest.po => luanti.po} | 0 po/sw/{minetest.po => luanti.po} | 0 po/th/{minetest.po => luanti.po} | 0 po/tok/{minetest.po => luanti.po} | 0 po/tr/{minetest.po => luanti.po} | 0 po/tt/{minetest.po => luanti.po} | 0 po/uk/{minetest.po => luanti.po} | 0 po/vi/{minetest.po => luanti.po} | 0 po/yue/{minetest.po => luanti.po} | 0 po/zh_CN/{minetest.po => luanti.po} | 0 po/zh_TW/{minetest.po => luanti.po} | 0 src/CMakeLists.txt | 34 +++++++++++----- src/main.cpp | 27 +++++++++---- src/porting.cpp | 18 ++++++--- src/porting_android.cpp | 2 +- src/server.cpp | 12 +++--- textures/base/pack/menu_header.png | Bin 980 -> 286 bytes util/bump_version.sh | 4 +- util/stress_mapgen.sh | 6 +-- util/test_error_cases.sh | 8 ++-- util/test_multiplayer.sh | 8 ++-- util/updatepo.sh | 8 ++-- 118 files changed, 206 insertions(+), 179 deletions(-) rename cmake/Modules/{MinetestAndroidLibs.cmake => AndroidLibs.cmake} (100%) rename doc/{minetest.6 => luanti.6} (83%) create mode 100644 doc/luantiserver.6 delete mode 100644 doc/minetestserver.6 rename misc/{minetest-icon-24x24.png => luanti-icon-24x24.png} (100%) rename misc/{minetest-icon.icns => luanti-icon.icns} (100%) rename misc/{minetest-icon.ico => luanti-icon.ico} (100%) rename misc/{minetest-xorg-icon-128.png => luanti-xorg-icon-128.png} (100%) rename misc/{minetest.exe.manifest => luanti.exe.manifest} (94%) rename misc/{minetest.svg => luanti.svg} (100%) rename po/ar/{minetest.po => luanti.po} (100%) rename po/be/{minetest.po => luanti.po} (100%) rename po/bg/{minetest.po => luanti.po} (100%) rename po/ca/{minetest.po => luanti.po} (100%) rename po/cs/{minetest.po => luanti.po} (100%) rename po/cy/{minetest.po => luanti.po} (100%) rename po/da/{minetest.po => luanti.po} (100%) rename po/de/{minetest.po => luanti.po} (100%) rename po/dv/{minetest.po => luanti.po} (100%) rename po/el/{minetest.po => luanti.po} (100%) rename po/eo/{minetest.po => luanti.po} (100%) rename po/es/{minetest.po => luanti.po} (100%) rename po/et/{minetest.po => luanti.po} (100%) rename po/eu/{minetest.po => luanti.po} (100%) rename po/fa/{minetest.po => luanti.po} (100%) rename po/fi/{minetest.po => luanti.po} (100%) rename po/fil/{minetest.po => luanti.po} (100%) rename po/fr/{minetest.po => luanti.po} (100%) rename po/ga/{minetest.po => luanti.po} (100%) rename po/gd/{minetest.po => luanti.po} (100%) rename po/gl/{minetest.po => luanti.po} (100%) rename po/he/{minetest.po => luanti.po} (100%) rename po/hi/{minetest.po => luanti.po} (100%) rename po/hu/{minetest.po => luanti.po} (100%) rename po/ia/{minetest.po => luanti.po} (100%) rename po/id/{minetest.po => luanti.po} (100%) rename po/it/{minetest.po => luanti.po} (100%) rename po/ja/{minetest.po => luanti.po} (100%) rename po/jbo/{minetest.po => luanti.po} (100%) rename po/jv/{minetest.po => luanti.po} (100%) rename po/kk/{minetest.po => luanti.po} (100%) rename po/kn/{minetest.po => luanti.po} (100%) rename po/ko/{minetest.po => luanti.po} (100%) rename po/kv/{minetest.po => luanti.po} (100%) rename po/ky/{minetest.po => luanti.po} (100%) rename po/lt/{minetest.po => luanti.po} (100%) rename po/{minetest.pot => luanti.pot} (100%) rename po/lv/{minetest.po => luanti.po} (100%) rename po/lzh/{minetest.po => luanti.po} (100%) rename po/mi/{minetest.po => luanti.po} (100%) rename po/mn/{minetest.po => luanti.po} (100%) rename po/mr/{minetest.po => luanti.po} (100%) rename po/ms/{minetest.po => luanti.po} (100%) rename po/ms_Arab/{minetest.po => luanti.po} (100%) rename po/nb/{minetest.po => luanti.po} (100%) rename po/nl/{minetest.po => luanti.po} (100%) rename po/nn/{minetest.po => luanti.po} (100%) rename po/oc/{minetest.po => luanti.po} (100%) rename po/pl/{minetest.po => luanti.po} (100%) rename po/pt/{minetest.po => luanti.po} (100%) rename po/pt_BR/{minetest.po => luanti.po} (100%) rename po/ro/{minetest.po => luanti.po} (100%) rename po/ru/{minetest.po => luanti.po} (100%) rename po/sk/{minetest.po => luanti.po} (100%) rename po/sl/{minetest.po => luanti.po} (100%) rename po/sr_Cyrl/{minetest.po => luanti.po} (100%) rename po/sr_Latn/{minetest.po => luanti.po} (100%) rename po/sv/{minetest.po => luanti.po} (100%) rename po/sw/{minetest.po => luanti.po} (100%) rename po/th/{minetest.po => luanti.po} (100%) rename po/tok/{minetest.po => luanti.po} (100%) rename po/tr/{minetest.po => luanti.po} (100%) rename po/tt/{minetest.po => luanti.po} (100%) rename po/uk/{minetest.po => luanti.po} (100%) rename po/vi/{minetest.po => luanti.po} (100%) rename po/yue/{minetest.po => luanti.po} (100%) rename po/zh_CN/{minetest.po => luanti.po} (100%) rename po/zh_TW/{minetest.po => luanti.po} (100%) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 51a7eae63..dab491ad8 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -37,7 +37,7 @@ Contributions are welcome! Here's how you can help: [Lua](http://dev.minetest.net/Lua_code_style_guidelines) code style guidelines. - Check your code works as expected and document any changes to the Lua API. - To avoid conflicting changes between contributions, do not do the following manually. They will be done before each release. - - Run `updatepo.sh` or update `minetest.po{,t}` even if your code adds new translatable strings. + - Run `updatepo.sh` or update `luanti.po{,t}` even if your code adds new translatable strings. - Update `minetest.conf.example` and `settings_translation_file.cpp` even if your code adds new core settings. 4. Commit & [push](https://help.github.com/articles/pushing-to-a-remote/) your changes to a new branch (not `master`, one change per branch) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 34db1a662..ab68274b4 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -50,25 +50,25 @@ jobs: - name: Save AAB artifact uses: actions/upload-artifact@v4 with: - name: Minetest-release.aab + name: Luanti-release.aab path: android/app/build/outputs/bundle/release/app-release.aab - name: Save armeabi artifact uses: actions/upload-artifact@v4 with: - name: Minetest-armeabi-v7a.apk + name: Luanti-armeabi-v7a.apk path: android/app/build/outputs/apk/release/app-armeabi-v7a-release-unsigned.apk - name: Save arm64 artifact uses: actions/upload-artifact@v4 with: - name: Minetest-arm64-v8a.apk + name: Luanti-arm64-v8a.apk path: android/app/build/outputs/apk/release/app-arm64-v8a-release-unsigned.apk - name: Save x86 artifact uses: actions/upload-artifact@v4 with: - name: Minetest-x86.apk + name: Luanti-x86.apk path: android/app/build/outputs/apk/release/app-x86-release-unsigned.apk - name: Save x86_64 artifact uses: actions/upload-artifact@v4 with: - name: Minetest-x86_64.apk + name: Luanti-x86_64.apk path: android/app/build/outputs/apk/release/app-x86_64-release-unsigned.apk diff --git a/.github/workflows/docker_image.yml b/.github/workflows/docker_image.yml index 1a2805e22..0ea0ad6ca 100644 --- a/.github/workflows/docker_image.yml +++ b/.github/workflows/docker_image.yml @@ -72,8 +72,8 @@ jobs: with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} labels: | - org.opencontainers.image.title=Minetest - org.opencontainers.image.vendor=Minetest + org.opencontainers.image.title=Luanti + org.opencontainers.image.vendor=Luanti org.opencontainers.image.licenses=LGPL-2.1-only # Build and push Docker image @@ -94,5 +94,5 @@ jobs: - name: Test Docker Image run: | - docker run --rm $(cut -d, -f1 <<<"$DOCKER_METADATA_OUTPUT_TAGS") minetestserver --version + docker run --rm $(cut -d, -f1 <<<"$DOCKER_METADATA_OUTPUT_TAGS") luantiserver --version shell: bash diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index a2ec10a0a..7b478693e 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -54,7 +54,7 @@ jobs: - name: Test run: | - ./bin/minetest --run-unittests + ./bin/luanti --run-unittests # Current gcc version gcc_14: @@ -78,7 +78,7 @@ jobs: mkdir nowrite chmod a-w nowrite cd nowrite - ../bin/minetest --run-unittests + ../bin/luanti --run-unittests # Older clang version (should be close to our minimum supported version) clang_7: @@ -100,7 +100,7 @@ jobs: - name: Unittest run: | - ./bin/minetest --run-unittests + ./bin/luanti --run-unittests # Do this here because we have ASan and error paths are sensitive to dangling pointers - name: Test error cases @@ -126,7 +126,7 @@ jobs: - name: Test run: | - ./bin/minetest --run-unittests + ./bin/luanti --run-unittests - name: Integration test + devtest run: | @@ -156,4 +156,4 @@ jobs: - name: Test run: | - ./bin/minetestserver --run-unittests + ./bin/luantiserver --run-unittests diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index 731d7d719..05315f06e 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -53,7 +53,7 @@ jobs: - name: Test run: | - ./build/macos/minetest.app/Contents/MacOS/minetest --run-unittests + ./build/macos/luanti.app/Contents/MacOS/luanti --run-unittests # Zipping the built .app preserves permissions on the contained files, # which the GitHub artifact pipeline would otherwise strip away. @@ -66,5 +66,5 @@ jobs: - uses: actions/upload-artifact@v4 with: - name: minetest-macos + name: luanti-macos path: ./build/macos/*.zip diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 4b937e80e..30d682ad8 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -56,8 +56,8 @@ jobs: run: | dest=$(mktemp -d) unzip -q -d "$dest" B/build/*.zip - cd "$dest"/minetest-*-win* - wine bin/minetest.exe --version + cd "$dest"/luanti-*-win* + wine bin/luanti.exe --version - uses: actions/upload-artifact@v4 with: @@ -103,7 +103,7 @@ jobs: vcpkgGitCommitId: ${{ env.VCPKG_VERSION }} vcpkgTriplet: ${{ matrix.config.vcpkg_triplet }} - - name: Minetest CMake + - name: CMake run: | cmake ${{matrix.config.generator}} ` -DCMAKE_TOOLCHAIN_FILE="${{ github.workspace }}\vcpkg\scripts\buildsystems\vcpkg.cmake" ` @@ -113,13 +113,13 @@ jobs: -DREQUIRE_LUAJIT=TRUE ` -DRUN_IN_PLACE=${{ contains(matrix.type, 'portable') }} . - - name: Build Minetest + - name: Build run: cmake --build . --config Release - name: Unittests # need this workaround for stdout to work run: | - $proc = start .\bin\Release\minetest.exe --run-unittests -NoNewWindow -Wait -PassThru + $proc = start .\bin\Release\luanti.exe --run-unittests -NoNewWindow -Wait -PassThru exit $proc.ExitCode continue-on-error: true # FIXME!! diff --git a/CMakeLists.txt b/CMakeLists.txt index a9a0ef000..df45fb9d8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,8 +1,8 @@ cmake_minimum_required(VERSION 3.12) # This can be read from ${PROJECT_NAME} after project() is called -project(minetest) -set(PROJECT_NAME_CAPITALIZED "Minetest") +project(luanti) +set(PROJECT_NAME_CAPITALIZED "Luanti") set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED TRUE) @@ -92,7 +92,7 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/") # Load default options for Android if(ANDROID) cmake_minimum_required(VERSION 3.20) - include(MinetestAndroidLibs) + include(AndroidLibs) endif() @@ -261,17 +261,17 @@ install(FILES "doc/world_format.md" DESTINATION "${DOCDIR}" COMPONENT "Docs") install(FILES "minetest.conf.example" DESTINATION "${EXAMPLE_CONF_DIR}") if(UNIX AND NOT APPLE) - install(FILES "doc/minetest.6" "doc/minetestserver.6" DESTINATION "${MANDIR}/man6") + install(FILES "doc/luanti.6" "doc/luantiserver.6" DESTINATION "${MANDIR}/man6") install(FILES "misc/net.minetest.minetest.desktop" DESTINATION "${XDG_APPS_DIR}") install(FILES "misc/net.minetest.minetest.metainfo.xml" DESTINATION "${METAINFODIR}") - install(FILES "misc/minetest.svg" DESTINATION "${ICONDIR}/hicolor/scalable/apps") - install(FILES "misc/minetest-xorg-icon-128.png" + install(FILES "misc/luanti.svg" DESTINATION "${ICONDIR}/hicolor/scalable/apps") + install(FILES "misc/luanti-xorg-icon-128.png" DESTINATION "${ICONDIR}/hicolor/128x128/apps" - RENAME "minetest.png") + RENAME "luanti.png") endif() if(APPLE) - install(FILES "misc/minetest-icon.icns" DESTINATION "${SHAREDIR}") + install(FILES "misc/luanti-icon.icns" DESTINATION "${SHAREDIR}") install(FILES "misc/Info.plist" DESTINATION "${BUNDLE_PATH}/Contents") endif() @@ -307,7 +307,7 @@ include(CPackComponent) cpack_add_component(Docs DISPLAY_NAME "Documentation" - DESCRIPTION "Documentation about Minetest and Minetest modding" + DESCRIPTION "Documentation about ${PROJECT_NAME_CAPITALIZED} and ${PROJECT_NAME_CAPITALIZED} modding" ) if(WIN32) @@ -331,7 +331,7 @@ if(WIN32) set(CPACK_CREATE_DESKTOP_LINKS ${PROJECT_NAME}) set(CPACK_PACKAGING_INSTALL_PREFIX "/${PROJECT_NAME_CAPITALIZED}") - set(CPACK_WIX_PRODUCT_ICON "${CMAKE_CURRENT_SOURCE_DIR}/misc/minetest-icon.ico") + set(CPACK_WIX_PRODUCT_ICON "${CMAKE_CURRENT_SOURCE_DIR}/misc/luanti-icon.ico") # Supported languages can be found at # http://wixtoolset.org/documentation/manual/v3/wixui/wixui_localization.html #set(CPACK_WIX_CULTURES "ar-SA,bg-BG,ca-ES,hr-HR,cs-CZ,da-DK,nl-NL,en-US,et-EE,fi-FI,fr-FR,de-DE") diff --git a/Dockerfile b/Dockerfile index 39974a1c3..c9a9848c5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -32,22 +32,22 @@ RUN git clone --recursive https://github.com/jupp0r/prometheus-cpp && \ FROM dev as builder -COPY .git /usr/src/minetest/.git -COPY CMakeLists.txt /usr/src/minetest/CMakeLists.txt -COPY README.md /usr/src/minetest/README.md -COPY minetest.conf.example /usr/src/minetest/minetest.conf.example -COPY builtin /usr/src/minetest/builtin -COPY cmake /usr/src/minetest/cmake -COPY doc /usr/src/minetest/doc -COPY fonts /usr/src/minetest/fonts -COPY lib /usr/src/minetest/lib -COPY misc /usr/src/minetest/misc -COPY po /usr/src/minetest/po -COPY src /usr/src/minetest/src -COPY irr /usr/src/minetest/irr -COPY textures /usr/src/minetest/textures +COPY .git /usr/src/luanti/.git +COPY CMakeLists.txt /usr/src/luanti/CMakeLists.txt +COPY README.md /usr/src/luanti/README.md +COPY minetest.conf.example /usr/src/luanti/minetest.conf.example +COPY builtin /usr/src/luanti/builtin +COPY cmake /usr/src/luanti/cmake +COPY doc /usr/src/luanti/doc +COPY fonts /usr/src/luanti/fonts +COPY lib /usr/src/luanti/lib +COPY misc /usr/src/luanti/misc +COPY po /usr/src/luanti/po +COPY src /usr/src/luanti/src +COPY irr /usr/src/luanti/irr +COPY textures /usr/src/luanti/textures -WORKDIR /usr/src/minetest +WORKDIR /usr/src/luanti RUN cmake -B build \ -DCMAKE_INSTALL_PREFIX=/usr/local \ -DCMAKE_BUILD_TYPE=Release \ @@ -68,9 +68,9 @@ RUN apk add --no-cache curl gmp libstdc++ libgcc libpq jsoncpp zstd-libs \ WORKDIR /var/lib/minetest -COPY --from=builder /usr/local/share/minetest /usr/local/share/minetest -COPY --from=builder /usr/local/bin/minetestserver /usr/local/bin/minetestserver -COPY --from=builder /usr/local/share/doc/minetest/minetest.conf.example /etc/minetest/minetest.conf +COPY --from=builder /usr/local/share/luanti /usr/local/share/luanti +COPY --from=builder /usr/local/bin/luantiserver /usr/local/bin/luantiserver +COPY --from=builder /usr/local/share/doc/luanti/minetest.conf.example /etc/minetest/minetest.conf COPY --from=builder /usr/local/lib/libspatialindex* /usr/local/lib/ COPY --from=builder /usr/local/lib/libluajit* /usr/local/lib/ USER minetest:minetest @@ -78,5 +78,5 @@ USER minetest:minetest EXPOSE 30000/udp 30000/tcp VOLUME /var/lib/minetest/ /etc/minetest/ -ENTRYPOINT ["/usr/local/bin/minetestserver"] +ENTRYPOINT ["/usr/local/bin/luantiserver"] CMD ["--config", "/etc/minetest/minetest.conf"] diff --git a/LICENSE.txt b/LICENSE.txt index 2308f8d16..7ac216a0d 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,8 +1,8 @@ -License of Minetest textures and sounds +License of Luanti textures and sounds --------------------------------------- -This applies to textures and sounds contained in the main Minetest +This applies to textures and sounds contained in the main Luanti distribution. Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) @@ -29,7 +29,6 @@ ShadowNinja: textures/base/pack/smoke_puff.png paramat: - textures/base/pack/menu_header.png textures/base/pack/next_icon.png textures/base/pack/prev_icon.png textures/base/pack/clear.png @@ -40,9 +39,9 @@ rubenwardy, paramat: textures/base/pack/end_icon.png erle: - misc/minetest-icon-24x24.png - misc/minetest-icon.ico - misc/minetest.svg + misc/luanti-icon-24x24.png + misc/luanti-icon.ico + misc/luanti.svg textures/base/pack/logo.png JRottm: @@ -88,12 +87,16 @@ DS: grorp: textures/base/pack/exit_btn.png + textures/base/pack/menu_header.png + using the font "undefined medium" (https://undefined-medium.com/), + which is licensed under the SIL Open Font License, Version 1.1 -License of Minetest source code +License of Luanti source code ------------------------------- -Minetest -Copyright (C) 2010-2018 celeron55, Perttu Ahola +Luanti +Copyright (C) 2010-2024 celeron55, Perttu Ahola +and contributors (see source file comments and the version control log) This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by @@ -112,7 +115,7 @@ with this program; if not, write to the Free Software Foundation, Inc., Irrlicht --------------- -This program uses IrrlichtMt, Minetest's fork of +This program uses IrrlichtMt, Luanti's fork of the Irrlicht Engine. http://irrlicht.sourceforge.net/ The Irrlicht Engine License diff --git a/android/app/build.gradle b/android/app/build.gradle index cefc473af..eaf1e3571 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -95,7 +95,7 @@ task prepareAssets() { def moPath = "${assetsFolder}/locale/${poFile.parentFile.name}/LC_MESSAGES/" file(moPath).mkdirs() exec { - commandLine 'msgfmt', '-o', "${moPath}/minetest.mo", poFile + commandLine 'msgfmt', '-o', "${moPath}/luanti.mo", poFile } } @@ -103,7 +103,7 @@ task prepareAssets() { } task zipAssets(dependsOn: prepareAssets, type: Zip) { - archiveFileName = "Minetest.zip" + archiveFileName = "assets.zip" from assetsFolder destinationDirectory = file("src/main/assets") } @@ -113,7 +113,7 @@ preBuild.dependsOn zipAssets prepareAssets.dependsOn ':native:getDeps' clean { - delete new File("src/main/assets", "Minetest.zip") + delete new File("src/main/assets", "assets.zip") } dependencies { diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 9197b9131..2e900ec53 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -43,9 +43,6 @@ - - Minetest + Luanti Loading… General notification - Notifications from Minetest - Loading Minetest + Notifications from Luanti + Loading Luanti Less than 1 minute… Done No web browser found diff --git a/android/settings.gradle b/android/settings.gradle index b048fca7c..b9ac343a9 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -1,2 +1,2 @@ -rootProject.name = "Minetest" +rootProject.name = "Luanti" include ':app', ':native' diff --git a/builtin/mainmenu/content/dlg_contentdb.lua b/builtin/mainmenu/content/dlg_contentdb.lua index 8f232e490..7e17ed315 100644 --- a/builtin/mainmenu/content/dlg_contentdb.lua +++ b/builtin/mainmenu/content/dlg_contentdb.lua @@ -18,7 +18,7 @@ if not core.get_http_api then function create_contentdb_dlg() return messagebox("contentdb", - fgettext("ContentDB is not available when Minetest was compiled without cURL")) + fgettext("ContentDB is not available when Luanti was compiled without cURL")) end return end diff --git a/builtin/mainmenu/credits.json b/builtin/mainmenu/credits.json index f128d3695..1e35cc6b3 100644 --- a/builtin/mainmenu/credits.json +++ b/builtin/mainmenu/credits.json @@ -64,7 +64,7 @@ "superfloh247" ], "previous_contributors": [ - "Ælla Chiana Moskopp (erle) [Minetest logo]", + "Ælla Chiana Moskopp (erle) [Logo]", "red-001 ", "Giuseppe Bilotta", "HybridDog", diff --git a/builtin/mainmenu/tab_about.lua b/builtin/mainmenu/tab_about.lua index ab3edbddc..627ccb4ca 100644 --- a/builtin/mainmenu/tab_about.lua +++ b/builtin/mainmenu/tab_about.lua @@ -78,7 +78,7 @@ return { "style[label_button;border=false]" .. "button[0.1,3.4;5.3,0.5;label_button;" .. core.formspec_escape(version.project .. " " .. version.string) .. "]" .. - "button_url[1.5,4.1;2.5,0.8;homepage;minetest.net;https://www.minetest.net/]" .. + "button_url[1.5,4.1;2.5,0.8;homepage;luanti.org;https://www.luanti.org/]" .. "hypertext[5.5,0.25;9.75,6.6;credits;" .. minetest.formspec_escape(hypertext) .. "]" -- Render information diff --git a/builtin/mainmenu/tab_local.lua b/builtin/mainmenu/tab_local.lua index 8d807cc79..2789431b9 100644 --- a/builtin/mainmenu/tab_local.lua +++ b/builtin/mainmenu/tab_local.lua @@ -166,8 +166,8 @@ local function get_formspec(tabview, name, tabdata) local H = tabview.height local hypertext = "" .. - fgettext_ne("Minetest is a game-creation platform that allows you to play many different games.") .. "\n" .. - fgettext_ne("Minetest doesn't come with a game by default.") .. " " .. + fgettext_ne("Luanti is a game-creation platform that allows you to play many different games.") .. "\n" .. + fgettext_ne("Luanti doesn't come with a game by default.") .. " " .. fgettext_ne("You need to install a game before you can create a world.") local button_y = H * 2/3 - 0.6 diff --git a/cmake/Modules/MinetestAndroidLibs.cmake b/cmake/Modules/AndroidLibs.cmake similarity index 100% rename from cmake/Modules/MinetestAndroidLibs.cmake rename to cmake/Modules/AndroidLibs.cmake diff --git a/cmake/Modules/FindGettextLib.cmake b/cmake/Modules/FindGettextLib.cmake index 0052d6578..77e384646 100644 --- a/cmake/Modules/FindGettextLib.cmake +++ b/cmake/Modules/FindGettextLib.cmake @@ -41,7 +41,7 @@ if(GETTEXTLIB_FOUND) endif() set(GETTEXT_MO_DEST_PATH ${LOCALEDIR}//LC_MESSAGES) file(GLOB GETTEXT_AVAILABLE_LOCALES RELATIVE ${GETTEXT_PO_PATH} "${GETTEXT_PO_PATH}/*") - list(REMOVE_ITEM GETTEXT_AVAILABLE_LOCALES minetest.pot) + list(REMOVE_ITEM GETTEXT_AVAILABLE_LOCALES ${PROJECT_NAME}.pot) list(REMOVE_ITEM GETTEXT_AVAILABLE_LOCALES timestamp) macro(SET_MO_PATHS _buildvar _destvar _locale) string(REPLACE "" ${_locale} ${_buildvar} ${GETTEXT_MO_BUILD_PATH}) diff --git a/doc/minetest.6 b/doc/luanti.6 similarity index 83% rename from doc/minetest.6 rename to doc/luanti.6 index dcd38501f..0eb5b630e 100644 --- a/doc/minetest.6 +++ b/doc/luanti.6 @@ -1,26 +1,21 @@ -.TH minetest 6 "2 February 2019" "" "" +.TH luanti 6 "2 February 2019" "" "" .SH NAME -minetest, minetestserver \- Multiplayer infinite-world block sandbox +luanti, luantiserver \- voxel game engine .SH SYNOPSIS -.B minetest +.B luanti [\fB--server SERVER OPTIONS\fR | \fBCLIENT OPTIONS\fR] [\fBCOMMON OPTIONS\fR] [\fBWORLD PATH\fR] -.B minetestserver +.B luantiserver [\fBSERVER OPTIONS\fR] [\fBCOMMON OPTIONS\fR] [\fBWORLD PATH\fR] .SH DESCRIPTION -.B Minetest is one of the first InfiniMiner/Minecraft(/whatever) inspired games -(started October 2010), with a goal of taking the survival multiplayer gameplay -in a slightly different direction. -.PP -The main design philosophy is to keep it technically simple, stable and -portable. It will be kept lightweight enough to run on fairly old hardware. +.B Luanti (formerly Minetest) is a voxel game engine with easy modding and game creation. .SH COMMON OPTIONS .TP @@ -126,7 +121,7 @@ Colon delimited list of directories to search for games. Colon delimited list of directories to search for mods. .TP .B MINETEST_USER_PATH -Path to Minetest user data directory. +Path to Luanti user data directory. .SH BUGS Please report all bugs at https://github.com/minetest/minetest/issues. diff --git a/doc/luantiserver.6 b/doc/luantiserver.6 new file mode 100644 index 000000000..54b16fc83 --- /dev/null +++ b/doc/luantiserver.6 @@ -0,0 +1,2 @@ +.so man6/luanti.6 + diff --git a/doc/minetestserver.6 b/doc/minetestserver.6 deleted file mode 100644 index db5330d3c..000000000 --- a/doc/minetestserver.6 +++ /dev/null @@ -1,2 +0,0 @@ -.so man6/minetest.6 - diff --git a/doc/mkdocs/docs/img/favicon.ico b/doc/mkdocs/docs/img/favicon.ico index cac34a30c..ddecbc68e 120000 --- a/doc/mkdocs/docs/img/favicon.ico +++ b/doc/mkdocs/docs/img/favicon.ico @@ -1 +1 @@ -../../../../misc/minetest-icon.ico \ No newline at end of file +../../../../misc/luanti-icon.ico \ No newline at end of file diff --git a/irr/src/CIrrDeviceLinux.cpp b/irr/src/CIrrDeviceLinux.cpp index c00f52380..8538c05d1 100644 --- a/irr/src/CIrrDeviceLinux.cpp +++ b/irr/src/CIrrDeviceLinux.cpp @@ -286,10 +286,10 @@ void CIrrDeviceLinux::setupTopLevelXorgWindow() os::Printer::log("Configuring X11-specific top level window properties", ELL_DEBUG); // Set application name and class hints. For now name and class are the same. - // Note: SDL uses the executable name here (i.e. "minetest"). + // Note: SDL uses the executable name here (i.e. "luanti"). XClassHint *classhint = XAllocClassHint(); - classhint->res_name = const_cast("Minetest"); - classhint->res_class = const_cast("Minetest"); + classhint->res_name = const_cast("Luanti"); + classhint->res_class = const_cast("Luanti"); XSetClassHint(XDisplay, XWindow, classhint); XFree(classhint); diff --git a/irr/src/CIrrDeviceSDL.cpp b/irr/src/CIrrDeviceSDL.cpp index 0db598c74..60cf54d04 100644 --- a/irr/src/CIrrDeviceSDL.cpp +++ b/irr/src/CIrrDeviceSDL.cpp @@ -341,7 +341,7 @@ CIrrDeviceSDL::CIrrDeviceSDL(const SIrrlichtCreationParameters ¶m) : SDL_SetHint(SDL_HINT_MOUSE_TOUCH_EVENTS, "0"); #if defined(SDL_HINT_APP_NAME) - SDL_SetHint(SDL_HINT_APP_NAME, "Minetest"); + SDL_SetHint(SDL_HINT_APP_NAME, "Luanti"); #endif // Set IME hints diff --git a/irr/src/CMakeLists.txt b/irr/src/CMakeLists.txt index 768ee8d37..41d6645e9 100644 --- a/irr/src/CMakeLists.txt +++ b/irr/src/CMakeLists.txt @@ -219,7 +219,7 @@ if(USE_SDL2) if(NOT ANDROID) find_package(SDL2 REQUIRED) else() - # provided by MinetestAndroidLibs.cmake + # provided by AndroidLibs.cmake endif() message(STATUS "Found SDL2: ${SDL2_LIBRARIES}") diff --git a/misc/AppImageBuilder.yml b/misc/AppImageBuilder.yml index 39dfd9e48..6bd9edd2a 100644 --- a/misc/AppImageBuilder.yml +++ b/misc/AppImageBuilder.yml @@ -4,10 +4,10 @@ AppDir: path: AppDir app_info: id: net.minetest.minetest - name: Minetest - icon: minetest + name: Luanti + icon: luanti version: !ENV ${VERSION} - exec: usr/bin/minetest + exec: usr/bin/luanti exec_args: $@ files: include: [] @@ -54,7 +54,7 @@ script: | cmake --install appimage-build # Is a backup icon location in case - mkdir -p AppDir/usr/share/minetest/misc - cp AppDir/usr/share/icons/hicolor/128x128/apps/minetest.png AppDir/usr/share/minetest/misc/minetest-xorg-icon-128.png + mkdir -p AppDir/usr/share/luanti/misc + cp AppDir/usr/share/icons/hicolor/128x128/apps/luanti.png AppDir/usr/share/luanti/misc/luanti-xorg-icon-128.png # Validation issues sed -i '/PrefersNonDefaultGPU/d' AppDir/usr/share/applications/net.minetest.minetest.desktop diff --git a/misc/Info.plist b/misc/Info.plist index 0491d2fc1..74ed6fe5c 100644 --- a/misc/Info.plist +++ b/misc/Info.plist @@ -5,15 +5,15 @@ CFBundleDevelopmentRegion English CFBundleExecutable - minetest + luanti CFBundleIconFile - minetest-icon.icns + luanti-icon.icns CFBundleName - Minetest + Luanti CFBundleDisplayName - Minetest + Luanti CFBundleIdentifier - net.minetest.minetest + org.luanti.luanti NSHighResolutionCapable diff --git a/misc/minetest-icon-24x24.png b/misc/luanti-icon-24x24.png similarity index 100% rename from misc/minetest-icon-24x24.png rename to misc/luanti-icon-24x24.png diff --git a/misc/minetest-icon.icns b/misc/luanti-icon.icns similarity index 100% rename from misc/minetest-icon.icns rename to misc/luanti-icon.icns diff --git a/misc/minetest-icon.ico b/misc/luanti-icon.ico similarity index 100% rename from misc/minetest-icon.ico rename to misc/luanti-icon.ico diff --git a/misc/minetest-xorg-icon-128.png b/misc/luanti-xorg-icon-128.png similarity index 100% rename from misc/minetest-xorg-icon-128.png rename to misc/luanti-xorg-icon-128.png diff --git a/misc/minetest.exe.manifest b/misc/luanti.exe.manifest similarity index 94% rename from misc/minetest.exe.manifest rename to misc/luanti.exe.manifest index 1b8c3ba7b..6b5f751e9 100644 --- a/misc/minetest.exe.manifest +++ b/misc/luanti.exe.manifest @@ -1,6 +1,6 @@ - + diff --git a/misc/minetest.svg b/misc/luanti.svg similarity index 100% rename from misc/minetest.svg rename to misc/luanti.svg diff --git a/misc/net.minetest.minetest.desktop b/misc/net.minetest.minetest.desktop index 312e70f40..c6c99c469 100644 --- a/misc/net.minetest.minetest.desktop +++ b/misc/net.minetest.minetest.desktop @@ -1,11 +1,11 @@ [Desktop Entry] -Name=Minetest -GenericName=Minetest +Name=Luanti +GenericName=Luanti Comment=Block-based multiplayer game platform Comment[de]=Blockbasierte Mehrspieler-Spieleplattform Comment[fr]=Plate-forme de jeu multijoueurs à base de blocs -Exec=minetest -Icon=minetest +Exec=luanti +Icon=luanti Terminal=false PrefersNonDefaultGPU=true Type=Application diff --git a/misc/net.minetest.minetest.metainfo.xml b/misc/net.minetest.minetest.metainfo.xml index 4045b8f23..92f8a80ef 100644 --- a/misc/net.minetest.minetest.metainfo.xml +++ b/misc/net.minetest.minetest.metainfo.xml @@ -2,7 +2,7 @@ net.minetest.minetest - Minetest + Luanti Block-based multiplayer game platform Blockbasierte Mehrspieler-Spieleplattform Plate-forme de jeu multijoueurs à base de blocs @@ -11,7 +11,7 @@ LGPL-2.1+ AND CC-BY-SA-3.0 AND MIT AND Apache-2.0 - Minetest Team + Luanti Team @@ -34,13 +34,13 @@

- Minetest is a block-based sandbox game platform. + Luanti is a block-based sandbox game platform.

- Minetest ist eine blockbasierte Sandbox-Spielplattform. + Luanti ist eine blockbasierte Sandbox-Spielplattform.

- Minetest est une plateforme de jeu de type bac à sable à base de blocs. + Luanti est une plateforme de jeu de type bac à sable à base de blocs.

Players can create and destroy various types of blocks in a @@ -58,25 +58,25 @@ formes possibles, sur des serveurs multijoueurs ou en solo.

- Minetest is designed to be simple, stable, and portable. + Luanti is designed to be simple, stable, and portable. It is lightweight enough to run on fairly old hardware.

- Minetest wurde entworfen, um einfach, stabil und portabel zu sein. + Luanti wurde entworfen, um einfach, stabil und portabel zu sein. Es ist leichtgewichtig genug, um auf relativ alter Hardware zu laufen.

- Minetest est conçu pour être simple, stable et portable. + Luanti est conçu pour être simple, stable et portable. Il est suffisamment léger pour fonctionner sur du matériel relativement ancien.

- Minetest has many features, including: + Luanti has many features, including:

- Minetest besitzt viele Features, unter anderem: + Luanti besitzt viele Features, unter anderem:

- Minetest offre de nombreuses fonctionnalités, notamment : + Luanti offre de nombreuses fonctionnalités, notamment :

  • Ability to walk around, dig, and build in a near-infinite voxel world
  • @@ -113,7 +113,7 @@ - minetest + luanti Game @@ -141,10 +141,10 @@ https://www.minetest.net/get-involved - minetest + luanti - minetest + luanti celeron55@gmail.com diff --git a/misc/winresource.rc b/misc/winresource.rc index d5a71797a..1988b1928 100644 --- a/misc/winresource.rc +++ b/misc/winresource.rc @@ -16,11 +16,11 @@ #endif #ifdef __MINGW32__ -CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "minetest.exe.manifest" +CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "luanti.exe.manifest" #endif LANGUAGE 0, SUBLANG_NEUTRAL -130 ICON "minetest-icon.ico" +130 ICON "luanti-icon.ico" ///////////////////////////////////////////////////////////////////////////// // @@ -49,9 +49,8 @@ BEGIN VALUE "FileDescription", PROJECT_NAME_C " engine" VALUE "FileVersion", VERSION_STRING VALUE "InternalName", PROJECT_NAME - VALUE "LegalCopyright", "(c) 2011-2015 celeron55" - VALUE "LegalTrademarks", """Minetest"" is the property of the Minetest community, don't use it without permission!" - VALUE "OriginalFilename", "minetest.exe" + VALUE "LegalCopyright", "(c) 2010-2024 Perttu Ahola (celeron55) and contributors" + VALUE "OriginalFilename", PROJECT_NAME ".exe" VALUE "PrivateBuild", VERSION_EXTRA VALUE "ProductName", PROJECT_NAME_C VALUE "ProductVersion", PRODUCT_VERSION_STRING diff --git a/po/ar/minetest.po b/po/ar/luanti.po similarity index 100% rename from po/ar/minetest.po rename to po/ar/luanti.po diff --git a/po/be/minetest.po b/po/be/luanti.po similarity index 100% rename from po/be/minetest.po rename to po/be/luanti.po diff --git a/po/bg/minetest.po b/po/bg/luanti.po similarity index 100% rename from po/bg/minetest.po rename to po/bg/luanti.po diff --git a/po/ca/minetest.po b/po/ca/luanti.po similarity index 100% rename from po/ca/minetest.po rename to po/ca/luanti.po diff --git a/po/cs/minetest.po b/po/cs/luanti.po similarity index 100% rename from po/cs/minetest.po rename to po/cs/luanti.po diff --git a/po/cy/minetest.po b/po/cy/luanti.po similarity index 100% rename from po/cy/minetest.po rename to po/cy/luanti.po diff --git a/po/da/minetest.po b/po/da/luanti.po similarity index 100% rename from po/da/minetest.po rename to po/da/luanti.po diff --git a/po/de/minetest.po b/po/de/luanti.po similarity index 100% rename from po/de/minetest.po rename to po/de/luanti.po diff --git a/po/dv/minetest.po b/po/dv/luanti.po similarity index 100% rename from po/dv/minetest.po rename to po/dv/luanti.po diff --git a/po/el/minetest.po b/po/el/luanti.po similarity index 100% rename from po/el/minetest.po rename to po/el/luanti.po diff --git a/po/eo/minetest.po b/po/eo/luanti.po similarity index 100% rename from po/eo/minetest.po rename to po/eo/luanti.po diff --git a/po/es/minetest.po b/po/es/luanti.po similarity index 100% rename from po/es/minetest.po rename to po/es/luanti.po diff --git a/po/et/minetest.po b/po/et/luanti.po similarity index 100% rename from po/et/minetest.po rename to po/et/luanti.po diff --git a/po/eu/minetest.po b/po/eu/luanti.po similarity index 100% rename from po/eu/minetest.po rename to po/eu/luanti.po diff --git a/po/fa/minetest.po b/po/fa/luanti.po similarity index 100% rename from po/fa/minetest.po rename to po/fa/luanti.po diff --git a/po/fi/minetest.po b/po/fi/luanti.po similarity index 100% rename from po/fi/minetest.po rename to po/fi/luanti.po diff --git a/po/fil/minetest.po b/po/fil/luanti.po similarity index 100% rename from po/fil/minetest.po rename to po/fil/luanti.po diff --git a/po/fr/minetest.po b/po/fr/luanti.po similarity index 100% rename from po/fr/minetest.po rename to po/fr/luanti.po diff --git a/po/ga/minetest.po b/po/ga/luanti.po similarity index 100% rename from po/ga/minetest.po rename to po/ga/luanti.po diff --git a/po/gd/minetest.po b/po/gd/luanti.po similarity index 100% rename from po/gd/minetest.po rename to po/gd/luanti.po diff --git a/po/gl/minetest.po b/po/gl/luanti.po similarity index 100% rename from po/gl/minetest.po rename to po/gl/luanti.po diff --git a/po/he/minetest.po b/po/he/luanti.po similarity index 100% rename from po/he/minetest.po rename to po/he/luanti.po diff --git a/po/hi/minetest.po b/po/hi/luanti.po similarity index 100% rename from po/hi/minetest.po rename to po/hi/luanti.po diff --git a/po/hu/minetest.po b/po/hu/luanti.po similarity index 100% rename from po/hu/minetest.po rename to po/hu/luanti.po diff --git a/po/ia/minetest.po b/po/ia/luanti.po similarity index 100% rename from po/ia/minetest.po rename to po/ia/luanti.po diff --git a/po/id/minetest.po b/po/id/luanti.po similarity index 100% rename from po/id/minetest.po rename to po/id/luanti.po diff --git a/po/it/minetest.po b/po/it/luanti.po similarity index 100% rename from po/it/minetest.po rename to po/it/luanti.po diff --git a/po/ja/minetest.po b/po/ja/luanti.po similarity index 100% rename from po/ja/minetest.po rename to po/ja/luanti.po diff --git a/po/jbo/minetest.po b/po/jbo/luanti.po similarity index 100% rename from po/jbo/minetest.po rename to po/jbo/luanti.po diff --git a/po/jv/minetest.po b/po/jv/luanti.po similarity index 100% rename from po/jv/minetest.po rename to po/jv/luanti.po diff --git a/po/kk/minetest.po b/po/kk/luanti.po similarity index 100% rename from po/kk/minetest.po rename to po/kk/luanti.po diff --git a/po/kn/minetest.po b/po/kn/luanti.po similarity index 100% rename from po/kn/minetest.po rename to po/kn/luanti.po diff --git a/po/ko/minetest.po b/po/ko/luanti.po similarity index 100% rename from po/ko/minetest.po rename to po/ko/luanti.po diff --git a/po/kv/minetest.po b/po/kv/luanti.po similarity index 100% rename from po/kv/minetest.po rename to po/kv/luanti.po diff --git a/po/ky/minetest.po b/po/ky/luanti.po similarity index 100% rename from po/ky/minetest.po rename to po/ky/luanti.po diff --git a/po/lt/minetest.po b/po/lt/luanti.po similarity index 100% rename from po/lt/minetest.po rename to po/lt/luanti.po diff --git a/po/minetest.pot b/po/luanti.pot similarity index 100% rename from po/minetest.pot rename to po/luanti.pot diff --git a/po/lv/minetest.po b/po/lv/luanti.po similarity index 100% rename from po/lv/minetest.po rename to po/lv/luanti.po diff --git a/po/lzh/minetest.po b/po/lzh/luanti.po similarity index 100% rename from po/lzh/minetest.po rename to po/lzh/luanti.po diff --git a/po/mi/minetest.po b/po/mi/luanti.po similarity index 100% rename from po/mi/minetest.po rename to po/mi/luanti.po diff --git a/po/mn/minetest.po b/po/mn/luanti.po similarity index 100% rename from po/mn/minetest.po rename to po/mn/luanti.po diff --git a/po/mr/minetest.po b/po/mr/luanti.po similarity index 100% rename from po/mr/minetest.po rename to po/mr/luanti.po diff --git a/po/ms/minetest.po b/po/ms/luanti.po similarity index 100% rename from po/ms/minetest.po rename to po/ms/luanti.po diff --git a/po/ms_Arab/minetest.po b/po/ms_Arab/luanti.po similarity index 100% rename from po/ms_Arab/minetest.po rename to po/ms_Arab/luanti.po diff --git a/po/nb/minetest.po b/po/nb/luanti.po similarity index 100% rename from po/nb/minetest.po rename to po/nb/luanti.po diff --git a/po/nl/minetest.po b/po/nl/luanti.po similarity index 100% rename from po/nl/minetest.po rename to po/nl/luanti.po diff --git a/po/nn/minetest.po b/po/nn/luanti.po similarity index 100% rename from po/nn/minetest.po rename to po/nn/luanti.po diff --git a/po/oc/minetest.po b/po/oc/luanti.po similarity index 100% rename from po/oc/minetest.po rename to po/oc/luanti.po diff --git a/po/pl/minetest.po b/po/pl/luanti.po similarity index 100% rename from po/pl/minetest.po rename to po/pl/luanti.po diff --git a/po/pt/minetest.po b/po/pt/luanti.po similarity index 100% rename from po/pt/minetest.po rename to po/pt/luanti.po diff --git a/po/pt_BR/minetest.po b/po/pt_BR/luanti.po similarity index 100% rename from po/pt_BR/minetest.po rename to po/pt_BR/luanti.po diff --git a/po/ro/minetest.po b/po/ro/luanti.po similarity index 100% rename from po/ro/minetest.po rename to po/ro/luanti.po diff --git a/po/ru/minetest.po b/po/ru/luanti.po similarity index 100% rename from po/ru/minetest.po rename to po/ru/luanti.po diff --git a/po/sk/minetest.po b/po/sk/luanti.po similarity index 100% rename from po/sk/minetest.po rename to po/sk/luanti.po diff --git a/po/sl/minetest.po b/po/sl/luanti.po similarity index 100% rename from po/sl/minetest.po rename to po/sl/luanti.po diff --git a/po/sr_Cyrl/minetest.po b/po/sr_Cyrl/luanti.po similarity index 100% rename from po/sr_Cyrl/minetest.po rename to po/sr_Cyrl/luanti.po diff --git a/po/sr_Latn/minetest.po b/po/sr_Latn/luanti.po similarity index 100% rename from po/sr_Latn/minetest.po rename to po/sr_Latn/luanti.po diff --git a/po/sv/minetest.po b/po/sv/luanti.po similarity index 100% rename from po/sv/minetest.po rename to po/sv/luanti.po diff --git a/po/sw/minetest.po b/po/sw/luanti.po similarity index 100% rename from po/sw/minetest.po rename to po/sw/luanti.po diff --git a/po/th/minetest.po b/po/th/luanti.po similarity index 100% rename from po/th/minetest.po rename to po/th/luanti.po diff --git a/po/tok/minetest.po b/po/tok/luanti.po similarity index 100% rename from po/tok/minetest.po rename to po/tok/luanti.po diff --git a/po/tr/minetest.po b/po/tr/luanti.po similarity index 100% rename from po/tr/minetest.po rename to po/tr/luanti.po diff --git a/po/tt/minetest.po b/po/tt/luanti.po similarity index 100% rename from po/tt/minetest.po rename to po/tt/luanti.po diff --git a/po/uk/minetest.po b/po/uk/luanti.po similarity index 100% rename from po/uk/minetest.po rename to po/uk/luanti.po diff --git a/po/vi/minetest.po b/po/vi/luanti.po similarity index 100% rename from po/vi/minetest.po rename to po/vi/luanti.po diff --git a/po/yue/minetest.po b/po/yue/luanti.po similarity index 100% rename from po/yue/minetest.po rename to po/yue/luanti.po diff --git a/po/zh_CN/minetest.po b/po/zh_CN/luanti.po similarity index 100% rename from po/zh_CN/minetest.po rename to po/zh_CN/luanti.po diff --git a/po/zh_TW/minetest.po b/po/zh_TW/luanti.po similarity index 100% rename from po/zh_TW/minetest.po rename to po/zh_TW/luanti.po diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2056bdd3d..4005fc14b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,4 +1,4 @@ -project(minetest) +project(luanti) INCLUDE(CheckTypeSize) INCLUDE(CheckIncludeFiles) @@ -6,12 +6,12 @@ INCLUDE(CheckLibraryExists) check_type_size(int SIZEOF_INT BUILTIN_TYPES_ONLY LANGUAGE CXX) if(SIZEOF_INT LESS 4) - message(FATAL_ERROR "Minetest will not work with int less than 32 bits wide.") + message(FATAL_ERROR "${PROJECT_NAME_CAPITALIZED} will not work with int less than 32 bits wide.") endif() check_type_size(size_t SIZEOF_SIZE_T LANGUAGE CXX) if(SIZEOF_SIZE_T LESS 4) - message(FATAL_ERROR "Minetest will not work with size_t less than 32 bits wide.") + message(FATAL_ERROR "${PROJECT_NAME_CAPITALIZED} will not work with size_t less than 32 bits wide.") endif() # Add custom SemiDebug build mode @@ -488,7 +488,7 @@ endif() # This gives us the icon and file version information if(WIN32) set(WINRESOURCE_FILE "${CMAKE_CURRENT_SOURCE_DIR}/../misc/winresource.rc") - set(MINETEST_EXE_MANIFEST_FILE "${CMAKE_CURRENT_SOURCE_DIR}/../misc/minetest.exe.manifest") + set(EXE_MANIFEST_FILE "${CMAKE_CURRENT_SOURCE_DIR}/../misc/luanti.exe.manifest") if(MINGW) if(NOT CMAKE_RC_COMPILER) set(CMAKE_RC_COMPILER "windres.exe") @@ -498,10 +498,10 @@ if(WIN32) -i${WINRESOURCE_FILE} -o ${CMAKE_CURRENT_BINARY_DIR}/winresource_rc.o WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - DEPENDS ${WINRESOURCE_FILE} ${MINETEST_EXE_MANIFEST_FILE}) + DEPENDS ${WINRESOURCE_FILE} ${EXE_MANIFEST_FILE}) SET(extra_windows_SRCS ${CMAKE_CURRENT_BINARY_DIR}/winresource_rc.o) else(MINGW) # Probably MSVC - set(extra_windows_SRCS ${WINRESOURCE_FILE} ${MINETEST_EXE_MANIFEST_FILE}) + set(extra_windows_SRCS ${WINRESOURCE_FILE} ${EXE_MANIFEST_FILE}) endif(MINGW) endif() @@ -556,7 +556,7 @@ include_directories(SYSTEM ${GMP_INCLUDE_DIR} ${JSON_INCLUDE_DIR} ${LUA_BIT_INCLUDE_DIR} - # on Android, Minetest depends on SDL2 directly + # on Android, Luanti depends on SDL2 directly # on other platforms, only IrrlichtMt depends on SDL2 "$<$:${SDL2_INCLUDE_DIRS}>" ) @@ -578,7 +578,7 @@ endif() # When cross-compiling assume the user doesn't want to run the executable anyway, -# otherwise place it in /bin/ since Minetest can only run from there. +# otherwise place it in /bin/ since Luanti can only run from there. if(NOT CMAKE_CROSSCOMPILING) set(EXECUTABLE_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/bin") endif() @@ -626,7 +626,7 @@ if(BUILD_CLIENT) sha256 ${FREETYPE_LIBRARY} ${PLATFORM_LIBS} - # on Android, Minetest depends on SDL2 directly + # on Android, Luanti depends on SDL2 directly # on other platforms, only IrrlichtMt depends on SDL2 "$<$:${SDL2_LIBRARIES}>" ) @@ -812,7 +812,7 @@ elseif(NOT MSVC) check_c_source_compiles("#include \nint main(){return sizeof(lua_atccall);}" HAVE_ATCCALL) if(NOT HAVE_ATCCALL) string(CONCAT explanation_msg - "It looks like you're trying to build Minetest using a system-wide " + "It looks like you're trying to build ${PROJECT_NAME_CAPITALIZED} using a system-wide " "Lua installation. This is no longer supported because PUC Lua " "cannot interoperate with C++ correctly. Read src/unittest/test_lua.cpp " " for technical details.") @@ -986,6 +986,14 @@ if(WIN32) endif() endif() +macro(CreateLegacyAlias _cmake_target _old_path _new_name) + add_custom_target("${_cmake_target}" ALL + COMMAND "${CMAKE_COMMAND}" -E create_symlink "${_new_name}" "${_old_path}" + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}") + add_dependencies("${_cmake_target}" "${_new_name}") + install(PROGRAMS "${_old_path}" DESTINATION ${BINDIR}) +endmacro() + if(BUILD_CLIENT AND NOT ANDROID) install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION ${BINDIR} @@ -993,6 +1001,9 @@ if(BUILD_CLIENT AND NOT ANDROID) ARCHIVE DESTINATION ${BINDIR} BUNDLE DESTINATION . ) + if(UNIX) + CreateLegacyAlias(minetest_alias "${EXECUTABLE_OUTPUT_PATH}/minetest" ${PROJECT_NAME}) + endif() if(APPLE) install(CODE " @@ -1016,6 +1027,9 @@ endif() if(BUILD_SERVER) install(TARGETS ${PROJECT_NAME}server DESTINATION ${BINDIR}) + if(UNIX) + CreateLegacyAlias(minetestserver_alias "${EXECUTABLE_OUTPUT_PATH}/minetestserver" ${PROJECT_NAME}server) + endif() endif() if (ANDROID) diff --git a/src/main.cpp b/src/main.cpp index 6928b5c74..b400249ed 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -61,7 +61,7 @@ extern "C" { } #if !defined(__cpp_rtti) || !defined(__cpp_exceptions) -#error Minetest cannot be built without exceptions or RTTI +#error Luanti cannot be built without exceptions or RTTI #endif #if defined(__MINGW32__) && !defined(__clang__) @@ -69,7 +69,7 @@ extern "C" { // https://github.com/minetest/minetest/issues/10137 for one of the various issues we had #error ================================== #error MinGW gcc has a broken TLS implementation and is not supported for building \ - Minetest. Look at testTLS() in test_threading.cpp and see for yourself. \ + Luanti. Look at testTLS() in test_threading.cpp and see for yourself. \ Please use a clang-based compiler or alternatively MSVC. #error ================================== #endif @@ -174,6 +174,19 @@ int main(int argc, char *argv[]) warningstream << "Continuing without debugger" << std::endl; } + { + auto exe_name = argc > 0 ? lowercase(fs::GetFilenameFromPath(argv[0])) : ""; + if (str_starts_with(exe_name, "minetest")) { +#if CHECK_CLIENT_BUILD() + const char *new_ = PROJECT_NAME; +#else + const char *new_ = PROJECT_NAME "server"; +#endif + warningstream << "The executable " << exe_name + << " is a deprecated alias, please use " << new_ << " instead." << std::endl; + } + } + porting::signal_handler_init(); porting::initializePaths(); @@ -366,15 +379,15 @@ static void set_allowed_options(OptionList *allowed_options) allowed_options->insert(std::make_pair("gameid", ValueSpec(VALUETYPE_STRING, _("Set gameid (\"--gameid list\" prints available ones)")))); allowed_options->insert(std::make_pair("migrate", ValueSpec(VALUETYPE_STRING, - _("Migrate from current map backend to another (Only works when using minetestserver or with --server)")))); + _("Migrate from current map backend to another (Only works when using " PROJECT_NAME "server or with --server)")))); allowed_options->insert(std::make_pair("migrate-players", ValueSpec(VALUETYPE_STRING, - _("Migrate from current players backend to another (Only works when using minetestserver or with --server)")))); + _("Migrate from current players backend to another (Only works when using " PROJECT_NAME "server or with --server)")))); allowed_options->insert(std::make_pair("migrate-auth", ValueSpec(VALUETYPE_STRING, - _("Migrate from current auth backend to another (Only works when using minetestserver or with --server)")))); + _("Migrate from current auth backend to another (Only works when using " PROJECT_NAME "server or with --server)")))); allowed_options->insert(std::make_pair("migrate-mod-storage", ValueSpec(VALUETYPE_STRING, - _("Migrate from current mod storage backend to another (Only works when using minetestserver or with --server)")))); + _("Migrate from current mod storage backend to another (Only works when using " PROJECT_NAME "server or with --server)")))); allowed_options->insert(std::make_pair("terminal", ValueSpec(VALUETYPE_FLAG, - _("Feature an interactive terminal (Only works when using minetestserver or with --server)")))); + _("Feature an interactive terminal (Only works when using " PROJECT_NAME "server or with --server)")))); allowed_options->insert(std::make_pair("recompress", ValueSpec(VALUETYPE_FLAG, _("Recompress the blocks of the given map database.")))); #if CHECK_CLIENT_BUILD() diff --git a/src/porting.cpp b/src/porting.cpp index 6b7952836..81e9afa01 100644 --- a/src/porting.cpp +++ b/src/porting.cpp @@ -464,7 +464,8 @@ bool setSystemPaths() // Use "C:\Users\\AppData\Roaming\" len = GetEnvironmentVariable("APPDATA", buf, sizeof(buf)); FATAL_ERROR_IF(len == 0 || len > sizeof(buf), "Failed to get APPDATA"); - path_user = std::string(buf) + DIR_DELIM + PROJECT_NAME_C; + // TODO: Luanti with migration + path_user = std::string(buf) + DIR_DELIM + "Minetest"; } else { path_user = std::string(buf); } @@ -529,8 +530,9 @@ bool setSystemPaths() if (minetest_user_path && minetest_user_path[0] != '\0') { path_user = std::string(minetest_user_path); } else { + // TODO: luanti with migration path_user = std::string(getHomeOrFail()) + DIR_DELIM "." - + PROJECT_NAME; + + "minetest"; } return true; @@ -557,9 +559,10 @@ bool setSystemPaths() if (minetest_user_path && minetest_user_path[0] != '\0') { path_user = std::string(minetest_user_path); } else { + // TODO: luanti with migration path_user = std::string(getHomeOrFail()) + "/Library/Application Support/" - + PROJECT_NAME; + + "minetest"; } return true; } @@ -574,8 +577,9 @@ bool setSystemPaths() if (minetest_user_path && minetest_user_path[0] != '\0') { path_user = std::string(minetest_user_path); } else { + // TODO: luanti with migration path_user = std::string(getHomeOrFail()) + DIR_DELIM "." - + lowercase(PROJECT_NAME); + + "minetest"; } return true; } @@ -681,11 +685,13 @@ void initializePaths() const char *cache_dir = getenv("XDG_CACHE_HOME"); const char *home_dir = getenv("HOME"); if (cache_dir && cache_dir[0] != '\0') { - path_cache = std::string(cache_dir) + DIR_DELIM + PROJECT_NAME; + // TODO: luanti with migration + path_cache = std::string(cache_dir) + DIR_DELIM + "minetest"; } else if (home_dir) { // Then try $HOME/.cache/PROJECT_NAME + // TODO: luanti with migration path_cache = std::string(home_dir) + DIR_DELIM + ".cache" - + DIR_DELIM + PROJECT_NAME; + + DIR_DELIM + "minetest"; } else { // If neither works, use $PATH_USER/cache path_cache = path_user + DIR_DELIM + "cache"; diff --git a/src/porting_android.cpp b/src/porting_android.cpp index 142aeb652..49f279c2b 100644 --- a/src/porting_android.cpp +++ b/src/porting_android.cpp @@ -90,7 +90,7 @@ void osSpecificInit() #ifdef GPROF // in the start-up code warningstream << "Initializing GPROF profiler" << std::endl; - monstartup("libMinetest.so"); + monstartup("libluanti.so"); #endif } diff --git a/src/server.cpp b/src/server.cpp index ab219043e..6b1dfffac 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -586,12 +586,12 @@ void Server::start() // ASCII art for the win! const char *art[] = { - " __. __. __. ", - " _____ |__| ____ _____ / |_ _____ _____ / |_ ", - " / \\| |/ \\ / __ \\ _\\/ __ \\/ __> _\\", - "| Y Y \\ | | \\ ___/| | | ___/\\___ \\| | ", - "|__|_| / |___| /\\______> | \\______>_____/| | ", - " \\/ \\/ \\/ \\/ \\/ " + R"(.__ __ .__ )", + R"(| | __ _______ _____/ |_|__|)", + R"(| | | | \__ \ / \ __\ |)", + R"(| |_| | // __ \| | \ | | |)", + R"(|____/____/(____ /___| /__| |__|)", + R"( \/ \/ )", }; if (!m_admin_chat) { diff --git a/textures/base/pack/menu_header.png b/textures/base/pack/menu_header.png index 49b9f6ea9ea8215d234805a6d4d1a3ea6c8f7677..cdc6d4edf014e58e762f158c8d236916df5d074d 100644 GIT binary patch literal 286 zcmeAS@N?(olHy`uVBq!ia0y~yU|IlVdoVEr$&g#?Cjcp)0G|+7APofmA=w{3{7=(- zeGJH9ED7=pW^j0RBMrzo;OXKRl5y|tO>eFS10L6lm;UOjluQ=%UA>Wooh$3>zRvUh z4|q(Mxo{}92s~O`mHXs~&4uj_PcNP5tX$yG=%&1r;jiYGZ49hdLRbmyRx$o^%(xT(@hppoMgY(dCRQ#m zqx!|Rd9&>eZkHYW&X=`4X!}iOE4`3KM}t_lM*n^6(D+X_%i4PTJnpLB&3pcNo; d!M)jT3TMxjopn|6t_wll^mO%eS?83{1ORL7bG85g literal 980 zcmV;_11tQAP)X@vA8MHBM!lK4{Cg>FhX-nvp5^;i#rR6{6aQAsfsB-VrV)LW2Pi0FfV zYUj7}+pJl$_nvWP3xg_rICIWA-&%XG%l_tMn}1i$;^&Vgn0@}#Z2x5v8>=hkOYwul z;-{jSE&R9hanO!jd+moPzI#)4?U2LIku85)GLIfinHv-1_W#{mH_gMT`z49l+E};O zfXUIkwF3tF`>jog1Gc^0C!;pH0G7Wl)#L|YjJ3vk&^WS%*YoDW*+DaW^@;-@Mq<#3 zeE9nKm<8>+PITHJVjN6)wJexd9JD+d4hun&Db-8P8)$Tb6Kj@FiAra5=i+En8Q z=Ma(~^5f$G|3LpKJ7HiKLUS(XVnx+UOyoz()(iU(M~XNaVJ#U%0xCyWk31iypFFm} zXWoYcCdGE_4v*yE$d~sk`FZ>5Wzdh0L;9!{5J5VQ!850WyeZ;ngtgcpd>zTk;WeBs zfE+0@`MQ#Q$*59qEbKN9yzKRgiJ1~RddLS zOW`L~tQu6!l0!~4U+3?KwPX}nas*3-sKu8YQ~b#xlP@_+G(iGCJ`Rc**l1BBg-}z| zk#I71cx4>Xk%Np>AV-Lv|zJG)J`a6U5O7Ysp52hny1CuMZ{Ut3=vS zx%xO9S930ClhO|s27M-n0000"$conf_server" \ @@ -31,14 +31,14 @@ ln -s "$dir/helper_mod" "$worldpath/worldmods/" args=(--server --config "$conf_server" --world "$worldpath" --gameid $gameid) -# make sure we can tell apart sanitizer and minetest errors +# make sure we can tell apart sanitizer and luanti errors export ASAN_OPTIONS="exitcode=42" export MSAN_OPTIONS="exitcode=42" # see helper_mod/init.lua for the different types for n in $(seq 1 4); do write_config error_type=$n - run "$minetest" "${args[@]}" + run "$executable" "${args[@]}" echo "---------------" done diff --git a/util/test_multiplayer.sh b/util/test_multiplayer.sh index b12908423..5c0e6bfaa 100755 --- a/util/test_multiplayer.sh +++ b/util/test_multiplayer.sh @@ -3,7 +3,7 @@ dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" gameid=${gameid:-devtest} -minetest=$dir/../bin/minetest +executable=$dir/../bin/luanti testspath=$dir/../tests conf_client1=$testspath/client1.conf conf_server=$testspath/server.conf @@ -21,7 +21,7 @@ waitfor () { exit 1 } -[ -e "$minetest" ] || { echo "executable $minetest missing"; exit 1; } +[ -e "$executable" ] || { echo "executable $executable missing"; exit 1; } rm -f "$testspath/log.txt" rm -rf "$worldpath" @@ -39,12 +39,12 @@ printf '%s\n' >"$testspath/server.conf" \ ln -s "$dir/helper_mod" "$worldpath/worldmods/" echo "Starting server" -"$minetest" --debugger --server --config "$conf_server" --world "$worldpath" --gameid $gameid 2>&1 \ +"$executable" --debugger --server --config "$conf_server" --world "$worldpath" --gameid $gameid 2>&1 \ | sed -u 's/^/(server) /' | tee -a "$testspath/log.txt" & waitfor "$worldpath/startup" echo "Starting client" -"$minetest" --debugger --config "$conf_client1" --go --address 127.0.0.1 2>&1 \ +"$executable" --debugger --config "$conf_client1" --go --address 127.0.0.1 2>&1 \ | sed -u 's/^/(client) /' | tee -a "$testspath/log.txt" & waitfor "$worldpath/done" diff --git a/util/updatepo.sh b/util/updatepo.sh index 22593a5dc..2b9f4a276 100755 --- a/util/updatepo.sh +++ b/util/updatepo.sh @@ -1,6 +1,6 @@ #!/bin/sh -# Update/create minetest po files +# Update/create luanti po files # an auxiliary function to abort processing with an optional error # message @@ -47,9 +47,9 @@ cd .. # First thing first, update the .pot template. We place it in the po/ # directory at the top level. You a recent enough xgettext that supports # --package-name -potfile=po/minetest.pot +potfile=po/luanti.pot echo "updating pot" -xgettext --package-name=minetest \ +xgettext --package-name=luanti \ --add-comments='~' \ --sort-by-file \ --add-location=file \ @@ -75,7 +75,7 @@ sed '/^#\. ~.*relative_to/,/^#: /{ /^#: /!d; }' -i $potfile # Now iterate on all languages and create the po file if missing, or update it # if it exists already for lang in $langs ; do # note the missing quotes around $langs - pofile=po/$lang/minetest.po + pofile=po/$lang/luanti.po if test -e $pofile; then echo "[$lang]: updating strings" msgmerge --update --sort-by-file $pofile $potfile From 0d85e826f406230a12839c49087d2c57fcb2e891 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Sat, 26 Oct 2024 23:42:16 +0200 Subject: [PATCH 045/178] Android: update used NDK and SDL support code --- .../java/org/libsdl/app/HIDDeviceManager.java | 9 ++++++++- .../app/src/main/java/org/libsdl/app/SDL.java | 14 +++++++++----- .../main/java/org/libsdl/app/SDLActivity.java | 16 ++++++++-------- .../org/libsdl/app/SDLControllerManager.java | 16 +++++++++------- android/build.gradle | 2 +- 5 files changed, 35 insertions(+), 22 deletions(-) diff --git a/android/app/src/main/java/org/libsdl/app/HIDDeviceManager.java b/android/app/src/main/java/org/libsdl/app/HIDDeviceManager.java index e7281fdf2..21a1c1d18 100644 --- a/android/app/src/main/java/org/libsdl/app/HIDDeviceManager.java +++ b/android/app/src/main/java/org/libsdl/app/HIDDeviceManager.java @@ -277,6 +277,7 @@ public class HIDDeviceManager { 0x044f, // Thrustmaster 0x045e, // Microsoft 0x0738, // Mad Catz + 0x0b05, // ASUS 0x0e6f, // PDP 0x0f0d, // Hori 0x10f5, // Turtle Beach @@ -590,7 +591,13 @@ public class HIDDeviceManager { } else { flags = 0; } - mUsbManager.requestPermission(usbDevice, PendingIntent.getBroadcast(mContext, 0, new Intent(HIDDeviceManager.ACTION_USB_PERMISSION), flags)); + if (Build.VERSION.SDK_INT >= 33 /* Android 14.0 (U) */) { + Intent intent = new Intent(HIDDeviceManager.ACTION_USB_PERMISSION); + intent.setPackage(mContext.getPackageName()); + mUsbManager.requestPermission(usbDevice, PendingIntent.getBroadcast(mContext, 0, intent, flags)); + } else { + mUsbManager.requestPermission(usbDevice, PendingIntent.getBroadcast(mContext, 0, new Intent(HIDDeviceManager.ACTION_USB_PERMISSION), flags)); + } } catch (Exception e) { Log.v(TAG, "Couldn't request permission for USB device " + usbDevice); HIDDeviceOpenResult(deviceID, false); diff --git a/android/app/src/main/java/org/libsdl/app/SDL.java b/android/app/src/main/java/org/libsdl/app/SDL.java index 44c21c1c7..139be9d15 100644 --- a/android/app/src/main/java/org/libsdl/app/SDL.java +++ b/android/app/src/main/java/org/libsdl/app/SDL.java @@ -38,6 +38,10 @@ public class SDL { } public static void loadLibrary(String libraryName) throws UnsatisfiedLinkError, SecurityException, NullPointerException { + loadLibrary(libraryName, mContext); + } + + public static void loadLibrary(String libraryName, Context context) throws UnsatisfiedLinkError, SecurityException, NullPointerException { if (libraryName == null) { throw new NullPointerException("No library name provided."); @@ -53,10 +57,10 @@ public class SDL { // To use ReLinker, just add it as a dependency. For more information, see // https://github.com/KeepSafe/ReLinker for ReLinker's repository. // - Class relinkClass = mContext.getClassLoader().loadClass("com.getkeepsafe.relinker.ReLinker"); - Class relinkListenerClass = mContext.getClassLoader().loadClass("com.getkeepsafe.relinker.ReLinker$LoadListener"); - Class contextClass = mContext.getClassLoader().loadClass("android.content.Context"); - Class stringClass = mContext.getClassLoader().loadClass("java.lang.String"); + Class relinkClass = context.getClassLoader().loadClass("com.getkeepsafe.relinker.ReLinker"); + Class relinkListenerClass = context.getClassLoader().loadClass("com.getkeepsafe.relinker.ReLinker$LoadListener"); + Class contextClass = context.getClassLoader().loadClass("android.content.Context"); + Class stringClass = context.getClassLoader().loadClass("java.lang.String"); // Get a 'force' instance of the ReLinker, so we can ensure libraries are reinstalled if // they've changed during updates. @@ -66,7 +70,7 @@ public class SDL { // Actually load the library! Method loadMethod = relinkInstanceClass.getDeclaredMethod("loadLibrary", contextClass, stringClass, stringClass, relinkListenerClass); - loadMethod.invoke(relinkInstance, mContext, libraryName, null, null); + loadMethod.invoke(relinkInstance, context, libraryName, null, null); } catch (final Throwable e) { // Fall back diff --git a/android/app/src/main/java/org/libsdl/app/SDLActivity.java b/android/app/src/main/java/org/libsdl/app/SDLActivity.java index 83e3cf657..393347d43 100644 --- a/android/app/src/main/java/org/libsdl/app/SDLActivity.java +++ b/android/app/src/main/java/org/libsdl/app/SDLActivity.java @@ -61,7 +61,7 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh private static final String TAG = "SDL"; private static final int SDL_MAJOR_VERSION = 2; private static final int SDL_MINOR_VERSION = 30; - private static final int SDL_MICRO_VERSION = 1; + private static final int SDL_MICRO_VERSION = 8; /* // Display InputType.SOURCE/CLASS of events and devices // @@ -89,7 +89,7 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh | InputDevice.SOURCE_CLASS_POSITION | InputDevice.SOURCE_CLASS_TRACKBALL); - if (s2 != 0) cls += "Some_Unkown"; + if (s2 != 0) cls += "Some_Unknown"; s2 = s_copy & InputDevice.SOURCE_ANY; // keep source only, no class; @@ -163,7 +163,7 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh if (s == FLAG_TAINTED) src += " FLAG_TAINTED"; s2 &= ~FLAG_TAINTED; - if (s2 != 0) src += " Some_Unkown"; + if (s2 != 0) src += " Some_Unknown"; Log.v(TAG, prefix + "int=" + s_copy + " CLASS={" + cls + " } source(s):" + src); } @@ -281,7 +281,7 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh // Load the .so public void loadLibraries() { for (String lib : getLibraries()) { - SDL.loadLibrary(lib); + SDL.loadLibrary(lib, this); } } @@ -995,8 +995,8 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh /* No valid hint, nothing is explicitly allowed */ if (!is_portrait_allowed && !is_landscape_allowed) { if (resizable) { - /* All orientations are allowed */ - req = ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR; + /* All orientations are allowed, respecting user orientation lock setting */ + req = ActivityInfo.SCREEN_ORIENTATION_FULL_USER; } else { /* Fixed window and nothing specified. Get orientation from w/h of created window */ req = (w > h ? ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE : ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT); @@ -1005,8 +1005,8 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh /* At least one orientation is allowed */ if (resizable) { if (is_portrait_allowed && is_landscape_allowed) { - /* hint allows both landscape and portrait, promote to full sensor */ - req = ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR; + /* hint allows both landscape and portrait, promote to full user */ + req = ActivityInfo.SCREEN_ORIENTATION_FULL_USER; } else { /* Use the only one allowed "orientation" */ req = (is_landscape_allowed ? orientation_landscape : orientation_portrait); diff --git a/android/app/src/main/java/org/libsdl/app/SDLControllerManager.java b/android/app/src/main/java/org/libsdl/app/SDLControllerManager.java index d6913f157..9d8b20b7b 100644 --- a/android/app/src/main/java/org/libsdl/app/SDLControllerManager.java +++ b/android/app/src/main/java/org/libsdl/app/SDLControllerManager.java @@ -546,13 +546,15 @@ class SDLHapticHandler { if (haptic == null) { InputDevice device = InputDevice.getDevice(deviceIds[i]); Vibrator vib = device.getVibrator(); - if (vib.hasVibrator()) { - haptic = new SDLHaptic(); - haptic.device_id = deviceIds[i]; - haptic.name = device.getName(); - haptic.vib = vib; - mHaptics.add(haptic); - SDLControllerManager.nativeAddHaptic(haptic.device_id, haptic.name); + if (vib != null) { + if (vib.hasVibrator()) { + haptic = new SDLHaptic(); + haptic.device_id = deviceIds[i]; + haptic.name = device.getName(); + haptic.vib = vib; + mHaptics.add(haptic); + SDLControllerManager.nativeAddHaptic(haptic.device_id, haptic.name); + } } } } diff --git a/android/build.gradle b/android/build.gradle index 2017c536c..40266815e 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -9,7 +9,7 @@ project.ext.set("versionBuild", 0) // Version Build // ^ fourth version number to allow releasing Android-only fixes and beta versions buildscript { - ext.ndk_version = '26.2.11394342' + ext.ndk_version = '27.2.12479018' repositories { google() mavenCentral() From 806fba64480e635cdc2fdfeaca4ecf86a7f3201f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nathana=C3=ABlle=20Courant?= Date: Mon, 28 Oct 2024 11:02:59 +0100 Subject: [PATCH 046/178] Fix missing rename --- src/script/cpp_api/s_env.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/script/cpp_api/s_env.cpp b/src/script/cpp_api/s_env.cpp index 007622d52..dcc610c4f 100644 --- a/src/script/cpp_api/s_env.cpp +++ b/src/script/cpp_api/s_env.cpp @@ -164,8 +164,8 @@ void ScriptApiEnv::player_event(ServerActiveObject *player, const std::string &t if (player == NULL) return; - // Get minetest.registered_playerevents - lua_getglobal(L, "minetest"); + // Get core.registered_playerevents + lua_getglobal(L, "core"); lua_getfield(L, -1, "registered_playerevents"); // Call callbacks From a450301686d31f829b44c571e5e731bd4e18b755 Mon Sep 17 00:00:00 2001 From: grorp Date: Mon, 28 Oct 2024 15:57:22 +0100 Subject: [PATCH 047/178] Fix server steps shorter than dedicated_server_step since #13370 (#15330) Co-authored-by: Desour Co-authored-by: sfan5 --- builtin/settingtypes.txt | 2 ++ doc/lua_api.md | 4 ---- src/server.cpp | 25 ++++++++++++++----------- src/server.h | 4 +++- 4 files changed, 19 insertions(+), 16 deletions(-) diff --git a/builtin/settingtypes.txt b/builtin/settingtypes.txt index 08902521e..3e23cd9c5 100644 --- a/builtin/settingtypes.txt +++ b/builtin/settingtypes.txt @@ -2067,6 +2067,8 @@ ask_reconnect_on_crash (Ask to reconnect after crash) bool false # Length of a server tick (the interval at which everything is generally updated), # stated in seconds. # Does not apply to sessions hosted from the client menu. +# This is a lower bound, i.e. server steps may not be shorter than this, but +# they are often longer. dedicated_server_step (Dedicated server step) float 0.09 0.0 1.0 # Whether players are shown to clients without any range limit. diff --git a/doc/lua_api.md b/doc/lua_api.md index e93e18c2a..6db358c85 100644 --- a/doc/lua_api.md +++ b/doc/lua_api.md @@ -6926,10 +6926,6 @@ Timing * `time` is a lower bound. The job is executed in the first server-step that started at least `time` seconds after the last time a server-step started, measured with globalstep dtime. - * In particular this can result in relatively large delays if `time` is close - to the server-step dtime. For example, with a target server-step of 0.09 s, - `core.after(0.09, ...)` often waits two steps, resulting in a delay of about - 0.18 s. * If `time` is `0`, the job is executed in the next step. * `job:cancel()` diff --git a/src/server.cpp b/src/server.cpp index 6b1dfffac..531eaf664 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -147,7 +147,8 @@ void *ServerThread::run() try { // see explanation inside - if (dtime > step_settings.steplen) + // (+1 ms, because we don't sleep more fine-grained) + if (dtime > step_settings.steplen + 0.001f) m_server->yieldToOtherThreads(dtime); m_server->AsyncRunStep(step_settings.pause ? 0.0f : dtime); @@ -1084,15 +1085,15 @@ void Server::AsyncRunStep(float dtime, bool initial_step) m_shutdown_state.tick(dtime, this); } -void Server::Receive(float timeout) +void Server::Receive(float min_time) { ZoneScoped; auto framemarker = FrameMarker("Server::Receive()-frame").started(); const u64 t0 = porting::getTimeUs(); - const float timeout_us = timeout * 1e6f; + const float min_time_us = min_time * 1e6f; auto remaining_time_us = [&]() -> float { - return std::max(0.0f, timeout_us - (porting::getTimeUs() - t0)); + return std::max(0.0f, min_time_us - (porting::getTimeUs() - t0)); }; NetworkPacket pkt; @@ -1101,15 +1102,17 @@ void Server::Receive(float timeout) pkt.clear(); peer_id = 0; try { - if (!m_con->ReceiveTimeoutMs(&pkt, - (u32)remaining_time_us() / 1000)) { + // Round up since the target step length is the minimum step length, + // we only have millisecond precision and we don't want to busy-wait + // by calling ReceiveTimeoutMs(.., 0) repeatedly. + const u32 cur_timeout_ms = std::ceil(remaining_time_us() / 1000.0f); + + if (!m_con->ReceiveTimeoutMs(&pkt, cur_timeout_ms)) { // No incoming data. - // Already break if there's 1ms left, as ReceiveTimeoutMs is too coarse - // and a faster server-step is better than busy waiting. - if (remaining_time_us() < 1000.0f) - break; - else + if (remaining_time_us() > 0.0f) continue; + else + break; } peer_id = pkt.getPeerId(); diff --git a/src/server.h b/src/server.h index f2a9083b6..69dace6d5 100644 --- a/src/server.h +++ b/src/server.h @@ -205,7 +205,9 @@ public: // This is run by ServerThread and does the actual processing void AsyncRunStep(float dtime, bool initial_step = false); - void Receive(float timeout); + /// Receive and process all incoming packets. Sleep if the time goal isn't met. + /// @param min_time minimum time to take [s] + void Receive(float min_time); void yieldToOtherThreads(float dtime); PlayerSAO* StageTwoClientInit(session_t peer_id); From d849d51c2dc4888d425f518540d725d06df7f4f8 Mon Sep 17 00:00:00 2001 From: sfence Date: Mon, 28 Oct 2024 15:57:39 +0100 Subject: [PATCH 048/178] Replace licensing text in headers (LGPLv2.1) (#15321) --- src/activeobject.h | 21 ++----------- src/activeobjectmgr.h | 21 ++----------- src/benchmark/benchmark.cpp | 21 ++----------- src/benchmark/benchmark.h | 21 ++----------- src/benchmark/benchmark_lighting.cpp | 21 ++----------- src/benchmark/benchmark_mapblock.cpp | 21 ++----------- src/benchmark/benchmark_mapmodify.cpp | 21 ++----------- src/benchmark/benchmark_serialize.cpp | 21 ++----------- src/chat.cpp | 21 ++----------- src/chat.h | 21 ++----------- src/chat_interface.h | 21 ++----------- src/chatmessage.h | 21 ++----------- src/client/activeobjectmgr.cpp | 21 ++----------- src/client/activeobjectmgr.h | 21 ++----------- src/client/camera.cpp | 21 ++----------- src/client/camera.h | 21 ++----------- src/client/client.cpp | 21 ++----------- src/client/client.h | 21 ++----------- src/client/clientenvironment.cpp | 21 ++----------- src/client/clientenvironment.h | 21 ++----------- src/client/clientevent.h | 21 ++----------- src/client/clientlauncher.cpp | 21 ++----------- src/client/clientlauncher.h | 21 ++----------- src/client/clientmap.cpp | 21 ++----------- src/client/clientmap.h | 21 ++----------- src/client/clientmedia.cpp | 21 ++----------- src/client/clientmedia.h | 21 ++----------- src/client/clientobject.cpp | 21 ++----------- src/client/clientobject.h | 21 ++----------- src/client/clientsimpleobject.h | 21 ++----------- src/client/clouds.cpp | 21 ++----------- src/client/clouds.h | 21 ++----------- src/client/content_cao.cpp | 21 ++----------- src/client/content_cao.h | 21 ++----------- src/client/content_cso.cpp | 21 ++----------- src/client/content_cso.h | 21 ++----------- src/client/content_mapblock.cpp | 21 ++----------- src/client/content_mapblock.h | 21 ++----------- src/client/event_manager.h | 21 ++----------- src/client/filecache.cpp | 23 +++----------- src/client/filecache.h | 23 +++----------- src/client/fontengine.cpp | 21 ++----------- src/client/fontengine.h | 21 ++----------- src/client/game.cpp | 21 ++----------- src/client/game.h | 21 ++----------- src/client/gameui.cpp | 23 +++----------- src/client/gameui.h | 23 +++----------- src/client/guiscalingfilter.cpp | 20 ++----------- src/client/guiscalingfilter.h | 20 ++----------- src/client/hud.cpp | 25 ++++------------ src/client/hud.h | 23 +++----------- src/client/imagefilters.cpp | 20 ++----------- src/client/imagefilters.h | 20 ++----------- src/client/imagesource.cpp | 21 ++----------- src/client/imagesource.h | 21 ++----------- src/client/inputhandler.cpp | 23 +++----------- src/client/inputhandler.h | 21 ++----------- src/client/joystick_controller.cpp | 21 ++----------- src/client/joystick_controller.h | 21 ++----------- src/client/keycode.cpp | 21 ++----------- src/client/keycode.h | 21 ++----------- src/client/keys.h | 21 ++----------- src/client/localplayer.cpp | 21 ++----------- src/client/localplayer.h | 21 ++----------- src/client/mapblock_mesh.cpp | 21 ++----------- src/client/mapblock_mesh.h | 21 ++----------- src/client/mesh.cpp | 21 ++----------- src/client/mesh.h | 21 ++----------- src/client/mesh_generator_thread.cpp | 21 ++----------- src/client/mesh_generator_thread.h | 21 ++----------- src/client/meshgen/collector.cpp | 21 ++----------- src/client/meshgen/collector.h | 21 ++----------- src/client/minimap.cpp | 21 ++----------- src/client/minimap.h | 21 ++----------- src/client/mtevent.h | 21 ++----------- src/client/particles.cpp | 21 ++----------- src/client/particles.h | 21 ++----------- src/client/render/anaglyph.cpp | 23 +++----------- src/client/render/anaglyph.h | 23 +++----------- src/client/render/core.cpp | 23 +++----------- src/client/render/core.h | 23 +++----------- src/client/render/factory.cpp | 23 +++----------- src/client/render/factory.h | 23 +++----------- src/client/render/interlaced.cpp | 23 +++----------- src/client/render/interlaced.h | 23 +++----------- src/client/render/pipeline.cpp | 21 ++----------- src/client/render/pipeline.h | 21 ++----------- src/client/render/plain.cpp | 23 +++----------- src/client/render/plain.h | 23 +++----------- src/client/render/secondstage.cpp | 25 ++++------------ src/client/render/secondstage.h | 23 +++----------- src/client/render/sidebyside.cpp | 23 +++----------- src/client/render/sidebyside.h | 23 +++----------- src/client/render/stereo.cpp | 23 +++----------- src/client/render/stereo.h | 23 +++----------- src/client/renderingengine.cpp | 23 +++----------- src/client/renderingengine.h | 23 +++----------- src/client/shader.cpp | 23 +++----------- src/client/shader.h | 23 +++----------- src/client/shadows/dynamicshadows.cpp | 21 ++----------- src/client/shadows/dynamicshadows.h | 21 ++----------- src/client/shadows/dynamicshadowsrender.cpp | 21 ++----------- src/client/shadows/dynamicshadowsrender.h | 21 ++----------- src/client/shadows/shadowsScreenQuad.cpp | 21 ++----------- src/client/shadows/shadowsScreenQuad.h | 21 ++----------- src/client/shadows/shadowsshadercallbacks.cpp | 21 ++----------- src/client/shadows/shadowsshadercallbacks.h | 21 ++----------- src/client/sky.cpp | 23 +++----------- src/client/sky.h | 21 ++----------- src/client/sound.cpp | 21 ++----------- src/client/sound.h | 21 ++----------- src/client/sound/al_extensions.cpp | 21 ++----------- src/client/sound/al_extensions.h | 21 ++----------- src/client/sound/al_helpers.cpp | 30 +++++-------------- src/client/sound/al_helpers.h | 30 +++++-------------- src/client/sound/ogg_file.cpp | 30 +++++-------------- src/client/sound/ogg_file.h | 30 +++++-------------- src/client/sound/playing_sound.cpp | 30 +++++-------------- src/client/sound/playing_sound.h | 30 +++++-------------- src/client/sound/proxy_sound_manager.cpp | 21 ++----------- src/client/sound/proxy_sound_manager.h | 21 ++----------- src/client/sound/sound_constants.h | 21 ++----------- src/client/sound/sound_data.cpp | 30 +++++-------------- src/client/sound/sound_data.h | 30 +++++-------------- src/client/sound/sound_manager.cpp | 30 +++++-------------- src/client/sound/sound_manager.h | 30 +++++-------------- src/client/sound/sound_manager_messages.h | 21 ++----------- src/client/sound/sound_openal.cpp | 28 ++++------------- src/client/sound/sound_openal.h | 21 ++----------- src/client/sound/sound_singleton.cpp | 30 +++++-------------- src/client/sound/sound_singleton.h | 30 +++++-------------- src/client/texturepaths.cpp | 21 ++----------- src/client/texturepaths.h | 21 ++----------- src/client/texturesource.cpp | 21 ++----------- src/client/texturesource.h | 21 ++----------- src/client/tile.cpp | 21 ++----------- src/client/tile.h | 21 ++----------- src/client/wieldmesh.cpp | 21 ++----------- src/client/wieldmesh.h | 21 ++----------- src/clientdynamicinfo.cpp | 21 ++----------- src/clientdynamicinfo.h | 21 ++----------- src/collision.cpp | 21 ++----------- src/collision.h | 21 ++----------- src/constants.h | 21 ++----------- src/content/content.cpp | 21 ++----------- src/content/content.h | 21 ++----------- src/content/mod_configuration.cpp | 21 ++----------- src/content/mod_configuration.h | 21 ++----------- src/content/mods.cpp | 21 ++----------- src/content/mods.h | 21 ++----------- src/content/subgames.cpp | 21 ++----------- src/content/subgames.h | 21 ++----------- src/content_mapnode.cpp | 21 ++----------- src/content_mapnode.h | 21 ++----------- src/content_nodemeta.cpp | 21 ++----------- src/content_nodemeta.h | 21 ++----------- src/convert_json.cpp | 21 ++----------- src/convert_json.h | 21 ++----------- src/craftdef.cpp | 21 ++----------- src/craftdef.h | 21 ++----------- src/database/database-dummy.cpp | 21 ++----------- src/database/database-dummy.h | 21 ++----------- src/database/database-files.cpp | 21 ++----------- src/database/database-files.h | 21 ++----------- src/database/database-leveldb.cpp | 21 ++----------- src/database/database-leveldb.h | 21 ++----------- src/database/database-postgresql.cpp | 20 ++----------- src/database/database-postgresql.h | 21 ++----------- src/database/database-redis.cpp | 21 ++----------- src/database/database-redis.h | 21 ++----------- src/database/database-sqlite3.cpp | 21 ++----------- src/database/database-sqlite3.h | 21 ++----------- src/database/database.cpp | 21 ++----------- src/database/database.h | 21 ++----------- src/daynightratio.h | 21 ++----------- src/debug.cpp | 21 ++----------- src/debug.h | 21 ++----------- src/defaultsettings.cpp | 21 ++----------- src/defaultsettings.h | 21 ++----------- src/dummygamedef.h | 23 +++----------- src/dummymap.h | 21 ++----------- src/emerge.cpp | 23 +++----------- src/emerge.h | 21 ++----------- src/emerge_internal.h | 21 ++----------- src/environment.cpp | 21 ++----------- src/environment.h | 21 ++----------- src/exceptions.h | 21 ++----------- src/face_position_cache.cpp | 21 ++----------- src/face_position_cache.h | 21 ++----------- src/filesys.cpp | 21 ++----------- src/filesys.h | 21 ++----------- src/gamedef.h | 21 ++----------- src/gameparams.h | 21 ++----------- src/gettext.cpp | 21 ++----------- src/gettext.h | 21 ++----------- src/gettime.h | 21 ++----------- src/gui/StyleSpec.h | 21 ++----------- src/gui/guiBox.cpp | 21 ++----------- src/gui/guiBox.h | 21 ++----------- src/gui/guiButtonImage.cpp | 21 ++----------- src/gui/guiButtonImage.h | 21 ++----------- src/gui/guiButtonItemImage.cpp | 21 ++----------- src/gui/guiButtonItemImage.h | 21 ++----------- src/gui/guiChatConsole.cpp | 21 ++----------- src/gui/guiChatConsole.h | 21 ++----------- src/gui/guiEditBox.cpp | 21 ++----------- src/gui/guiEditBox.h | 21 ++----------- src/gui/guiEngine.cpp | 21 ++----------- src/gui/guiEngine.h | 21 ++----------- src/gui/guiFormSpecMenu.cpp | 21 ++----------- src/gui/guiFormSpecMenu.h | 21 ++----------- src/gui/guiHyperText.cpp | 21 ++----------- src/gui/guiHyperText.h | 21 ++----------- src/gui/guiInventoryList.cpp | 21 ++----------- src/gui/guiInventoryList.h | 21 ++----------- src/gui/guiItemImage.cpp | 21 ++----------- src/gui/guiItemImage.h | 21 ++----------- src/gui/guiKeyChangeMenu.cpp | 25 ++++------------ src/gui/guiKeyChangeMenu.h | 25 ++++------------ src/gui/guiMainMenu.h | 21 ++----------- src/gui/guiPathSelectMenu.cpp | 21 ++----------- src/gui/guiPathSelectMenu.h | 20 ++----------- src/gui/guiScene.cpp | 21 ++----------- src/gui/guiScene.h | 21 ++----------- src/gui/guiScrollContainer.cpp | 21 ++----------- src/gui/guiScrollContainer.h | 21 ++----------- src/gui/guiTable.cpp | 21 ++----------- src/gui/guiTable.h | 21 ++----------- src/gui/mainmenumanager.h | 21 ++----------- src/gui/modalMenu.cpp | 23 +++----------- src/gui/modalMenu.h | 21 ++----------- src/gui/profilergraph.cpp | 23 +++----------- src/gui/profilergraph.h | 21 ++----------- src/gui/touchcontrols.cpp | 26 ++++------------ src/gui/touchcontrols.h | 23 +++----------- src/httpfetch.cpp | 21 ++----------- src/httpfetch.h | 21 ++----------- src/hud.cpp | 21 ++----------- src/hud.h | 23 +++----------- src/inventory.cpp | 21 ++----------- src/inventory.h | 21 ++----------- src/inventorymanager.cpp | 21 ++----------- src/inventorymanager.h | 21 ++----------- src/irr_aabb3d.h | 21 ++----------- src/irr_v2d.h | 21 ++----------- src/irr_v3d.h | 21 ++----------- src/irrlicht_changes/printing.h | 21 ++----------- src/irrlichttypes.h | 21 ++----------- src/irrlichttypes_bloated.h | 21 ++----------- src/irrlichttypes_extrabloated.h | 21 ++----------- src/itemdef.cpp | 23 +++----------- src/itemdef.h | 23 +++----------- src/itemgroup.h | 21 ++----------- src/itemstackmetadata.cpp | 21 ++----------- src/itemstackmetadata.h | 21 ++----------- src/json-forwards.h | 21 ++----------- src/light.cpp | 21 ++----------- src/light.h | 21 ++----------- src/lighting.cpp | 21 ++----------- src/lighting.h | 21 ++----------- src/log.cpp | 21 ++----------- src/main.cpp | 21 ++----------- src/map.cpp | 21 ++----------- src/map.h | 21 ++----------- src/map_settings_manager.cpp | 21 ++----------- src/map_settings_manager.h | 21 ++----------- src/mapblock.cpp | 21 ++----------- src/mapblock.h | 21 ++----------- src/mapgen/cavegen.cpp | 25 ++++------------ src/mapgen/cavegen.h | 23 +++----------- src/mapgen/dungeongen.cpp | 23 +++----------- src/mapgen/dungeongen.h | 23 +++----------- src/mapgen/mapgen.cpp | 25 ++++------------ src/mapgen/mapgen.h | 25 ++++------------ src/mapgen/mapgen_carpathian.cpp | 23 +++----------- src/mapgen/mapgen_carpathian.h | 23 +++----------- src/mapgen/mapgen_flat.cpp | 23 +++----------- src/mapgen/mapgen_flat.h | 23 +++----------- src/mapgen/mapgen_fractal.cpp | 23 +++----------- src/mapgen/mapgen_fractal.h | 26 +++------------- src/mapgen/mapgen_singlenode.cpp | 25 ++++------------ src/mapgen/mapgen_singlenode.h | 25 ++++------------ src/mapgen/mapgen_v5.cpp | 23 +++----------- src/mapgen/mapgen_v5.h | 23 +++----------- src/mapgen/mapgen_v6.cpp | 25 ++++------------ src/mapgen/mapgen_v6.h | 25 ++++------------ src/mapgen/mapgen_v7.cpp | 23 +++----------- src/mapgen/mapgen_v7.h | 23 +++----------- src/mapgen/mapgen_valleys.cpp | 17 ++--------- src/mapgen/mapgen_valleys.h | 17 ++--------- src/mapgen/mg_biome.cpp | 23 +++----------- src/mapgen/mg_biome.h | 23 +++----------- src/mapgen/mg_decoration.cpp | 23 +++----------- src/mapgen/mg_decoration.h | 23 +++----------- src/mapgen/mg_ore.cpp | 23 +++----------- src/mapgen/mg_ore.h | 23 +++----------- src/mapgen/mg_schematic.cpp | 23 +++----------- src/mapgen/mg_schematic.h | 23 +++----------- src/mapgen/treegen.cpp | 25 ++++------------ src/mapgen/treegen.h | 25 ++++------------ src/mapnode.cpp | 21 ++----------- src/mapnode.h | 21 ++----------- src/mapsector.cpp | 21 ++----------- src/mapsector.h | 21 ++----------- src/metadata.cpp | 21 ++----------- src/metadata.h | 21 ++----------- src/modchannels.cpp | 21 ++----------- src/modchannels.h | 21 ++----------- src/modifiedstate.h | 21 ++----------- src/nameidmapping.cpp | 21 ++----------- src/nameidmapping.h | 21 ++----------- src/network/address.cpp | 21 ++----------- src/network/address.h | 21 ++----------- src/network/clientopcodes.cpp | 23 +++----------- src/network/clientopcodes.h | 23 +++----------- src/network/clientpackethandler.cpp | 21 ++----------- src/network/mtp/impl.cpp | 21 ++----------- src/network/mtp/impl.h | 21 ++----------- src/network/mtp/internal.h | 21 ++----------- src/network/mtp/threads.cpp | 23 +++----------- src/network/mtp/threads.h | 23 +++----------- src/network/networkexceptions.h | 21 ++----------- src/network/networkpacket.cpp | 21 ++----------- src/network/networkpacket.h | 21 ++----------- src/network/networkprotocol.h | 21 ++----------- src/network/peerhandler.h | 21 ++----------- src/network/serveropcodes.cpp | 23 +++----------- src/network/serveropcodes.h | 23 +++----------- src/network/serverpackethandler.cpp | 21 ++----------- src/network/socket.cpp | 21 ++----------- src/network/socket.h | 21 ++----------- src/nodedef.cpp | 21 ++----------- src/nodedef.h | 21 ++----------- src/nodemetadata.cpp | 21 ++----------- src/nodemetadata.h | 21 ++----------- src/nodetimer.cpp | 21 ++----------- src/nodetimer.h | 21 ++----------- src/objdef.cpp | 21 ++----------- src/objdef.h | 21 ++----------- src/object_properties.cpp | 21 ++----------- src/object_properties.h | 21 ++----------- src/particles.cpp | 21 ++----------- src/particles.h | 21 ++----------- src/pathfinder.cpp | 23 +++----------- src/pathfinder.h | 21 ++----------- src/player.cpp | 21 ++----------- src/player.h | 21 ++----------- src/porting.cpp | 21 ++----------- src/porting.h | 21 ++----------- src/porting_android.cpp | 21 ++----------- src/porting_android.h | 21 ++----------- src/profiler.cpp | 21 ++----------- src/profiler.h | 21 ++----------- src/raycast.cpp | 21 ++----------- src/raycast.h | 21 ++----------- src/reflowscan.cpp | 21 ++----------- src/reflowscan.h | 21 ++----------- src/remoteplayer.cpp | 23 +++----------- src/remoteplayer.h | 23 +++----------- src/rollback_interface.cpp | 21 ++----------- src/rollback_interface.h | 21 ++----------- src/script/common/c_content.cpp | 21 ++----------- src/script/common/c_content.h | 21 ++----------- src/script/common/c_converter.cpp | 21 ++----------- src/script/common/c_converter.h | 21 ++----------- src/script/common/c_internal.cpp | 21 ++----------- src/script/common/c_internal.h | 21 ++----------- src/script/common/c_packer.cpp | 21 ++----------- src/script/common/c_packer.h | 21 ++----------- src/script/common/c_types.cpp | 21 ++----------- src/script/common/c_types.h | 21 ++----------- src/script/common/helper.cpp | 21 ++----------- src/script/common/helper.h | 21 ++----------- src/script/cpp_api/s_async.cpp | 21 ++----------- src/script/cpp_api/s_async.h | 21 ++----------- src/script/cpp_api/s_base.cpp | 21 ++----------- src/script/cpp_api/s_base.h | 21 ++----------- src/script/cpp_api/s_client.cpp | 23 +++----------- src/script/cpp_api/s_client.h | 23 +++----------- src/script/cpp_api/s_entity.cpp | 21 ++----------- src/script/cpp_api/s_entity.h | 21 ++----------- src/script/cpp_api/s_env.cpp | 21 ++----------- src/script/cpp_api/s_env.h | 21 ++----------- src/script/cpp_api/s_internal.h | 21 ++----------- src/script/cpp_api/s_inventory.cpp | 21 ++----------- src/script/cpp_api/s_inventory.h | 21 ++----------- src/script/cpp_api/s_item.cpp | 21 ++----------- src/script/cpp_api/s_item.h | 21 ++----------- src/script/cpp_api/s_mainmenu.cpp | 21 ++----------- src/script/cpp_api/s_mainmenu.h | 21 ++----------- src/script/cpp_api/s_mapgen.cpp | 21 ++----------- src/script/cpp_api/s_mapgen.h | 21 ++----------- src/script/cpp_api/s_modchannels.cpp | 21 ++----------- src/script/cpp_api/s_modchannels.h | 21 ++----------- src/script/cpp_api/s_node.cpp | 21 ++----------- src/script/cpp_api/s_node.h | 21 ++----------- src/script/cpp_api/s_nodemeta.cpp | 21 ++----------- src/script/cpp_api/s_nodemeta.h | 21 ++----------- src/script/cpp_api/s_player.cpp | 21 ++----------- src/script/cpp_api/s_player.h | 21 ++----------- src/script/cpp_api/s_security.cpp | 21 ++----------- src/script/cpp_api/s_security.h | 21 ++----------- src/script/cpp_api/s_server.cpp | 21 ++----------- src/script/cpp_api/s_server.h | 21 ++----------- src/script/lua_api/l_areastore.cpp | 21 ++----------- src/script/lua_api/l_areastore.h | 21 ++----------- src/script/lua_api/l_auth.cpp | 21 ++----------- src/script/lua_api/l_auth.h | 21 ++----------- src/script/lua_api/l_base.cpp | 21 ++----------- src/script/lua_api/l_base.h | 21 ++----------- src/script/lua_api/l_camera.cpp | 21 ++----------- src/script/lua_api/l_camera.h | 21 ++----------- src/script/lua_api/l_client.cpp | 23 +++----------- src/script/lua_api/l_client.h | 23 +++----------- src/script/lua_api/l_client_sound.cpp | 25 ++++------------ src/script/lua_api/l_client_sound.h | 25 ++++------------ src/script/lua_api/l_craft.cpp | 21 ++----------- src/script/lua_api/l_craft.h | 21 ++----------- src/script/lua_api/l_env.cpp | 21 ++----------- src/script/lua_api/l_env.h | 21 ++----------- src/script/lua_api/l_http.cpp | 21 ++----------- src/script/lua_api/l_http.h | 21 ++----------- src/script/lua_api/l_internal.h | 21 ++----------- src/script/lua_api/l_inventory.cpp | 21 ++----------- src/script/lua_api/l_inventory.h | 21 ++----------- src/script/lua_api/l_item.cpp | 21 ++----------- src/script/lua_api/l_item.h | 21 ++----------- src/script/lua_api/l_itemstackmeta.cpp | 25 ++++------------ src/script/lua_api/l_itemstackmeta.h | 25 ++++------------ src/script/lua_api/l_localplayer.cpp | 21 ++----------- src/script/lua_api/l_localplayer.h | 21 ++----------- src/script/lua_api/l_mainmenu.cpp | 21 ++----------- src/script/lua_api/l_mainmenu.h | 21 ++----------- src/script/lua_api/l_mainmenu_sound.cpp | 25 ++++------------ src/script/lua_api/l_mainmenu_sound.h | 25 ++++------------ src/script/lua_api/l_mapgen.cpp | 21 ++----------- src/script/lua_api/l_mapgen.h | 21 ++----------- src/script/lua_api/l_metadata.cpp | 23 +++----------- src/script/lua_api/l_metadata.h | 23 +++----------- src/script/lua_api/l_minimap.cpp | 21 ++----------- src/script/lua_api/l_minimap.h | 21 ++----------- src/script/lua_api/l_modchannels.cpp | 21 ++----------- src/script/lua_api/l_modchannels.h | 21 ++----------- src/script/lua_api/l_nodemeta.cpp | 21 ++----------- src/script/lua_api/l_nodemeta.h | 21 ++----------- src/script/lua_api/l_nodetimer.cpp | 21 ++----------- src/script/lua_api/l_nodetimer.h | 21 ++----------- src/script/lua_api/l_noise.cpp | 21 ++----------- src/script/lua_api/l_noise.h | 21 ++----------- src/script/lua_api/l_object.cpp | 21 ++----------- src/script/lua_api/l_object.h | 21 ++----------- src/script/lua_api/l_particleparams.h | 21 ++----------- src/script/lua_api/l_particles.cpp | 21 ++----------- src/script/lua_api/l_particles.h | 21 ++----------- src/script/lua_api/l_particles_local.cpp | 23 +++----------- src/script/lua_api/l_particles_local.h | 23 +++----------- src/script/lua_api/l_playermeta.cpp | 23 +++----------- src/script/lua_api/l_playermeta.h | 23 +++----------- src/script/lua_api/l_rollback.cpp | 21 ++----------- src/script/lua_api/l_rollback.h | 21 ++----------- src/script/lua_api/l_server.cpp | 21 ++----------- src/script/lua_api/l_server.h | 21 ++----------- src/script/lua_api/l_settings.cpp | 21 ++----------- src/script/lua_api/l_settings.h | 21 ++----------- src/script/lua_api/l_storage.cpp | 23 +++----------- src/script/lua_api/l_storage.h | 23 +++----------- src/script/lua_api/l_util.cpp | 21 ++----------- src/script/lua_api/l_util.h | 21 ++----------- src/script/lua_api/l_vmanip.cpp | 21 ++----------- src/script/lua_api/l_vmanip.h | 21 ++----------- src/script/scripting_client.cpp | 23 +++----------- src/script/scripting_client.h | 23 +++----------- src/script/scripting_emerge.cpp | 21 ++----------- src/script/scripting_emerge.h | 21 ++----------- src/script/scripting_mainmenu.cpp | 21 ++----------- src/script/scripting_mainmenu.h | 21 ++----------- src/script/scripting_server.cpp | 21 ++----------- src/script/scripting_server.h | 21 ++----------- src/serialization.cpp | 21 ++----------- src/serialization.h | 21 ++----------- src/server.cpp | 21 ++----------- src/server.h | 21 ++----------- src/server/activeobjectmgr.cpp | 21 ++----------- src/server/activeobjectmgr.h | 21 ++----------- src/server/ban.cpp | 23 +++----------- src/server/ban.h | 21 ++----------- src/server/clientiface.cpp | 21 ++----------- src/server/clientiface.h | 21 ++----------- src/server/luaentity_sao.cpp | 23 +++----------- src/server/luaentity_sao.h | 23 +++----------- src/server/mods.cpp | 21 ++----------- src/server/mods.h | 21 ++----------- src/server/player_sao.cpp | 23 +++----------- src/server/player_sao.h | 23 +++----------- src/server/rollback.cpp | 21 ++----------- src/server/rollback.h | 21 ++----------- src/server/serveractiveobject.cpp | 21 ++----------- src/server/serveractiveobject.h | 21 ++----------- src/server/serverinventorymgr.cpp | 21 ++----------- src/server/serverinventorymgr.h | 21 ++----------- src/server/serverlist.cpp | 21 ++----------- src/server/serverlist.h | 21 ++----------- src/server/unit_sao.cpp | 23 +++----------- src/server/unit_sao.h | 23 +++----------- src/serverenvironment.cpp | 21 ++----------- src/serverenvironment.h | 21 ++----------- src/servermap.cpp | 21 ++----------- src/servermap.h | 21 ++----------- src/settings.cpp | 21 ++----------- src/settings.h | 21 ++----------- src/skyparams.h | 21 ++----------- src/sound.h | 21 ++----------- src/staticobject.cpp | 21 ++----------- src/staticobject.h | 21 ++----------- src/terminal_chat_console.cpp | 21 ++----------- src/terminal_chat_console.h | 21 ++----------- src/texture_override.cpp | 21 ++----------- src/texture_override.h | 21 ++----------- src/threading/semaphore.cpp | 21 ++----------- src/threading/semaphore.h | 21 ++----------- src/tileanimation.cpp | 21 ++----------- src/tileanimation.h | 21 ++----------- src/tool.cpp | 21 ++----------- src/tool.h | 21 ++----------- src/translation.cpp | 21 ++----------- src/translation.h | 21 ++----------- src/unittest/mesh_compare.cpp | 21 ++----------- src/unittest/mesh_compare.h | 21 ++----------- src/unittest/mock_activeobject.h | 21 ++----------- src/unittest/mock_inventorymanager.h | 21 ++----------- src/unittest/mock_server.h | 21 ++----------- src/unittest/mock_serveractiveobject.h | 21 ++----------- src/unittest/test.cpp | 21 ++----------- src/unittest/test.h | 21 ++----------- src/unittest/test_activeobject.cpp | 21 ++----------- src/unittest/test_address.cpp | 21 ++----------- src/unittest/test_areastore.cpp | 21 ++----------- src/unittest/test_authdatabase.cpp | 21 ++----------- src/unittest/test_ban.cpp | 21 ++----------- src/unittest/test_clientactiveobjectmgr.cpp | 21 ++----------- src/unittest/test_collision.cpp | 21 ++----------- src/unittest/test_compression.cpp | 21 ++----------- src/unittest/test_connection.cpp | 21 ++----------- src/unittest/test_content_mapblock.cpp | 21 ++----------- src/unittest/test_craft.cpp | 21 ++----------- src/unittest/test_datastructures.cpp | 21 ++----------- src/unittest/test_eventmanager.cpp | 21 ++----------- src/unittest/test_filesys.cpp | 21 ++----------- src/unittest/test_gameui.cpp | 21 ++----------- src/unittest/test_inventory.cpp | 21 ++----------- src/unittest/test_irrptr.cpp | 21 ++----------- src/unittest/test_keycode.cpp | 21 ++----------- src/unittest/test_lua.cpp | 23 +++----------- src/unittest/test_map_settings_manager.cpp | 21 ++----------- src/unittest/test_mapnode.cpp | 21 ++----------- src/unittest/test_mesh_compare.cpp | 21 ++----------- src/unittest/test_modchannels.cpp | 21 ++----------- src/unittest/test_modstoragedatabase.cpp | 23 +++----------- src/unittest/test_moveaction.cpp | 21 ++----------- src/unittest/test_nodedef.cpp | 21 ++----------- src/unittest/test_noderesolver.cpp | 21 ++----------- src/unittest/test_noise.cpp | 21 ++----------- src/unittest/test_objdef.cpp | 21 ++----------- src/unittest/test_profiler.cpp | 21 ++----------- src/unittest/test_random.cpp | 21 ++----------- src/unittest/test_sao.cpp | 21 ++----------- src/unittest/test_schematic.cpp | 21 ++----------- src/unittest/test_serialization.cpp | 21 ++----------- src/unittest/test_server_shutdown_state.cpp | 21 ++----------- src/unittest/test_serveractiveobjectmgr.cpp | 21 ++----------- src/unittest/test_servermodmanager.cpp | 21 ++----------- src/unittest/test_settings.cpp | 21 ++----------- src/unittest/test_socket.cpp | 21 ++----------- src/unittest/test_threading.cpp | 21 ++----------- src/unittest/test_utilities.cpp | 21 ++----------- src/unittest/test_voxelalgorithms.cpp | 21 ++----------- src/unittest/test_voxelarea.cpp | 21 ++----------- src/unittest/test_voxelmanipulator.cpp | 21 ++----------- src/util/areastore.cpp | 21 ++----------- src/util/areastore.h | 21 ++----------- src/util/auth.cpp | 21 ++----------- src/util/auth.h | 21 ++----------- src/util/basic_macros.h | 21 ++----------- src/util/container.h | 21 ++----------- src/util/directiontables.cpp | 21 ++----------- src/util/directiontables.h | 21 ++----------- src/util/hex.h | 21 ++----------- src/util/ieee_float.h | 21 ++----------- src/util/metricsbackend.cpp | 21 ++----------- src/util/metricsbackend.h | 21 ++----------- src/util/numeric.cpp | 21 ++----------- src/util/numeric.h | 21 ++----------- src/util/png.cpp | 21 ++----------- src/util/png.h | 21 ++----------- src/util/pointabilities.cpp | 21 ++----------- src/util/pointabilities.h | 21 ++----------- src/util/pointedthing.cpp | 21 ++----------- src/util/pointedthing.h | 21 ++----------- src/util/pointer.h | 21 ++----------- src/util/quicktune.cpp | 21 ++----------- src/util/quicktune.h | 21 ++----------- src/util/quicktune_shortcutter.h | 21 ++----------- src/util/serialize.cpp | 21 ++----------- src/util/serialize.h | 21 ++----------- src/util/stream.h | 21 ++----------- src/util/strfnd.h | 21 ++----------- src/util/string.cpp | 21 ++----------- src/util/string.h | 21 ++----------- src/util/thread.h | 21 ++----------- src/util/timetaker.cpp | 21 ++----------- src/util/timetaker.h | 21 ++----------- src/util/tracy_wrapper.h | 21 ++----------- src/version.cpp | 21 ++----------- src/version.h | 21 ++----------- src/voxel.cpp | 21 ++----------- src/voxel.h | 21 ++----------- src/voxelalgorithms.cpp | 21 ++----------- src/voxelalgorithms.h | 21 ++----------- 618 files changed, 2030 insertions(+), 11307 deletions(-) diff --git a/src/activeobject.h b/src/activeobject.h index cb868346a..28a7f0eeb 100644 --- a/src/activeobject.h +++ b/src/activeobject.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/activeobjectmgr.h b/src/activeobjectmgr.h index 369e8acf5..943147160 100644 --- a/src/activeobjectmgr.h +++ b/src/activeobjectmgr.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2018 nerzhul, Loic BLOT - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2018 nerzhul, Loic BLOT #pragma once diff --git a/src/benchmark/benchmark.cpp b/src/benchmark/benchmark.cpp index 8b7077703..34c9d5b8e 100644 --- a/src/benchmark/benchmark.cpp +++ b/src/benchmark/benchmark.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2022 Minetest Authors - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2022 Minetest Authors #include "benchmark/benchmark.h" diff --git a/src/benchmark/benchmark.h b/src/benchmark/benchmark.h index 3726c3925..a3dbf9fe8 100644 --- a/src/benchmark/benchmark.h +++ b/src/benchmark/benchmark.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2022 Minetest Authors - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2022 Minetest Authors #pragma once diff --git a/src/benchmark/benchmark_lighting.cpp b/src/benchmark/benchmark_lighting.cpp index 1ca2d441a..4c29b627f 100644 --- a/src/benchmark/benchmark_lighting.cpp +++ b/src/benchmark/benchmark_lighting.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2022 Minetest Authors - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2022 Minetest Authors #include "catch.h" #include "voxelalgorithms.h" diff --git a/src/benchmark/benchmark_mapblock.cpp b/src/benchmark/benchmark_mapblock.cpp index 0f52c1d96..317388efd 100644 --- a/src/benchmark/benchmark_mapblock.cpp +++ b/src/benchmark/benchmark_mapblock.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2023 Minetest Authors - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2023 Minetest Authors #include "catch.h" #include "mapblock.h" diff --git a/src/benchmark/benchmark_mapmodify.cpp b/src/benchmark/benchmark_mapmodify.cpp index 2ce346fb7..dc599996b 100644 --- a/src/benchmark/benchmark_mapmodify.cpp +++ b/src/benchmark/benchmark_mapmodify.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2023 sfan5 - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2023 sfan5 #include "catch.h" #include "util/container.h" diff --git a/src/benchmark/benchmark_serialize.cpp b/src/benchmark/benchmark_serialize.cpp index 649d4b43a..9b77dd7c8 100644 --- a/src/benchmark/benchmark_serialize.cpp +++ b/src/benchmark/benchmark_serialize.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2022 Minetest Authors - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2022 Minetest Authors #include "catch.h" #include "util/serialize.h" diff --git a/src/chat.cpp b/src/chat.cpp index d9e2716a3..f1d82d886 100644 --- a/src/chat.cpp +++ b/src/chat.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "chat.h" diff --git a/src/chat.h b/src/chat.h index adba2b62e..d328732c3 100644 --- a/src/chat.h +++ b/src/chat.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/chat_interface.h b/src/chat_interface.h index 5dc3d3880..1276c3a23 100644 --- a/src/chat_interface.h +++ b/src/chat_interface.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2015 est31 - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2015 est31 #pragma once diff --git a/src/chatmessage.h b/src/chatmessage.h index f4ecd631d..0793e4de7 100644 --- a/src/chatmessage.h +++ b/src/chatmessage.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2017 nerzhul, Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2017 nerzhul, Loic Blot #pragma once diff --git a/src/client/activeobjectmgr.cpp b/src/client/activeobjectmgr.cpp index 96c8fd9bb..1867fc78b 100644 --- a/src/client/activeobjectmgr.cpp +++ b/src/client/activeobjectmgr.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2018 nerzhul, Loic BLOT - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2018 nerzhul, Loic BLOT #include #include diff --git a/src/client/activeobjectmgr.h b/src/client/activeobjectmgr.h index 05931387f..40b944097 100644 --- a/src/client/activeobjectmgr.h +++ b/src/client/activeobjectmgr.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2018 nerzhul, Loic BLOT - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2018 nerzhul, Loic BLOT #pragma once diff --git a/src/client/camera.cpp b/src/client/camera.cpp index a37245f9a..4abe062d7 100644 --- a/src/client/camera.cpp +++ b/src/client/camera.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #include "camera.h" #include "debug.h" diff --git a/src/client/camera.h b/src/client/camera.h index 8f85da0e1..9a8e2d36a 100644 --- a/src/client/camera.h +++ b/src/client/camera.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/client/client.cpp b/src/client/client.cpp index 3da5f777e..6d42e7551 100644 --- a/src/client/client.cpp +++ b/src/client/client.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include #include diff --git a/src/client/client.h b/src/client/client.h index 0f9a8dafe..c6803cbe1 100644 --- a/src/client/client.h +++ b/src/client/client.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/client/clientenvironment.cpp b/src/client/clientenvironment.cpp index 08c5586ea..b6ae67588 100644 --- a/src/client/clientenvironment.cpp +++ b/src/client/clientenvironment.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2017 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2017 celeron55, Perttu Ahola #include "util/serialize.h" #include "util/pointedthing.h" diff --git a/src/client/clientenvironment.h b/src/client/clientenvironment.h index a47cb7b5b..df0f19f67 100644 --- a/src/client/clientenvironment.h +++ b/src/client/clientenvironment.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2017 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2017 celeron55, Perttu Ahola #pragma once diff --git a/src/client/clientevent.h b/src/client/clientevent.h index 8c505786b..297124b30 100644 --- a/src/client/clientevent.h +++ b/src/client/clientevent.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2017 nerzhul, Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2017 nerzhul, Loic Blot #pragma once diff --git a/src/client/clientlauncher.cpp b/src/client/clientlauncher.cpp index a78872155..9d87ec3fd 100644 --- a/src/client/clientlauncher.cpp +++ b/src/client/clientlauncher.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #include "IAttributes.h" #include "gui/mainmenumanager.h" diff --git a/src/client/clientlauncher.h b/src/client/clientlauncher.h index ad7604c87..f349cec57 100644 --- a/src/client/clientlauncher.h +++ b/src/client/clientlauncher.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/client/clientmap.cpp b/src/client/clientmap.cpp index b62268bea..9a788e3cc 100644 --- a/src/client/clientmap.cpp +++ b/src/client/clientmap.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #include "clientmap.h" #include "client.h" diff --git a/src/client/clientmap.h b/src/client/clientmap.h index 2f0a2e986..4855575f6 100644 --- a/src/client/clientmap.h +++ b/src/client/clientmap.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/client/clientmedia.cpp b/src/client/clientmedia.cpp index 45fb1c6aa..2c6cb69b3 100644 --- a/src/client/clientmedia.cpp +++ b/src/client/clientmedia.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "clientmedia.h" #include "gettext.h" diff --git a/src/client/clientmedia.h b/src/client/clientmedia.h index 27af86e4b..40801321f 100644 --- a/src/client/clientmedia.h +++ b/src/client/clientmedia.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/client/clientobject.cpp b/src/client/clientobject.cpp index 13131dd4c..e2b505947 100644 --- a/src/client/clientobject.cpp +++ b/src/client/clientobject.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #include "clientobject.h" #include "debug.h" diff --git a/src/client/clientobject.h b/src/client/clientobject.h index 8c2c68d15..95f926928 100644 --- a/src/client/clientobject.h +++ b/src/client/clientobject.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/client/clientsimpleobject.h b/src/client/clientsimpleobject.h index f4a40bcd3..c2700d286 100644 --- a/src/client/clientsimpleobject.h +++ b/src/client/clientsimpleobject.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/client/clouds.cpp b/src/client/clouds.cpp index b18f70c37..37f044f22 100644 --- a/src/client/clouds.cpp +++ b/src/client/clouds.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #include "client/renderingengine.h" #include "client/shader.h" diff --git a/src/client/clouds.h b/src/client/clouds.h index 7193c03f9..06a4f090b 100644 --- a/src/client/clouds.h +++ b/src/client/clouds.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/client/content_cao.cpp b/src/client/content_cao.cpp index c8acb3875..5d98f3fe8 100644 --- a/src/client/content_cao.cpp +++ b/src/client/content_cao.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #include "content_cao.h" #include diff --git a/src/client/content_cao.h b/src/client/content_cao.h index d138e39c3..714a7f241 100644 --- a/src/client/content_cao.h +++ b/src/client/content_cao.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/client/content_cso.cpp b/src/client/content_cso.cpp index 733044b23..ac455d9eb 100644 --- a/src/client/content_cso.cpp +++ b/src/client/content_cso.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "content_cso.h" #include diff --git a/src/client/content_cso.h b/src/client/content_cso.h index b94580a61..4eb3277fb 100644 --- a/src/client/content_cso.h +++ b/src/client/content_cso.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/client/content_mapblock.cpp b/src/client/content_mapblock.cpp index 6ce3ca0f4..0c1113d0c 100644 --- a/src/client/content_mapblock.cpp +++ b/src/client/content_mapblock.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #include #include "content_mapblock.h" diff --git a/src/client/content_mapblock.h b/src/client/content_mapblock.h index 1c3060c83..88b0e8a79 100644 --- a/src/client/content_mapblock.h +++ b/src/client/content_mapblock.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/client/event_manager.h b/src/client/event_manager.h index 99895049c..35b36adce 100644 --- a/src/client/event_manager.h +++ b/src/client/event_manager.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/client/filecache.cpp b/src/client/filecache.cpp index 4dd7ec72f..dbf41d863 100644 --- a/src/client/filecache.cpp +++ b/src/client/filecache.cpp @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola -Copyright (C) 2013 Jonathan Neuschäfer - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola +// Copyright (C) 2013 Jonathan Neuschäfer #include "filecache.h" diff --git a/src/client/filecache.h b/src/client/filecache.h index c58e71522..564f85106 100644 --- a/src/client/filecache.h +++ b/src/client/filecache.h @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola -Copyright (C) 2013 Jonathan Neuschäfer - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola +// Copyright (C) 2013 Jonathan Neuschäfer #pragma once diff --git a/src/client/fontengine.cpp b/src/client/fontengine.cpp index e3f38be62..aa3e0cd4c 100644 --- a/src/client/fontengine.cpp +++ b/src/client/fontengine.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2014 sapier - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2014 sapier #include "fontengine.h" #include diff --git a/src/client/fontengine.h b/src/client/fontengine.h index aa8ab7e36..c346f5f8b 100644 --- a/src/client/fontengine.h +++ b/src/client/fontengine.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2014 sapier - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2014 sapier #pragma once diff --git a/src/client/game.cpp b/src/client/game.cpp index a4920a164..27b58334f 100644 --- a/src/client/game.cpp +++ b/src/client/game.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #include "game.h" diff --git a/src/client/game.h b/src/client/game.h index a487d12f4..6b838e2bc 100644 --- a/src/client/game.h +++ b/src/client/game.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/client/gameui.cpp b/src/client/gameui.cpp index 41071ef66..3408ba196 100644 --- a/src/client/gameui.cpp +++ b/src/client/gameui.cpp @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola -Copyright (C) 2018 nerzhul, Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola +// Copyright (C) 2018 nerzhul, Loic Blot #include "gameui.h" #include diff --git a/src/client/gameui.h b/src/client/gameui.h index 59741c96c..95674232a 100644 --- a/src/client/gameui.h +++ b/src/client/gameui.h @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola -Copyright (C) 2018 nerzhul, Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola +// Copyright (C) 2018 nerzhul, Loic Blot #pragma once diff --git a/src/client/guiscalingfilter.cpp b/src/client/guiscalingfilter.cpp index eebf44103..a8d17722b 100644 --- a/src/client/guiscalingfilter.cpp +++ b/src/client/guiscalingfilter.cpp @@ -1,20 +1,6 @@ -/* -Copyright (C) 2015 Aaron Suen - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2015 Aaron Suen #include "guiscalingfilter.h" #include "imagefilters.h" diff --git a/src/client/guiscalingfilter.h b/src/client/guiscalingfilter.h index c929bb2d3..5c8311f3d 100644 --- a/src/client/guiscalingfilter.h +++ b/src/client/guiscalingfilter.h @@ -1,20 +1,6 @@ -/* -Copyright (C) 2015 Aaron Suen - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2015 Aaron Suen #pragma once diff --git a/src/client/hud.cpp b/src/client/hud.cpp index dcb38c9b6..2da9efa5e 100644 --- a/src/client/hud.cpp +++ b/src/client/hud.cpp @@ -1,23 +1,8 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola -Copyright (C) 2010-2013 blue42u, Jonathon Anderson -Copyright (C) 2010-2013 kwolekr, Ryan Kwolek - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola +// Copyright (C) 2010-2013 blue42u, Jonathon Anderson +// Copyright (C) 2010-2013 kwolekr, Ryan Kwolek #include "client/hud.h" #include diff --git a/src/client/hud.h b/src/client/hud.h index 120215f45..aa4d53cda 100644 --- a/src/client/hud.h +++ b/src/client/hud.h @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2010-2013 kwolekr, Ryan Kwolek -Copyright (C) 2017 red-001 - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 kwolekr, Ryan Kwolek +// Copyright (C) 2017 red-001 #pragma once diff --git a/src/client/imagefilters.cpp b/src/client/imagefilters.cpp index 57e444151..6d460f0c4 100644 --- a/src/client/imagefilters.cpp +++ b/src/client/imagefilters.cpp @@ -1,20 +1,6 @@ -/* -Copyright (C) 2015 Aaron Suen - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2015 Aaron Suen #include "imagefilters.h" #include "util/numeric.h" diff --git a/src/client/imagefilters.h b/src/client/imagefilters.h index f7e06ad09..606cf8c58 100644 --- a/src/client/imagefilters.h +++ b/src/client/imagefilters.h @@ -1,20 +1,6 @@ -/* -Copyright (C) 2015 Aaron Suen - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2015 Aaron Suen #pragma once diff --git a/src/client/imagesource.cpp b/src/client/imagesource.cpp index 1b9131797..0f4e81f97 100644 --- a/src/client/imagesource.cpp +++ b/src/client/imagesource.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #include "imagesource.h" diff --git a/src/client/imagesource.h b/src/client/imagesource.h index 488ef1e2d..d6b7a4e9b 100644 --- a/src/client/imagesource.h +++ b/src/client/imagesource.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/client/inputhandler.cpp b/src/client/inputhandler.cpp index 2ce058ff4..88969f008 100644 --- a/src/client/inputhandler.cpp +++ b/src/client/inputhandler.cpp @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola -Copyright (C) 2017 nerzhul, Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola +// Copyright (C) 2017 nerzhul, Loic Blot #include "settings.h" #include "util/numeric.h" diff --git a/src/client/inputhandler.h b/src/client/inputhandler.h index ee76151f4..b34c22d78 100644 --- a/src/client/inputhandler.h +++ b/src/client/inputhandler.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/client/joystick_controller.cpp b/src/client/joystick_controller.cpp index 5acb0b751..b8d93dcef 100644 --- a/src/client/joystick_controller.cpp +++ b/src/client/joystick_controller.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2016 est31, - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2016 est31, #include "joystick_controller.h" #include "irrlichttypes_extrabloated.h" diff --git a/src/client/joystick_controller.h b/src/client/joystick_controller.h index d74cc3db6..c5302b533 100644 --- a/src/client/joystick_controller.h +++ b/src/client/joystick_controller.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2016 est31, - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2016 est31, #pragma once diff --git a/src/client/keycode.cpp b/src/client/keycode.cpp index 19613229a..0a3b0db3f 100644 --- a/src/client/keycode.cpp +++ b/src/client/keycode.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #include "keycode.h" #include "settings.h" diff --git a/src/client/keycode.h b/src/client/keycode.h index bb679391d..4c63be7fa 100644 --- a/src/client/keycode.h +++ b/src/client/keycode.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/client/keys.h b/src/client/keys.h index e120a2d92..4bce131d4 100644 --- a/src/client/keys.h +++ b/src/client/keys.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2016 est31, - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2016 est31, #pragma once diff --git a/src/client/localplayer.cpp b/src/client/localplayer.cpp index cf2e63698..2ea4c5495 100644 --- a/src/client/localplayer.cpp +++ b/src/client/localplayer.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #include "localplayer.h" #include diff --git a/src/client/localplayer.h b/src/client/localplayer.h index 05fcb2cbb..db99d3679 100644 --- a/src/client/localplayer.h +++ b/src/client/localplayer.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/client/mapblock_mesh.cpp b/src/client/mapblock_mesh.cpp index 071b03132..0922b9500 100644 --- a/src/client/mapblock_mesh.cpp +++ b/src/client/mapblock_mesh.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #include "mapblock_mesh.h" #include "client.h" diff --git a/src/client/mapblock_mesh.h b/src/client/mapblock_mesh.h index c52df5ed3..9bdebec7c 100644 --- a/src/client/mapblock_mesh.h +++ b/src/client/mapblock_mesh.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/client/mesh.cpp b/src/client/mesh.cpp index 9e66404e3..3f947ae50 100644 --- a/src/client/mesh.cpp +++ b/src/client/mesh.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #include "mesh.h" #include "S3DVertex.h" diff --git a/src/client/mesh.h b/src/client/mesh.h index c04cfb0af..5fd0ebb0e 100644 --- a/src/client/mesh.h +++ b/src/client/mesh.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/client/mesh_generator_thread.cpp b/src/client/mesh_generator_thread.cpp index 21656aa6e..ec868980c 100644 --- a/src/client/mesh_generator_thread.cpp +++ b/src/client/mesh_generator_thread.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013, 2017 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013, 2017 celeron55, Perttu Ahola #include "mesh_generator_thread.h" #include "settings.h" diff --git a/src/client/mesh_generator_thread.h b/src/client/mesh_generator_thread.h index 607bc66df..d6e2863bf 100644 --- a/src/client/mesh_generator_thread.h +++ b/src/client/mesh_generator_thread.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013, 2017 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013, 2017 celeron55, Perttu Ahola #pragma once diff --git a/src/client/meshgen/collector.cpp b/src/client/meshgen/collector.cpp index 86c188c3f..476f3112b 100644 --- a/src/client/meshgen/collector.cpp +++ b/src/client/meshgen/collector.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2018 numzero, Lobachevskiy Vitaliy - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2018 numzero, Lobachevskiy Vitaliy #include "collector.h" #include diff --git a/src/client/meshgen/collector.h b/src/client/meshgen/collector.h index 093c20eb8..79256e262 100644 --- a/src/client/meshgen/collector.h +++ b/src/client/meshgen/collector.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2018 numzero, Lobachevskiy Vitaliy - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2018 numzero, Lobachevskiy Vitaliy #pragma once #include diff --git a/src/client/minimap.cpp b/src/client/minimap.cpp index f959d00be..3bc208808 100644 --- a/src/client/minimap.cpp +++ b/src/client/minimap.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2015 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2015 celeron55, Perttu Ahola #include "minimap.h" #include diff --git a/src/client/minimap.h b/src/client/minimap.h index 0c419fa63..5bc69894f 100644 --- a/src/client/minimap.h +++ b/src/client/minimap.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2015 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2015 celeron55, Perttu Ahola #pragma once diff --git a/src/client/mtevent.h b/src/client/mtevent.h index 731841815..87097f986 100644 --- a/src/client/mtevent.h +++ b/src/client/mtevent.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/client/particles.cpp b/src/client/particles.cpp index e197b4f8a..114abba08 100644 --- a/src/client/particles.cpp +++ b/src/client/particles.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "particles.h" #include diff --git a/src/client/particles.h b/src/client/particles.h index 92ea8fb67..6a8d09a47 100644 --- a/src/client/particles.h +++ b/src/client/particles.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/client/render/anaglyph.cpp b/src/client/render/anaglyph.cpp index b1117998f..fe3a5f0f8 100644 --- a/src/client/render/anaglyph.cpp +++ b/src/client/render/anaglyph.cpp @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola -Copyright (C) 2017 numzero, Lobachevskiy Vitaliy - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola +// Copyright (C) 2017 numzero, Lobachevskiy Vitaliy #include "anaglyph.h" #include "client/camera.h" diff --git a/src/client/render/anaglyph.h b/src/client/render/anaglyph.h index f817e2c46..dff3d30d7 100644 --- a/src/client/render/anaglyph.h +++ b/src/client/render/anaglyph.h @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola -Copyright (C) 2017 numzero, Lobachevskiy Vitaliy - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola +// Copyright (C) 2017 numzero, Lobachevskiy Vitaliy #pragma once #include "stereo.h" diff --git a/src/client/render/core.cpp b/src/client/render/core.cpp index dfd9dc02e..ef780269a 100644 --- a/src/client/render/core.cpp +++ b/src/client/render/core.cpp @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola -Copyright (C) 2017 numzero, Lobachevskiy Vitaliy - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola +// Copyright (C) 2017 numzero, Lobachevskiy Vitaliy #include "core.h" #include "plain.h" diff --git a/src/client/render/core.h b/src/client/render/core.h index fb60b274e..bfb2cb25a 100644 --- a/src/client/render/core.h +++ b/src/client/render/core.h @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola -Copyright (C) 2017 numzero, Lobachevskiy Vitaliy - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola +// Copyright (C) 2017 numzero, Lobachevskiy Vitaliy #pragma once #include "irrlichttypes_extrabloated.h" diff --git a/src/client/render/factory.cpp b/src/client/render/factory.cpp index 2e9d5eb5f..55048b2d8 100644 --- a/src/client/render/factory.cpp +++ b/src/client/render/factory.cpp @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola -Copyright (C) 2017 numzero, Lobachevskiy Vitaliy - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola +// Copyright (C) 2017 numzero, Lobachevskiy Vitaliy #include "factory.h" #include "log.h" diff --git a/src/client/render/factory.h b/src/client/render/factory.h index e3339a836..328b2fbab 100644 --- a/src/client/render/factory.h +++ b/src/client/render/factory.h @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola -Copyright (C) 2017 numzero, Lobachevskiy Vitaliy - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola +// Copyright (C) 2017 numzero, Lobachevskiy Vitaliy #pragma once diff --git a/src/client/render/interlaced.cpp b/src/client/render/interlaced.cpp index 594871526..ae085877f 100644 --- a/src/client/render/interlaced.cpp +++ b/src/client/render/interlaced.cpp @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola -Copyright (C) 2017 numzero, Lobachevskiy Vitaliy - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola +// Copyright (C) 2017 numzero, Lobachevskiy Vitaliy #include "interlaced.h" #include "secondstage.h" diff --git a/src/client/render/interlaced.h b/src/client/render/interlaced.h index b22fbdac6..9d0e797e2 100644 --- a/src/client/render/interlaced.h +++ b/src/client/render/interlaced.h @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola -Copyright (C) 2017 numzero, Lobachevskiy Vitaliy - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola +// Copyright (C) 2017 numzero, Lobachevskiy Vitaliy #pragma once #include "stereo.h" diff --git a/src/client/render/pipeline.cpp b/src/client/render/pipeline.cpp index 8fccc7808..5558d05b0 100644 --- a/src/client/render/pipeline.cpp +++ b/src/client/render/pipeline.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2022 x2048, Dmitry Kostenko - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2022 x2048, Dmitry Kostenko #include "pipeline.h" #include "client/client.h" diff --git a/src/client/render/pipeline.h b/src/client/render/pipeline.h index d0e3b2c38..9fa47c329 100644 --- a/src/client/render/pipeline.h +++ b/src/client/render/pipeline.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2022 x2048, Dmitry Kostenko - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2022 x2048, Dmitry Kostenko #pragma once #include "irrlichttypes_extrabloated.h" diff --git a/src/client/render/plain.cpp b/src/client/render/plain.cpp index 0ca2476ee..c08ae78b2 100644 --- a/src/client/render/plain.cpp +++ b/src/client/render/plain.cpp @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola -Copyright (C) 2017 numzero, Lobachevskiy Vitaliy - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola +// Copyright (C) 2017 numzero, Lobachevskiy Vitaliy #include "plain.h" #include "secondstage.h" diff --git a/src/client/render/plain.h b/src/client/render/plain.h index 4fd3de97a..889dd0f01 100644 --- a/src/client/render/plain.h +++ b/src/client/render/plain.h @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola -Copyright (C) 2017 numzero, Lobachevskiy Vitaliy - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola +// Copyright (C) 2017 numzero, Lobachevskiy Vitaliy #pragma once #include "core.h" diff --git a/src/client/render/secondstage.cpp b/src/client/render/secondstage.cpp index da6536b97..b5156cd41 100644 --- a/src/client/render/secondstage.cpp +++ b/src/client/render/secondstage.cpp @@ -1,23 +1,8 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola -Copyright (C) 2017 numzero, Lobachevskiy Vitaliy -Copyright (C) 2020 appgurueu, Lars Mueller - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola +// Copyright (C) 2017 numzero, Lobachevskiy Vitaliy +// Copyright (C) 2020 appgurueu, Lars Mueller #include "secondstage.h" #include "client/client.h" diff --git a/src/client/render/secondstage.h b/src/client/render/secondstage.h index 9e3640927..6b0e42289 100644 --- a/src/client/render/secondstage.h +++ b/src/client/render/secondstage.h @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola -Copyright (C) 2017 numzero, Lobachevskiy Vitaliy - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola +// Copyright (C) 2017 numzero, Lobachevskiy Vitaliy #pragma once #include "stereo.h" diff --git a/src/client/render/sidebyside.cpp b/src/client/render/sidebyside.cpp index 14a723385..02a7e7a86 100644 --- a/src/client/render/sidebyside.cpp +++ b/src/client/render/sidebyside.cpp @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola -Copyright (C) 2017 numzero, Lobachevskiy Vitaliy - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola +// Copyright (C) 2017 numzero, Lobachevskiy Vitaliy #include "sidebyside.h" #include "client/hud.h" diff --git a/src/client/render/sidebyside.h b/src/client/render/sidebyside.h index edf76ea8f..8c7b28583 100644 --- a/src/client/render/sidebyside.h +++ b/src/client/render/sidebyside.h @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola -Copyright (C) 2017 numzero, Lobachevskiy Vitaliy - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola +// Copyright (C) 2017 numzero, Lobachevskiy Vitaliy #pragma once #include "stereo.h" diff --git a/src/client/render/stereo.cpp b/src/client/render/stereo.cpp index 8d8d62db1..5570fe1c2 100644 --- a/src/client/render/stereo.cpp +++ b/src/client/render/stereo.cpp @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola -Copyright (C) 2017 numzero, Lobachevskiy Vitaliy - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola +// Copyright (C) 2017 numzero, Lobachevskiy Vitaliy #include "stereo.h" #include "client/client.h" diff --git a/src/client/render/stereo.h b/src/client/render/stereo.h index f0fa6accc..567478cf5 100644 --- a/src/client/render/stereo.h +++ b/src/client/render/stereo.h @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola -Copyright (C) 2017 numzero, Lobachevskiy Vitaliy - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola +// Copyright (C) 2017 numzero, Lobachevskiy Vitaliy #pragma once #include "core.h" diff --git a/src/client/renderingengine.cpp b/src/client/renderingengine.cpp index 828591149..4e45bd4cd 100644 --- a/src/client/renderingengine.cpp +++ b/src/client/renderingengine.cpp @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola -Copyright (C) 2017 nerzhul, Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola +// Copyright (C) 2017 nerzhul, Loic Blot #include #include diff --git a/src/client/renderingengine.h b/src/client/renderingengine.h index 5aa630350..ce6647212 100644 --- a/src/client/renderingengine.h +++ b/src/client/renderingengine.h @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola -Copyright (C) 2017 nerzhul, Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola +// Copyright (C) 2017 nerzhul, Loic Blot #pragma once diff --git a/src/client/shader.cpp b/src/client/shader.cpp index d368ccb09..a227eb37a 100644 --- a/src/client/shader.cpp +++ b/src/client/shader.cpp @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola -Copyright (C) 2013 Kahrl - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola +// Copyright (C) 2013 Kahrl #include #include diff --git a/src/client/shader.h b/src/client/shader.h index 72dac0833..c1d02bf2c 100644 --- a/src/client/shader.h +++ b/src/client/shader.h @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola -Copyright (C) 2013 Kahrl - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola +// Copyright (C) 2013 Kahrl #pragma once diff --git a/src/client/shadows/dynamicshadows.cpp b/src/client/shadows/dynamicshadows.cpp index 2722c871b..a5eea8f38 100644 --- a/src/client/shadows/dynamicshadows.cpp +++ b/src/client/shadows/dynamicshadows.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2021 Liso - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2021 Liso #include diff --git a/src/client/shadows/dynamicshadows.h b/src/client/shadows/dynamicshadows.h index f592ec077..2951c0a6e 100644 --- a/src/client/shadows/dynamicshadows.h +++ b/src/client/shadows/dynamicshadows.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2021 Liso - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2021 Liso #pragma once diff --git a/src/client/shadows/dynamicshadowsrender.cpp b/src/client/shadows/dynamicshadowsrender.cpp index cfa54dfb7..909e2761e 100644 --- a/src/client/shadows/dynamicshadowsrender.cpp +++ b/src/client/shadows/dynamicshadowsrender.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2021 Liso - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2021 Liso #include #include diff --git a/src/client/shadows/dynamicshadowsrender.h b/src/client/shadows/dynamicshadowsrender.h index d4437be68..5395c90b3 100644 --- a/src/client/shadows/dynamicshadowsrender.h +++ b/src/client/shadows/dynamicshadowsrender.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2021 Liso - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2021 Liso #pragma once diff --git a/src/client/shadows/shadowsScreenQuad.cpp b/src/client/shadows/shadowsScreenQuad.cpp index d1713578d..cf2ab214d 100644 --- a/src/client/shadows/shadowsScreenQuad.cpp +++ b/src/client/shadows/shadowsScreenQuad.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2021 Liso - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2021 Liso #include "shadowsScreenQuad.h" #include diff --git a/src/client/shadows/shadowsScreenQuad.h b/src/client/shadows/shadowsScreenQuad.h index fe54b89c8..561db19f6 100644 --- a/src/client/shadows/shadowsScreenQuad.h +++ b/src/client/shadows/shadowsScreenQuad.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2021 Liso - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2021 Liso #pragma once #include "irrlichttypes_extrabloated.h" diff --git a/src/client/shadows/shadowsshadercallbacks.cpp b/src/client/shadows/shadowsshadercallbacks.cpp index fc4f73186..f662d21e7 100644 --- a/src/client/shadows/shadowsshadercallbacks.cpp +++ b/src/client/shadows/shadowsshadercallbacks.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2021 Liso - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2021 Liso #include "client/shadows/shadowsshadercallbacks.h" #include "client/renderingengine.h" diff --git a/src/client/shadows/shadowsshadercallbacks.h b/src/client/shadows/shadowsshadercallbacks.h index beac25d72..882a13d0c 100644 --- a/src/client/shadows/shadowsshadercallbacks.h +++ b/src/client/shadows/shadowsshadercallbacks.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2021 Liso - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2021 Liso #pragma once #include "irrlichttypes_extrabloated.h" diff --git a/src/client/sky.cpp b/src/client/sky.cpp index 054c1ace2..cd02b5554 100644 --- a/src/client/sky.cpp +++ b/src/client/sky.cpp @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola -Copyright (C) 2020 numzero, Lobachevskiy Vitaliy - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola +// Copyright (C) 2020 numzero, Lobachevskiy Vitaliy #include #include "sky.h" diff --git a/src/client/sky.h b/src/client/sky.h index eba301e18..8986a505c 100644 --- a/src/client/sky.h +++ b/src/client/sky.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/client/sound.cpp b/src/client/sound.cpp index b2b035b4e..290fb8708 100644 --- a/src/client/sound.cpp +++ b/src/client/sound.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2023 DS - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2023 DS #include "sound.h" diff --git a/src/client/sound.h b/src/client/sound.h index 294a0db7d..2db73b31a 100644 --- a/src/client/sound.h +++ b/src/client/sound.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/client/sound/al_extensions.cpp b/src/client/sound/al_extensions.cpp index bc696be35..fb1e3098e 100644 --- a/src/client/sound/al_extensions.cpp +++ b/src/client/sound/al_extensions.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2023 DS - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2023 DS #include "al_extensions.h" diff --git a/src/client/sound/al_extensions.h b/src/client/sound/al_extensions.h index cfa270d06..70a4f06ae 100644 --- a/src/client/sound/al_extensions.h +++ b/src/client/sound/al_extensions.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2023 DS - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2023 DS #pragma once diff --git a/src/client/sound/al_helpers.cpp b/src/client/sound/al_helpers.cpp index e3b7bda94..de6740c0a 100644 --- a/src/client/sound/al_helpers.cpp +++ b/src/client/sound/al_helpers.cpp @@ -1,26 +1,10 @@ -/* -Minetest -Copyright (C) 2022 DS -Copyright (C) 2013 celeron55, Perttu Ahola -OpenAL support based on work by: -Copyright (C) 2011 Sebastian 'Bahamada' Rühl -Copyright (C) 2011 Cyriaque 'Cisoun' Skrapits -Copyright (C) 2011 Giuseppe Bilotta - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2022 DS +// Copyright (C) 2013 celeron55, Perttu Ahola +// Copyright (C) 2011 Sebastian 'Bahamada' Rühl +// Copyright (C) 2011 Cyriaque 'Cisoun' Skrapits +// Copyright (C) 2011 Giuseppe Bilotta #include "al_helpers.h" diff --git a/src/client/sound/al_helpers.h b/src/client/sound/al_helpers.h index 566d9deeb..36f19ccad 100644 --- a/src/client/sound/al_helpers.h +++ b/src/client/sound/al_helpers.h @@ -1,26 +1,10 @@ -/* -Minetest -Copyright (C) 2022 DS -Copyright (C) 2013 celeron55, Perttu Ahola -OpenAL support based on work by: -Copyright (C) 2011 Sebastian 'Bahamada' Rühl -Copyright (C) 2011 Cyriaque 'Cisoun' Skrapits -Copyright (C) 2011 Giuseppe Bilotta - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2022 DS +// Copyright (C) 2013 celeron55, Perttu Ahola +// Copyright (C) 2011 Sebastian 'Bahamada' Rühl +// Copyright (C) 2011 Cyriaque 'Cisoun' Skrapits +// Copyright (C) 2011 Giuseppe Bilotta #pragma once diff --git a/src/client/sound/ogg_file.cpp b/src/client/sound/ogg_file.cpp index 660dfdf94..633b758f8 100644 --- a/src/client/sound/ogg_file.cpp +++ b/src/client/sound/ogg_file.cpp @@ -1,26 +1,10 @@ -/* -Minetest -Copyright (C) 2022 DS -Copyright (C) 2013 celeron55, Perttu Ahola -OpenAL support based on work by: -Copyright (C) 2011 Sebastian 'Bahamada' Rühl -Copyright (C) 2011 Cyriaque 'Cisoun' Skrapits -Copyright (C) 2011 Giuseppe Bilotta - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2022 DS +// Copyright (C) 2013 celeron55, Perttu Ahola +// Copyright (C) 2011 Sebastian 'Bahamada' Rühl +// Copyright (C) 2011 Cyriaque 'Cisoun' Skrapits +// Copyright (C) 2011 Giuseppe Bilotta #include "ogg_file.h" diff --git a/src/client/sound/ogg_file.h b/src/client/sound/ogg_file.h index 5054a6e64..924d04800 100644 --- a/src/client/sound/ogg_file.h +++ b/src/client/sound/ogg_file.h @@ -1,26 +1,10 @@ -/* -Minetest -Copyright (C) 2022 DS -Copyright (C) 2013 celeron55, Perttu Ahola -OpenAL support based on work by: -Copyright (C) 2011 Sebastian 'Bahamada' Rühl -Copyright (C) 2011 Cyriaque 'Cisoun' Skrapits -Copyright (C) 2011 Giuseppe Bilotta - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2022 DS +// Copyright (C) 2013 celeron55, Perttu Ahola +// Copyright (C) 2011 Sebastian 'Bahamada' Rühl +// Copyright (C) 2011 Cyriaque 'Cisoun' Skrapits +// Copyright (C) 2011 Giuseppe Bilotta #pragma once diff --git a/src/client/sound/playing_sound.cpp b/src/client/sound/playing_sound.cpp index 622dbdef8..c19b359fc 100644 --- a/src/client/sound/playing_sound.cpp +++ b/src/client/sound/playing_sound.cpp @@ -1,26 +1,10 @@ -/* -Minetest -Copyright (C) 2022 DS -Copyright (C) 2013 celeron55, Perttu Ahola -OpenAL support based on work by: -Copyright (C) 2011 Sebastian 'Bahamada' Rühl -Copyright (C) 2011 Cyriaque 'Cisoun' Skrapits -Copyright (C) 2011 Giuseppe Bilotta - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2022 DS +// Copyright (C) 2013 celeron55, Perttu Ahola +// Copyright (C) 2011 Sebastian 'Bahamada' Rühl +// Copyright (C) 2011 Cyriaque 'Cisoun' Skrapits +// Copyright (C) 2011 Giuseppe Bilotta #include "playing_sound.h" diff --git a/src/client/sound/playing_sound.h b/src/client/sound/playing_sound.h index 0f4c18fcb..b06899745 100644 --- a/src/client/sound/playing_sound.h +++ b/src/client/sound/playing_sound.h @@ -1,26 +1,10 @@ -/* -Minetest -Copyright (C) 2022 DS -Copyright (C) 2013 celeron55, Perttu Ahola -OpenAL support based on work by: -Copyright (C) 2011 Sebastian 'Bahamada' Rühl -Copyright (C) 2011 Cyriaque 'Cisoun' Skrapits -Copyright (C) 2011 Giuseppe Bilotta - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2022 DS +// Copyright (C) 2013 celeron55, Perttu Ahola +// Copyright (C) 2011 Sebastian 'Bahamada' Rühl +// Copyright (C) 2011 Cyriaque 'Cisoun' Skrapits +// Copyright (C) 2011 Giuseppe Bilotta #pragma once diff --git a/src/client/sound/proxy_sound_manager.cpp b/src/client/sound/proxy_sound_manager.cpp index 266e68e00..982fd7a25 100644 --- a/src/client/sound/proxy_sound_manager.cpp +++ b/src/client/sound/proxy_sound_manager.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2023 DS - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2023 DS #include "proxy_sound_manager.h" diff --git a/src/client/sound/proxy_sound_manager.h b/src/client/sound/proxy_sound_manager.h index edad70baa..0b2b13abf 100644 --- a/src/client/sound/proxy_sound_manager.h +++ b/src/client/sound/proxy_sound_manager.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2023 DS - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2023 DS #pragma once diff --git a/src/client/sound/sound_constants.h b/src/client/sound/sound_constants.h index 08aa2329b..6af6d0b3e 100644 --- a/src/client/sound/sound_constants.h +++ b/src/client/sound/sound_constants.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2022 DS - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2022 DS #pragma once diff --git a/src/client/sound/sound_data.cpp b/src/client/sound/sound_data.cpp index 261549d38..8cc3b0e7a 100644 --- a/src/client/sound/sound_data.cpp +++ b/src/client/sound/sound_data.cpp @@ -1,26 +1,10 @@ -/* -Minetest -Copyright (C) 2022 DS -Copyright (C) 2013 celeron55, Perttu Ahola -OpenAL support based on work by: -Copyright (C) 2011 Sebastian 'Bahamada' Rühl -Copyright (C) 2011 Cyriaque 'Cisoun' Skrapits -Copyright (C) 2011 Giuseppe Bilotta - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2022 DS +// Copyright (C) 2013 celeron55, Perttu Ahola +// Copyright (C) 2011 Sebastian 'Bahamada' Rühl +// Copyright (C) 2011 Cyriaque 'Cisoun' Skrapits +// Copyright (C) 2011 Giuseppe Bilotta #include "sound_data.h" diff --git a/src/client/sound/sound_data.h b/src/client/sound/sound_data.h index 67fcd7756..e91da5ecf 100644 --- a/src/client/sound/sound_data.h +++ b/src/client/sound/sound_data.h @@ -1,26 +1,10 @@ -/* -Minetest -Copyright (C) 2022 DS -Copyright (C) 2013 celeron55, Perttu Ahola -OpenAL support based on work by: -Copyright (C) 2011 Sebastian 'Bahamada' Rühl -Copyright (C) 2011 Cyriaque 'Cisoun' Skrapits -Copyright (C) 2011 Giuseppe Bilotta - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2022 DS +// Copyright (C) 2013 celeron55, Perttu Ahola +// Copyright (C) 2011 Sebastian 'Bahamada' Rühl +// Copyright (C) 2011 Cyriaque 'Cisoun' Skrapits +// Copyright (C) 2011 Giuseppe Bilotta #pragma once diff --git a/src/client/sound/sound_manager.cpp b/src/client/sound/sound_manager.cpp index fc171d565..b88bdfa98 100644 --- a/src/client/sound/sound_manager.cpp +++ b/src/client/sound/sound_manager.cpp @@ -1,26 +1,10 @@ -/* -Minetest -Copyright (C) 2022 DS -Copyright (C) 2013 celeron55, Perttu Ahola -OpenAL support based on work by: -Copyright (C) 2011 Sebastian 'Bahamada' Rühl -Copyright (C) 2011 Cyriaque 'Cisoun' Skrapits -Copyright (C) 2011 Giuseppe Bilotta - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2022 DS +// Copyright (C) 2013 celeron55, Perttu Ahola +// Copyright (C) 2011 Sebastian 'Bahamada' Rühl +// Copyright (C) 2011 Cyriaque 'Cisoun' Skrapits +// Copyright (C) 2011 Giuseppe Bilotta #include "sound_manager.h" diff --git a/src/client/sound/sound_manager.h b/src/client/sound/sound_manager.h index 2a631db02..b72d93d10 100644 --- a/src/client/sound/sound_manager.h +++ b/src/client/sound/sound_manager.h @@ -1,26 +1,10 @@ -/* -Minetest -Copyright (C) 2022 DS -Copyright (C) 2013 celeron55, Perttu Ahola -OpenAL support based on work by: -Copyright (C) 2011 Sebastian 'Bahamada' Rühl -Copyright (C) 2011 Cyriaque 'Cisoun' Skrapits -Copyright (C) 2011 Giuseppe Bilotta - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2022 DS +// Copyright (C) 2013 celeron55, Perttu Ahola +// Copyright (C) 2011 Sebastian 'Bahamada' Rühl +// Copyright (C) 2011 Cyriaque 'Cisoun' Skrapits +// Copyright (C) 2011 Giuseppe Bilotta #pragma once diff --git a/src/client/sound/sound_manager_messages.h b/src/client/sound/sound_manager_messages.h index e33729705..2d3d73cd2 100644 --- a/src/client/sound/sound_manager_messages.h +++ b/src/client/sound/sound_manager_messages.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2023 DS - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2023 DS #pragma once diff --git a/src/client/sound/sound_openal.cpp b/src/client/sound/sound_openal.cpp index d44a1fbe2..16da0a0ed 100644 --- a/src/client/sound/sound_openal.cpp +++ b/src/client/sound/sound_openal.cpp @@ -1,25 +1,9 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola -OpenAL support based on work by: -Copyright (C) 2011 Sebastian 'Bahamada' Rühl -Copyright (C) 2011 Cyriaque 'Cisoun' Skrapits -Copyright (C) 2011 Giuseppe Bilotta - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola +// Copyright (C) 2011 Sebastian 'Bahamada' Rühl +// Copyright (C) 2011 Cyriaque 'Cisoun' Skrapits +// Copyright (C) 2011 Giuseppe Bilotta #include "sound_openal.h" diff --git a/src/client/sound/sound_openal.h b/src/client/sound/sound_openal.h index bae4fbd79..e62210b9a 100644 --- a/src/client/sound/sound_openal.h +++ b/src/client/sound/sound_openal.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/client/sound/sound_singleton.cpp b/src/client/sound/sound_singleton.cpp index dff339be0..9ed12caa3 100644 --- a/src/client/sound/sound_singleton.cpp +++ b/src/client/sound/sound_singleton.cpp @@ -1,26 +1,10 @@ -/* -Minetest -Copyright (C) 2022 DS -Copyright (C) 2013 celeron55, Perttu Ahola -OpenAL support based on work by: -Copyright (C) 2011 Sebastian 'Bahamada' Rühl -Copyright (C) 2011 Cyriaque 'Cisoun' Skrapits -Copyright (C) 2011 Giuseppe Bilotta - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2022 DS +// Copyright (C) 2013 celeron55, Perttu Ahola +// Copyright (C) 2011 Sebastian 'Bahamada' Rühl +// Copyright (C) 2011 Cyriaque 'Cisoun' Skrapits +// Copyright (C) 2011 Giuseppe Bilotta #include "sound_singleton.h" diff --git a/src/client/sound/sound_singleton.h b/src/client/sound/sound_singleton.h index 10ecc0d96..0ad2c52dc 100644 --- a/src/client/sound/sound_singleton.h +++ b/src/client/sound/sound_singleton.h @@ -1,26 +1,10 @@ -/* -Minetest -Copyright (C) 2022 DS -Copyright (C) 2013 celeron55, Perttu Ahola -OpenAL support based on work by: -Copyright (C) 2011 Sebastian 'Bahamada' Rühl -Copyright (C) 2011 Cyriaque 'Cisoun' Skrapits -Copyright (C) 2011 Giuseppe Bilotta - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2022 DS +// Copyright (C) 2013 celeron55, Perttu Ahola +// Copyright (C) 2011 Sebastian 'Bahamada' Rühl +// Copyright (C) 2011 Cyriaque 'Cisoun' Skrapits +// Copyright (C) 2011 Giuseppe Bilotta #pragma once diff --git a/src/client/texturepaths.cpp b/src/client/texturepaths.cpp index ba28a243c..960171859 100644 --- a/src/client/texturepaths.cpp +++ b/src/client/texturepaths.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #include "texturepaths.h" diff --git a/src/client/texturepaths.h b/src/client/texturepaths.h index dc5119188..599f637a1 100644 --- a/src/client/texturepaths.h +++ b/src/client/texturepaths.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/client/texturesource.cpp b/src/client/texturesource.cpp index 7f2701c78..e53a1b670 100644 --- a/src/client/texturesource.cpp +++ b/src/client/texturesource.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #include "texturesource.h" diff --git a/src/client/texturesource.h b/src/client/texturesource.h index 324c58e4f..46cf50c45 100644 --- a/src/client/texturesource.h +++ b/src/client/texturesource.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/client/tile.cpp b/src/client/tile.cpp index 1870547da..ad5811d64 100644 --- a/src/client/tile.cpp +++ b/src/client/tile.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #include "tile.h" diff --git a/src/client/tile.h b/src/client/tile.h index f41b127bf..ceee54243 100644 --- a/src/client/tile.h +++ b/src/client/tile.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/client/wieldmesh.cpp b/src/client/wieldmesh.cpp index 81ca99b5f..28fe362a7 100644 --- a/src/client/wieldmesh.cpp +++ b/src/client/wieldmesh.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2014 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2014 celeron55, Perttu Ahola #include "wieldmesh.h" #include "settings.h" diff --git a/src/client/wieldmesh.h b/src/client/wieldmesh.h index 08240c8ef..8291cce14 100644 --- a/src/client/wieldmesh.h +++ b/src/client/wieldmesh.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2014 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2014 celeron55, Perttu Ahola #pragma once diff --git a/src/clientdynamicinfo.cpp b/src/clientdynamicinfo.cpp index d0930c15c..46283b33c 100644 --- a/src/clientdynamicinfo.cpp +++ b/src/clientdynamicinfo.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2022-3 rubenwardy - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2022-3 rubenwardy #include "clientdynamicinfo.h" diff --git a/src/clientdynamicinfo.h b/src/clientdynamicinfo.h index ae10ef745..0d378374e 100644 --- a/src/clientdynamicinfo.h +++ b/src/clientdynamicinfo.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2022-3 rubenwardy - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2022-3 rubenwardy #pragma once diff --git a/src/collision.cpp b/src/collision.cpp index 0ef48830d..6bad618d8 100644 --- a/src/collision.cpp +++ b/src/collision.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "collision.h" #include diff --git a/src/collision.h b/src/collision.h index a698e6328..20dd42201 100644 --- a/src/collision.h +++ b/src/collision.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/constants.h b/src/constants.h index b4a2c7767..de490cd2e 100644 --- a/src/constants.h +++ b/src/constants.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/content/content.cpp b/src/content/content.cpp index f056ad1e4..37b67d4f0 100644 --- a/src/content/content.cpp +++ b/src/content/content.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2018 rubenwardy - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2018 rubenwardy #include #include "content/content.h" diff --git a/src/content/content.h b/src/content/content.h index c7fc220dc..2a98efe11 100644 --- a/src/content/content.h +++ b/src/content/content.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2018 rubenwardy - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2018 rubenwardy #pragma once #include "config.h" diff --git a/src/content/mod_configuration.cpp b/src/content/mod_configuration.cpp index 1dba67ef1..37d2eadd4 100644 --- a/src/content/mod_configuration.cpp +++ b/src/content/mod_configuration.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013-22 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013-22 celeron55, Perttu Ahola #include "mod_configuration.h" #include "log.h" diff --git a/src/content/mod_configuration.h b/src/content/mod_configuration.h index 200694652..17436ef9a 100644 --- a/src/content/mod_configuration.h +++ b/src/content/mod_configuration.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013-22 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013-22 celeron55, Perttu Ahola #pragma once diff --git a/src/content/mods.cpp b/src/content/mods.cpp index ea13a84a1..a95ea0227 100644 --- a/src/content/mods.cpp +++ b/src/content/mods.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include #include diff --git a/src/content/mods.h b/src/content/mods.h index 228684c6e..b6083fe19 100644 --- a/src/content/mods.h +++ b/src/content/mods.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/content/subgames.cpp b/src/content/subgames.cpp index f48633c20..65d1699be 100644 --- a/src/content/subgames.cpp +++ b/src/content/subgames.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include #include "content/subgames.h" diff --git a/src/content/subgames.h b/src/content/subgames.h index 7cad65066..1884ce578 100644 --- a/src/content/subgames.h +++ b/src/content/subgames.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/content_mapnode.cpp b/src/content_mapnode.cpp index 6da5f45ad..a88e31b39 100644 --- a/src/content_mapnode.cpp +++ b/src/content_mapnode.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #include "content_mapnode.h" diff --git a/src/content_mapnode.h b/src/content_mapnode.h index 76c3f6cd1..32c7b0dac 100644 --- a/src/content_mapnode.h +++ b/src/content_mapnode.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/content_nodemeta.cpp b/src/content_nodemeta.cpp index f3ffc4bef..cf818dec9 100644 --- a/src/content_nodemeta.cpp +++ b/src/content_nodemeta.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #include "content_nodemeta.h" #include "nodemetadata.h" diff --git a/src/content_nodemeta.h b/src/content_nodemeta.h index b853274f5..789a05368 100644 --- a/src/content_nodemeta.h +++ b/src/content_nodemeta.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/convert_json.cpp b/src/convert_json.cpp index 2e169c8b9..8ec9e8b08 100644 --- a/src/convert_json.cpp +++ b/src/convert_json.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "convert_json.h" diff --git a/src/convert_json.h b/src/convert_json.h index fdc68ccee..6a523ffb2 100644 --- a/src/convert_json.h +++ b/src/convert_json.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/craftdef.cpp b/src/craftdef.cpp index 611632579..78e03f0c5 100644 --- a/src/craftdef.cpp +++ b/src/craftdef.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "craftdef.h" diff --git a/src/craftdef.h b/src/craftdef.h index 23a7d7ea0..7ca3e3a91 100644 --- a/src/craftdef.h +++ b/src/craftdef.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/database/database-dummy.cpp b/src/database/database-dummy.cpp index 300de1792..cc885d38e 100644 --- a/src/database/database-dummy.cpp +++ b/src/database/database-dummy.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola /* Dummy database class diff --git a/src/database/database-dummy.h b/src/database/database-dummy.h index 05f28317b..ef365aadd 100644 --- a/src/database/database-dummy.h +++ b/src/database/database-dummy.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/database/database-files.cpp b/src/database/database-files.cpp index 612fed6c6..e19d51108 100644 --- a/src/database/database-files.cpp +++ b/src/database/database-files.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2017 nerzhul, Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2017 nerzhul, Loic Blot #include "database-files.h" #include "convert_json.h" diff --git a/src/database/database-files.h b/src/database/database-files.h index c1bd034f4..32d2b5815 100644 --- a/src/database/database-files.h +++ b/src/database/database-files.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2017 nerzhul, Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2017 nerzhul, Loic Blot #pragma once diff --git a/src/database/database-leveldb.cpp b/src/database/database-leveldb.cpp index 71c56f90a..8579ac65a 100644 --- a/src/database/database-leveldb.cpp +++ b/src/database/database-leveldb.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "config.h" diff --git a/src/database/database-leveldb.h b/src/database/database-leveldb.h index d6a57b66b..6028d26b6 100644 --- a/src/database/database-leveldb.h +++ b/src/database/database-leveldb.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/database/database-postgresql.cpp b/src/database/database-postgresql.cpp index 7c464c81a..2d10f0db9 100644 --- a/src/database/database-postgresql.cpp +++ b/src/database/database-postgresql.cpp @@ -1,20 +1,6 @@ -/* -Copyright (C) 2016 Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2016 Loic Blot #include "config.h" diff --git a/src/database/database-postgresql.h b/src/database/database-postgresql.h index 28ff1c35f..61e443b11 100644 --- a/src/database/database-postgresql.h +++ b/src/database/database-postgresql.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/database/database-redis.cpp b/src/database/database-redis.cpp index a93f7711e..5699f0b31 100644 --- a/src/database/database-redis.cpp +++ b/src/database/database-redis.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2014 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2014 celeron55, Perttu Ahola #include "config.h" diff --git a/src/database/database-redis.h b/src/database/database-redis.h index 324fcd177..2f0d1d823 100644 --- a/src/database/database-redis.h +++ b/src/database/database-redis.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2014 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2014 celeron55, Perttu Ahola #pragma once diff --git a/src/database/database-sqlite3.cpp b/src/database/database-sqlite3.cpp index 32b3be65b..c3390fbe0 100644 --- a/src/database/database-sqlite3.cpp +++ b/src/database/database-sqlite3.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola /* SQLite format specification: diff --git a/src/database/database-sqlite3.h b/src/database/database-sqlite3.h index d008f43e2..a89c0b1e7 100644 --- a/src/database/database-sqlite3.h +++ b/src/database/database-sqlite3.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/database/database.cpp b/src/database/database.cpp index 12e0e1a0f..9182bbe95 100644 --- a/src/database/database.cpp +++ b/src/database/database.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "database.h" #include "irrlichttypes.h" diff --git a/src/database/database.h b/src/database/database.h index d4a3f005c..8d6efdee8 100644 --- a/src/database/database.h +++ b/src/database/database.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/daynightratio.h b/src/daynightratio.h index 538767cad..74bafdcc8 100644 --- a/src/daynightratio.h +++ b/src/daynightratio.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/debug.cpp b/src/debug.cpp index 8a9704dd7..a9a609590 100644 --- a/src/debug.cpp +++ b/src/debug.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "porting.h" diff --git a/src/debug.h b/src/debug.h index 80497f2b3..e1c9c6298 100644 --- a/src/debug.h +++ b/src/debug.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index 049359ef1..4d9120fd1 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "settings.h" #include "porting.h" diff --git a/src/defaultsettings.h b/src/defaultsettings.h index c239b3c12..f49bc2b89 100644 --- a/src/defaultsettings.h +++ b/src/defaultsettings.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/dummygamedef.h b/src/dummygamedef.h index 567c30534..932d8be3d 100644 --- a/src/dummygamedef.h +++ b/src/dummygamedef.h @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola -Copyright (C) 2022 TurkeyMcMac, Jude Melton-Houghton - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola +// Copyright (C) 2022 TurkeyMcMac, Jude Melton-Houghton #pragma once diff --git a/src/dummymap.h b/src/dummymap.h index 5f2881371..ab36f211b 100644 --- a/src/dummymap.h +++ b/src/dummymap.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2022 TurkeyMcMac, Jude Melton-Houghton - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2022 TurkeyMcMac, Jude Melton-Houghton #pragma once diff --git a/src/emerge.cpp b/src/emerge.cpp index 788e2b745..f1980579b 100644 --- a/src/emerge.cpp +++ b/src/emerge.cpp @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola -Copyright (C) 2010-2013 kwolekr, Ryan Kwolek - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola +// Copyright (C) 2010-2013 kwolekr, Ryan Kwolek #include "emerge_internal.h" diff --git a/src/emerge.h b/src/emerge.h index cbdcc4c7c..85ce9875f 100644 --- a/src/emerge.h +++ b/src/emerge.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 kwolekr, Ryan Kwolek - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 kwolekr, Ryan Kwolek #pragma once diff --git a/src/emerge_internal.h b/src/emerge_internal.h index 08e36778d..6dd438603 100644 --- a/src/emerge_internal.h +++ b/src/emerge_internal.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 kwolekr, Ryan Kwolek - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 kwolekr, Ryan Kwolek #pragma once diff --git a/src/environment.cpp b/src/environment.cpp index 887bc36f7..533959723 100644 --- a/src/environment.cpp +++ b/src/environment.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #include #include "environment.h" diff --git a/src/environment.h b/src/environment.h index 62e52a8a4..925154d84 100644 --- a/src/environment.h +++ b/src/environment.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/exceptions.h b/src/exceptions.h index efa315b96..902d1b571 100644 --- a/src/exceptions.h +++ b/src/exceptions.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/face_position_cache.cpp b/src/face_position_cache.cpp index 7a8f235fa..65a66a37c 100644 --- a/src/face_position_cache.cpp +++ b/src/face_position_cache.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2015 Nerzhul, Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2015 Nerzhul, Loic Blot #include "face_position_cache.h" #include "threading/mutex_auto_lock.h" diff --git a/src/face_position_cache.h b/src/face_position_cache.h index 36cb06484..8462ae4d4 100644 --- a/src/face_position_cache.h +++ b/src/face_position_cache.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2015 Nerzhul, Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2015 Nerzhul, Loic Blot #pragma once diff --git a/src/filesys.cpp b/src/filesys.cpp index ad0b4b49e..8881eb2ca 100644 --- a/src/filesys.cpp +++ b/src/filesys.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "filesys.h" #include "util/string.h" diff --git a/src/filesys.h b/src/filesys.h index c36428c9c..dededcdb3 100644 --- a/src/filesys.h +++ b/src/filesys.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/gamedef.h b/src/gamedef.h index f8d6d79e7..fa38a2bdf 100644 --- a/src/gamedef.h +++ b/src/gamedef.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/gameparams.h b/src/gameparams.h index b138f8771..7c20cccf3 100644 --- a/src/gameparams.h +++ b/src/gameparams.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/gettext.cpp b/src/gettext.cpp index f60eaae23..59ce2409c 100644 --- a/src/gettext.cpp +++ b/src/gettext.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include #include diff --git a/src/gettext.h b/src/gettext.h index 507d27e64..ca47c1274 100644 --- a/src/gettext.h +++ b/src/gettext.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/gettime.h b/src/gettime.h index 943137ad2..3a77c45ed 100644 --- a/src/gettime.h +++ b/src/gettime.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/gui/StyleSpec.h b/src/gui/StyleSpec.h index 373590a50..3755e105f 100644 --- a/src/gui/StyleSpec.h +++ b/src/gui/StyleSpec.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2019 rubenwardy - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2019 rubenwardy #pragma once diff --git a/src/gui/guiBox.cpp b/src/gui/guiBox.cpp index 972eb4538..e29389662 100644 --- a/src/gui/guiBox.cpp +++ b/src/gui/guiBox.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "guiBox.h" #include diff --git a/src/gui/guiBox.h b/src/gui/guiBox.h index ca8f83771..4d83eaace 100644 --- a/src/gui/guiBox.h +++ b/src/gui/guiBox.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/gui/guiButtonImage.cpp b/src/gui/guiButtonImage.cpp index d47371f06..fd3481d85 100644 --- a/src/gui/guiButtonImage.cpp +++ b/src/gui/guiButtonImage.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "guiButtonImage.h" diff --git a/src/gui/guiButtonImage.h b/src/gui/guiButtonImage.h index c32ffc797..c07be178b 100644 --- a/src/gui/guiButtonImage.h +++ b/src/gui/guiButtonImage.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/gui/guiButtonItemImage.cpp b/src/gui/guiButtonItemImage.cpp index d9ab4b935..9794b1889 100644 --- a/src/gui/guiButtonItemImage.cpp +++ b/src/gui/guiButtonItemImage.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "guiButtonItemImage.h" diff --git a/src/gui/guiButtonItemImage.h b/src/gui/guiButtonItemImage.h index 205e957a7..d4d00b82e 100644 --- a/src/gui/guiButtonItemImage.h +++ b/src/gui/guiButtonItemImage.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/gui/guiChatConsole.cpp b/src/gui/guiChatConsole.cpp index c04eeebc3..28aea66c1 100644 --- a/src/gui/guiChatConsole.cpp +++ b/src/gui/guiChatConsole.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "guiChatConsole.h" #include "chat.h" diff --git a/src/gui/guiChatConsole.h b/src/gui/guiChatConsole.h index 7555dabe3..8e6c32fcd 100644 --- a/src/gui/guiChatConsole.h +++ b/src/gui/guiChatConsole.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/gui/guiEditBox.cpp b/src/gui/guiEditBox.cpp index 34689fc13..9aa12bce4 100644 --- a/src/gui/guiEditBox.cpp +++ b/src/gui/guiEditBox.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2021 Minetest - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2021 Minetest #include "guiEditBox.h" diff --git a/src/gui/guiEditBox.h b/src/gui/guiEditBox.h index 4c7413f54..be9df89ff 100644 --- a/src/gui/guiEditBox.h +++ b/src/gui/guiEditBox.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2021 Minetest - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2021 Minetest #pragma once diff --git a/src/gui/guiEngine.cpp b/src/gui/guiEngine.cpp index 8cdbb97fb..912bdbc75 100644 --- a/src/gui/guiEngine.cpp +++ b/src/gui/guiEngine.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 sapier - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 sapier #include "guiEngine.h" diff --git a/src/gui/guiEngine.h b/src/gui/guiEngine.h index 2df0a0b60..5c95e9a4c 100644 --- a/src/gui/guiEngine.h +++ b/src/gui/guiEngine.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 sapier - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 sapier #pragma once diff --git a/src/gui/guiFormSpecMenu.cpp b/src/gui/guiFormSpecMenu.cpp index efd7b7e8c..ed1c3009d 100644 --- a/src/gui/guiFormSpecMenu.cpp +++ b/src/gui/guiFormSpecMenu.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include diff --git a/src/gui/guiFormSpecMenu.h b/src/gui/guiFormSpecMenu.h index 7c4be4301..5c3fcd80d 100644 --- a/src/gui/guiFormSpecMenu.h +++ b/src/gui/guiFormSpecMenu.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/gui/guiHyperText.cpp b/src/gui/guiHyperText.cpp index 393e06cc1..e3900a1fd 100644 --- a/src/gui/guiHyperText.cpp +++ b/src/gui/guiHyperText.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2019 EvicenceBKidscode / Pierre-Yves Rollo - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2019 EvicenceBKidscode / Pierre-Yves Rollo #include "guiHyperText.h" #include "guiScrollBar.h" diff --git a/src/gui/guiHyperText.h b/src/gui/guiHyperText.h index 0616a37ce..d11e80dd7 100644 --- a/src/gui/guiHyperText.h +++ b/src/gui/guiHyperText.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2019 EvicenceBKidscode / Pierre-Yves Rollo - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2019 EvicenceBKidscode / Pierre-Yves Rollo #pragma once diff --git a/src/gui/guiInventoryList.cpp b/src/gui/guiInventoryList.cpp index 1dd36bfc9..e5c61e86b 100644 --- a/src/gui/guiInventoryList.cpp +++ b/src/gui/guiInventoryList.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "guiInventoryList.h" #include "guiFormSpecMenu.h" diff --git a/src/gui/guiInventoryList.h b/src/gui/guiInventoryList.h index 8ef63c8bc..a4a53a48b 100644 --- a/src/gui/guiInventoryList.h +++ b/src/gui/guiInventoryList.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/gui/guiItemImage.cpp b/src/gui/guiItemImage.cpp index 0c543e391..9e9205f52 100644 --- a/src/gui/guiItemImage.cpp +++ b/src/gui/guiItemImage.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "guiItemImage.h" #include "client/client.h" diff --git a/src/gui/guiItemImage.h b/src/gui/guiItemImage.h index 6fede6564..8d3dadfa7 100644 --- a/src/gui/guiItemImage.h +++ b/src/gui/guiItemImage.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/gui/guiKeyChangeMenu.cpp b/src/gui/guiKeyChangeMenu.cpp index 08ae5987e..6d3a0c531 100644 --- a/src/gui/guiKeyChangeMenu.cpp +++ b/src/gui/guiKeyChangeMenu.cpp @@ -1,23 +1,8 @@ -/* - Minetest - Copyright (C) 2010-2013 celeron55, Perttu Ahola - Copyright (C) 2013 Ciaran Gultnieks - Copyright (C) 2013 teddydestodes - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola +// Copyright (C) 2013 Ciaran Gultnieks +// Copyright (C) 2013 teddydestodes #include "guiKeyChangeMenu.h" #include "debug.h" diff --git a/src/gui/guiKeyChangeMenu.h b/src/gui/guiKeyChangeMenu.h index 6bb3a9050..6544840cb 100644 --- a/src/gui/guiKeyChangeMenu.h +++ b/src/gui/guiKeyChangeMenu.h @@ -1,23 +1,8 @@ -/* - Minetest - Copyright (C) 2010-2013 celeron55, Perttu Ahola - Copyright (C) 2013 Ciaran Gultnieks - Copyright (C) 2013 teddydestodes - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola +// Copyright (C) 2013 Ciaran Gultnieks +// Copyright (C) 2013 teddydestodes #pragma once diff --git a/src/gui/guiMainMenu.h b/src/gui/guiMainMenu.h index 9b8ff383c..c92787adb 100644 --- a/src/gui/guiMainMenu.h +++ b/src/gui/guiMainMenu.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/gui/guiPathSelectMenu.cpp b/src/gui/guiPathSelectMenu.cpp index b4c3d36c3..31eb9c740 100644 --- a/src/gui/guiPathSelectMenu.cpp +++ b/src/gui/guiPathSelectMenu.cpp @@ -1,21 +1,6 @@ -/* - Minetest - Copyright (C) 2013 sapier - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 sapier #include "guiPathSelectMenu.h" #include "guiFormSpecMenu.h" //required because of TextDest only !!! diff --git a/src/gui/guiPathSelectMenu.h b/src/gui/guiPathSelectMenu.h index 7757b2d7b..9a1afc974 100644 --- a/src/gui/guiPathSelectMenu.h +++ b/src/gui/guiPathSelectMenu.h @@ -1,21 +1,7 @@ -/* - Minetest - Copyright (C) 2013 sapier - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 sapier #pragma once diff --git a/src/gui/guiScene.cpp b/src/gui/guiScene.cpp index eba9918c3..a41cf0782 100644 --- a/src/gui/guiScene.cpp +++ b/src/gui/guiScene.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2020 Jean-Patrick Guerrero - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2020 Jean-Patrick Guerrero #include "guiScene.h" diff --git a/src/gui/guiScene.h b/src/gui/guiScene.h index 0634669f7..f9b6981c5 100644 --- a/src/gui/guiScene.h +++ b/src/gui/guiScene.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2020 Jean-Patrick Guerrero - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2020 Jean-Patrick Guerrero #pragma once diff --git a/src/gui/guiScrollContainer.cpp b/src/gui/guiScrollContainer.cpp index 13ba5c35f..ff94b2769 100644 --- a/src/gui/guiScrollContainer.cpp +++ b/src/gui/guiScrollContainer.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2020 DS - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2020 DS #include "guiScrollContainer.h" diff --git a/src/gui/guiScrollContainer.h b/src/gui/guiScrollContainer.h index d6871a53e..523d1cd42 100644 --- a/src/gui/guiScrollContainer.h +++ b/src/gui/guiScrollContainer.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2020 DS - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2020 DS #pragma once diff --git a/src/gui/guiTable.cpp b/src/gui/guiTable.cpp index a58020300..6c1ea91b2 100644 --- a/src/gui/guiTable.cpp +++ b/src/gui/guiTable.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "guiTable.h" diff --git a/src/gui/guiTable.h b/src/gui/guiTable.h index 271649ff2..2d4ebbac4 100644 --- a/src/gui/guiTable.h +++ b/src/gui/guiTable.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/gui/mainmenumanager.h b/src/gui/mainmenumanager.h index 25ff475f4..a37db2a32 100644 --- a/src/gui/mainmenumanager.h +++ b/src/gui/mainmenumanager.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/gui/modalMenu.cpp b/src/gui/modalMenu.cpp index ad4839170..f2ce5a5bf 100644 --- a/src/gui/modalMenu.cpp +++ b/src/gui/modalMenu.cpp @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola -Copyright (C) 2018 stujones11, Stuart Jones - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola +// Copyright (C) 2018 stujones11, Stuart Jones #include #include diff --git a/src/gui/modalMenu.h b/src/gui/modalMenu.h index 2f770f9f5..62cbcfc1d 100644 --- a/src/gui/modalMenu.h +++ b/src/gui/modalMenu.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/gui/profilergraph.cpp b/src/gui/profilergraph.cpp index ab4796cb9..22e6608b8 100644 --- a/src/gui/profilergraph.cpp +++ b/src/gui/profilergraph.cpp @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola -Copyright (C) 2018 nerzhul, Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola +// Copyright (C) 2018 nerzhul, Loic Blot #include "porting.h" #include "profilergraph.h" diff --git a/src/gui/profilergraph.h b/src/gui/profilergraph.h index c92cbf837..04f114961 100644 --- a/src/gui/profilergraph.h +++ b/src/gui/profilergraph.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2018 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2018 celeron55, Perttu Ahola #pragma once diff --git a/src/gui/touchcontrols.cpp b/src/gui/touchcontrols.cpp index f3301a64d..d7e46787b 100644 --- a/src/gui/touchcontrols.cpp +++ b/src/gui/touchcontrols.cpp @@ -1,24 +1,8 @@ -/* -Copyright (C) 2014 sapier -Copyright (C) 2018 srifqi, Muhammad Rifqi Priyo Susanto - -Copyright (C) 2024 grorp, Gregor Parzefall - - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2014 sapier +// Copyright (C) 2018 srifqi, Muhammad Rifqi Priyo Susanto +// Copyright (C) 2024 grorp, Gregor Parzefall #include "touchcontrols.h" diff --git a/src/gui/touchcontrols.h b/src/gui/touchcontrols.h index 2d3d4fbb0..cb3e8e8bf 100644 --- a/src/gui/touchcontrols.h +++ b/src/gui/touchcontrols.h @@ -1,22 +1,7 @@ -/* -Copyright (C) 2014 sapier -Copyright (C) 2024 grorp, Gregor Parzefall - - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2014 sapier +// Copyright (C) 2024 grorp, Gregor Parzefall #pragma once diff --git a/src/httpfetch.cpp b/src/httpfetch.cpp index 771e539e5..b6e4dd263 100644 --- a/src/httpfetch.cpp +++ b/src/httpfetch.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "httpfetch.h" #include "porting.h" // for sleep_ms(), get_sysinfo(), secure_rand_fill_buf() diff --git a/src/httpfetch.h b/src/httpfetch.h index 88a4cd727..a04b969df 100644 --- a/src/httpfetch.h +++ b/src/httpfetch.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/hud.cpp b/src/hud.cpp index e66eff1e5..256567163 100644 --- a/src/hud.cpp +++ b/src/hud.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2018 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2018 celeron55, Perttu Ahola #include "hud.h" #include diff --git a/src/hud.h b/src/hud.h index ac79aa750..214d14512 100644 --- a/src/hud.h +++ b/src/hud.h @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2010-2013 kwolekr, Ryan Kwolek -Copyright (C) 2017 red-001 - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 kwolekr, Ryan Kwolek +// Copyright (C) 2017 red-001 #pragma once diff --git a/src/inventory.cpp b/src/inventory.cpp index 3c132c718..0ba59ceea 100644 --- a/src/inventory.cpp +++ b/src/inventory.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #include "inventory.h" #include "serialization.h" diff --git a/src/inventory.h b/src/inventory.h index 9f7265b76..d39e9e97c 100644 --- a/src/inventory.h +++ b/src/inventory.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/inventorymanager.cpp b/src/inventorymanager.cpp index 6c66fd351..9704da7d0 100644 --- a/src/inventorymanager.cpp +++ b/src/inventorymanager.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #include "inventorymanager.h" #include "debug.h" diff --git a/src/inventorymanager.h b/src/inventorymanager.h index 8bc44f483..df559629d 100644 --- a/src/inventorymanager.h +++ b/src/inventorymanager.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/irr_aabb3d.h b/src/irr_aabb3d.h index 73bb2db7a..14d5eba55 100644 --- a/src/irr_aabb3d.h +++ b/src/irr_aabb3d.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/irr_v2d.h b/src/irr_v2d.h index a9065766b..76abf7460 100644 --- a/src/irr_v2d.h +++ b/src/irr_v2d.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/irr_v3d.h b/src/irr_v3d.h index 3e95c7913..ad3bc40b2 100644 --- a/src/irr_v3d.h +++ b/src/irr_v3d.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/irrlicht_changes/printing.h b/src/irrlicht_changes/printing.h index a338ce254..089193b57 100644 --- a/src/irrlicht_changes/printing.h +++ b/src/irrlicht_changes/printing.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2023 Vitaliy Lobachevskiy - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2023 Vitaliy Lobachevskiy #pragma once #include diff --git a/src/irrlichttypes.h b/src/irrlichttypes.h index 90f522017..0994bbd94 100644 --- a/src/irrlichttypes.h +++ b/src/irrlichttypes.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/irrlichttypes_bloated.h b/src/irrlichttypes_bloated.h index a772a5cb5..6a5826eb1 100644 --- a/src/irrlichttypes_bloated.h +++ b/src/irrlichttypes_bloated.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/irrlichttypes_extrabloated.h b/src/irrlichttypes_extrabloated.h index 35e33d9ce..98c0e2cea 100644 --- a/src/irrlichttypes_extrabloated.h +++ b/src/irrlichttypes_extrabloated.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/itemdef.cpp b/src/itemdef.cpp index 773cadaec..23f948f8c 100644 --- a/src/itemdef.cpp +++ b/src/itemdef.cpp @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola -Copyright (C) 2013 Kahrl - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola +// Copyright (C) 2013 Kahrl #include "itemdef.h" diff --git a/src/itemdef.h b/src/itemdef.h index f0d780173..fdad86a69 100644 --- a/src/itemdef.h +++ b/src/itemdef.h @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola -Copyright (C) 2013 Kahrl - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola +// Copyright (C) 2013 Kahrl #pragma once diff --git a/src/itemgroup.h b/src/itemgroup.h index fcf720649..127d30f53 100644 --- a/src/itemgroup.h +++ b/src/itemgroup.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/itemstackmetadata.cpp b/src/itemstackmetadata.cpp index a2fc67c46..9262a784d 100644 --- a/src/itemstackmetadata.cpp +++ b/src/itemstackmetadata.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2017-8 rubenwardy - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2017-8 rubenwardy #include "itemstackmetadata.h" diff --git a/src/itemstackmetadata.h b/src/itemstackmetadata.h index db450dc4a..c49e812ba 100644 --- a/src/itemstackmetadata.h +++ b/src/itemstackmetadata.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2017-8 rubenwardy - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2017-8 rubenwardy #pragma once diff --git a/src/json-forwards.h b/src/json-forwards.h index f2c9c9c9e..2f7561ab3 100644 --- a/src/json-forwards.h +++ b/src/json-forwards.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2023 DS - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2023 DS #pragma once diff --git a/src/light.cpp b/src/light.cpp index f159a2bed..3e56622d4 100644 --- a/src/light.cpp +++ b/src/light.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "light.h" #include diff --git a/src/light.h b/src/light.h index 285ea4d9b..446413378 100644 --- a/src/light.h +++ b/src/light.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once #include diff --git a/src/lighting.cpp b/src/lighting.cpp index 0af1eb86e..b8def7728 100644 --- a/src/lighting.cpp +++ b/src/lighting.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2021 x2048, Dmitry Kostenko - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2021 x2048, Dmitry Kostenko #include "lighting.h" diff --git a/src/lighting.h b/src/lighting.h index b0ba714b9..ab40d546d 100644 --- a/src/lighting.h +++ b/src/lighting.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2021 x2048, Dmitry Kostenko - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2021 x2048, Dmitry Kostenko #pragma once #include "SColor.h" diff --git a/src/log.cpp b/src/log.cpp index ae3d9a9ab..144504660 100644 --- a/src/log.cpp +++ b/src/log.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "log_internal.h" diff --git a/src/main.cpp b/src/main.cpp index b400249ed..b61386ead 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #include "irrlichttypes_bloated.h" #include "irrlicht.h" // createDevice diff --git a/src/map.cpp b/src/map.cpp index 85ff0e84a..1af8684e1 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #include "map.h" #include "mapsector.h" diff --git a/src/map.h b/src/map.h index e3624a68d..bbe91f5d6 100644 --- a/src/map.h +++ b/src/map.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/map_settings_manager.cpp b/src/map_settings_manager.cpp index bef7ad1c6..b73a4769f 100644 --- a/src/map_settings_manager.cpp +++ b/src/map_settings_manager.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 kwolekr, Ryan Kwolek - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 kwolekr, Ryan Kwolek #include "debug.h" #include "filesys.h" diff --git a/src/map_settings_manager.h b/src/map_settings_manager.h index 72b86f517..3ef08de67 100644 --- a/src/map_settings_manager.h +++ b/src/map_settings_manager.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 kwolekr, Ryan Kwolek - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 kwolekr, Ryan Kwolek #pragma once diff --git a/src/mapblock.cpp b/src/mapblock.cpp index 04e2a56dc..9ead0fa5a 100644 --- a/src/mapblock.cpp +++ b/src/mapblock.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "mapblock.h" diff --git a/src/mapblock.h b/src/mapblock.h index a9e6386e1..da5e95dff 100644 --- a/src/mapblock.h +++ b/src/mapblock.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/mapgen/cavegen.cpp b/src/mapgen/cavegen.cpp index e6ab66980..f422db67d 100644 --- a/src/mapgen/cavegen.cpp +++ b/src/mapgen/cavegen.cpp @@ -1,23 +1,8 @@ -/* -Minetest -Copyright (C) 2010-2020 celeron55, Perttu Ahola -Copyright (C) 2015-2020 paramat -Copyright (C) 2010-2016 kwolekr, Ryan Kwolek - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2020 celeron55, Perttu Ahola +// Copyright (C) 2015-2020 paramat +// Copyright (C) 2010-2016 kwolekr, Ryan Kwolek #include "util/numeric.h" #include diff --git a/src/mapgen/cavegen.h b/src/mapgen/cavegen.h index 5cf2e530e..dbc584d9e 100644 --- a/src/mapgen/cavegen.h +++ b/src/mapgen/cavegen.h @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2015-2020 paramat -Copyright (C) 2010-2016 kwolekr, Ryan Kwolek - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2015-2020 paramat +// Copyright (C) 2010-2016 kwolekr, Ryan Kwolek #pragma once diff --git a/src/mapgen/dungeongen.cpp b/src/mapgen/dungeongen.cpp index 0369bdac3..948cc62b1 100644 --- a/src/mapgen/dungeongen.cpp +++ b/src/mapgen/dungeongen.cpp @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2010-2018 celeron55, Perttu Ahola -Copyright (C) 2015-2018 paramat - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2018 celeron55, Perttu Ahola +// Copyright (C) 2015-2018 paramat #include "dungeongen.h" #include diff --git a/src/mapgen/dungeongen.h b/src/mapgen/dungeongen.h index 35e6beef5..92227378c 100644 --- a/src/mapgen/dungeongen.h +++ b/src/mapgen/dungeongen.h @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2010-2018 celeron55, Perttu Ahola -Copyright (C) 2015-2018 paramat - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2018 celeron55, Perttu Ahola +// Copyright (C) 2015-2018 paramat #pragma once diff --git a/src/mapgen/mapgen.cpp b/src/mapgen/mapgen.cpp index 0b821e02e..dd416a3e4 100644 --- a/src/mapgen/mapgen.cpp +++ b/src/mapgen/mapgen.cpp @@ -1,23 +1,8 @@ -/* -Minetest -Copyright (C) 2010-2018 celeron55, Perttu Ahola -Copyright (C) 2013-2018 kwolekr, Ryan Kwolek -Copyright (C) 2015-2018 paramat - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2018 celeron55, Perttu Ahola +// Copyright (C) 2013-2018 kwolekr, Ryan Kwolek +// Copyright (C) 2015-2018 paramat #include #include "mapgen.h" diff --git a/src/mapgen/mapgen.h b/src/mapgen/mapgen.h index 7a3808da3..5e5ff9f3c 100644 --- a/src/mapgen/mapgen.h +++ b/src/mapgen/mapgen.h @@ -1,23 +1,8 @@ -/* -Minetest -Copyright (C) 2010-2020 celeron55, Perttu Ahola -Copyright (C) 2015-2020 paramat -Copyright (C) 2013-2016 kwolekr, Ryan Kwolek - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2020 celeron55, Perttu Ahola +// Copyright (C) 2015-2020 paramat +// Copyright (C) 2013-2016 kwolekr, Ryan Kwolek #pragma once diff --git a/src/mapgen/mapgen_carpathian.cpp b/src/mapgen/mapgen_carpathian.cpp index b3a0bd270..ba54a3672 100644 --- a/src/mapgen/mapgen_carpathian.cpp +++ b/src/mapgen/mapgen_carpathian.cpp @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2017-2019 vlapsley, Vaughan Lapsley -Copyright (C) 2017-2019 paramat - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2017-2019 vlapsley, Vaughan Lapsley +// Copyright (C) 2017-2019 paramat #include diff --git a/src/mapgen/mapgen_carpathian.h b/src/mapgen/mapgen_carpathian.h index 31b2b91d8..c2c0d48fe 100644 --- a/src/mapgen/mapgen_carpathian.h +++ b/src/mapgen/mapgen_carpathian.h @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2017-2019 vlapsley, Vaughan Lapsley -Copyright (C) 2017-2019 paramat - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2017-2019 vlapsley, Vaughan Lapsley +// Copyright (C) 2017-2019 paramat #pragma once diff --git a/src/mapgen/mapgen_flat.cpp b/src/mapgen/mapgen_flat.cpp index 6b249ea1f..f0e7984d5 100644 --- a/src/mapgen/mapgen_flat.cpp +++ b/src/mapgen/mapgen_flat.cpp @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2015-2020 paramat -Copyright (C) 2015-2016 kwolekr, Ryan Kwolek - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2015-2020 paramat +// Copyright (C) 2015-2016 kwolekr, Ryan Kwolek #include "mapgen.h" diff --git a/src/mapgen/mapgen_flat.h b/src/mapgen/mapgen_flat.h index 4b46aff27..46ff46154 100644 --- a/src/mapgen/mapgen_flat.h +++ b/src/mapgen/mapgen_flat.h @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2015-2020 paramat -Copyright (C) 2015-2016 kwolekr, Ryan Kwolek - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2015-2020 paramat +// Copyright (C) 2015-2016 kwolekr, Ryan Kwolek #pragma once diff --git a/src/mapgen/mapgen_fractal.cpp b/src/mapgen/mapgen_fractal.cpp index c9071cecf..dcd62f63a 100644 --- a/src/mapgen/mapgen_fractal.cpp +++ b/src/mapgen/mapgen_fractal.cpp @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2015-2019 paramat -Copyright (C) 2015-2016 kwolekr, Ryan Kwolek - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2015-2019 paramat +// Copyright (C) 2015-2016 kwolekr, Ryan Kwolek #include "mapgen.h" diff --git a/src/mapgen/mapgen_fractal.h b/src/mapgen/mapgen_fractal.h index 23af925bc..0a71bd1d1 100644 --- a/src/mapgen/mapgen_fractal.h +++ b/src/mapgen/mapgen_fractal.h @@ -1,25 +1,7 @@ -/* -Minetest -Copyright (C) 2015-2019 paramat -Copyright (C) 2015-2016 kwolekr, Ryan Kwolek - -Fractal formulas from http://www.bugman123.com/Hypercomplex/index.html -by Paul Nylander, and from http://www.fractalforums.com, thank you. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2015-2019 paramat +// Copyright (C) 2015-2016 kwolekr, Ryan Kwolek #pragma once diff --git a/src/mapgen/mapgen_singlenode.cpp b/src/mapgen/mapgen_singlenode.cpp index 6585ea7a9..9b556581b 100644 --- a/src/mapgen/mapgen_singlenode.cpp +++ b/src/mapgen/mapgen_singlenode.cpp @@ -1,23 +1,8 @@ -/* -Minetest -Copyright (C) 2013-2018 celeron55, Perttu Ahola -Copyright (C) 2013-2018 kwolekr, Ryan Kwolek -Copyright (C) 2015-2018 paramat - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013-2018 celeron55, Perttu Ahola +// Copyright (C) 2013-2018 kwolekr, Ryan Kwolek +// Copyright (C) 2015-2018 paramat #include "mapgen_singlenode.h" #include "voxel.h" diff --git a/src/mapgen/mapgen_singlenode.h b/src/mapgen/mapgen_singlenode.h index e056d9ab1..103852550 100644 --- a/src/mapgen/mapgen_singlenode.h +++ b/src/mapgen/mapgen_singlenode.h @@ -1,23 +1,8 @@ -/* -Minetest -Copyright (C) 2013-2018 celeron55, Perttu Ahola -Copyright (C) 2013-2018 kwolekr, Ryan Kwolek -Copyright (C) 2015-2018 paramat - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013-2018 celeron55, Perttu Ahola +// Copyright (C) 2013-2018 kwolekr, Ryan Kwolek +// Copyright (C) 2015-2018 paramat #pragma once diff --git a/src/mapgen/mapgen_v5.cpp b/src/mapgen/mapgen_v5.cpp index 87e54755f..07d1abda7 100644 --- a/src/mapgen/mapgen_v5.cpp +++ b/src/mapgen/mapgen_v5.cpp @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2014-2018 paramat -Copyright (C) 2014-2018 kwolekr, Ryan Kwolek - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2014-2018 paramat +// Copyright (C) 2014-2018 kwolekr, Ryan Kwolek #include "mapgen.h" diff --git a/src/mapgen/mapgen_v5.h b/src/mapgen/mapgen_v5.h index cf4ee4899..8c8c1c27f 100644 --- a/src/mapgen/mapgen_v5.h +++ b/src/mapgen/mapgen_v5.h @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2014-2018 paramat -Copyright (C) 2014-2018 kwolekr, Ryan Kwolek - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2014-2018 paramat +// Copyright (C) 2014-2018 kwolekr, Ryan Kwolek #pragma once diff --git a/src/mapgen/mapgen_v6.cpp b/src/mapgen/mapgen_v6.cpp index 80a3d3be3..2f5a3cf7a 100644 --- a/src/mapgen/mapgen_v6.cpp +++ b/src/mapgen/mapgen_v6.cpp @@ -1,23 +1,8 @@ -/* -Minetest -Copyright (C) 2010-2018 celeron55, Perttu Ahola -Copyright (C) 2013-2018 kwolekr, Ryan Kwolek -Copyright (C) 2014-2018 paramat - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2018 celeron55, Perttu Ahola +// Copyright (C) 2013-2018 kwolekr, Ryan Kwolek +// Copyright (C) 2014-2018 paramat #include diff --git a/src/mapgen/mapgen_v6.h b/src/mapgen/mapgen_v6.h index 4b439810c..30b31f84a 100644 --- a/src/mapgen/mapgen_v6.h +++ b/src/mapgen/mapgen_v6.h @@ -1,23 +1,8 @@ -/* -Minetest -Copyright (C) 2010-2018 celeron55, Perttu Ahola -Copyright (C) 2013-2018 kwolekr, Ryan Kwolek -Copyright (C) 2014-2018 paramat - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2018 celeron55, Perttu Ahola +// Copyright (C) 2013-2018 kwolekr, Ryan Kwolek +// Copyright (C) 2014-2018 paramat #pragma once diff --git a/src/mapgen/mapgen_v7.cpp b/src/mapgen/mapgen_v7.cpp index 91f004518..491a1514a 100644 --- a/src/mapgen/mapgen_v7.cpp +++ b/src/mapgen/mapgen_v7.cpp @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2014-2020 paramat -Copyright (C) 2013-2016 kwolekr, Ryan Kwolek - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2014-2020 paramat +// Copyright (C) 2013-2016 kwolekr, Ryan Kwolek #include "mapgen.h" diff --git a/src/mapgen/mapgen_v7.h b/src/mapgen/mapgen_v7.h index 5db10a304..49e036b82 100644 --- a/src/mapgen/mapgen_v7.h +++ b/src/mapgen/mapgen_v7.h @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2014-2020 paramat -Copyright (C) 2013-2016 kwolekr, Ryan Kwolek - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2014-2020 paramat +// Copyright (C) 2013-2016 kwolekr, Ryan Kwolek #pragma once diff --git a/src/mapgen/mapgen_valleys.cpp b/src/mapgen/mapgen_valleys.cpp index 80a99b1f0..4825ad754 100644 --- a/src/mapgen/mapgen_valleys.cpp +++ b/src/mapgen/mapgen_valleys.cpp @@ -1,5 +1,6 @@ /* -Minetest +Luanti +SPDX-License-Identifier: LGPL-2.1-or-later Copyright (C) 2016-2019 Duane Robertson Copyright (C) 2016-2019 paramat @@ -8,20 +9,6 @@ Based on Valleys Mapgen by Gael de Sailly and mapgen_v7, mapgen_flat by kwolekr and paramat. Licensing changed by permission of Gael de Sailly. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ diff --git a/src/mapgen/mapgen_valleys.h b/src/mapgen/mapgen_valleys.h index 34a923dfa..3f8266ecc 100644 --- a/src/mapgen/mapgen_valleys.h +++ b/src/mapgen/mapgen_valleys.h @@ -1,5 +1,6 @@ /* -Minetest +Luanti +SPDX-License-Identifier: LGPL-2.1-or-later Copyright (C) 2016-2019 Duane Robertson Copyright (C) 2016-2019 paramat @@ -8,20 +9,6 @@ Based on Valleys Mapgen by Gael de Sailly and mapgen_v7, mapgen_flat by kwolekr and paramat. Licensing changed by permission of Gael de Sailly. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ diff --git a/src/mapgen/mg_biome.cpp b/src/mapgen/mg_biome.cpp index b270a5413..40e6aeda9 100644 --- a/src/mapgen/mg_biome.cpp +++ b/src/mapgen/mg_biome.cpp @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2014-2018 kwolekr, Ryan Kwolek -Copyright (C) 2014-2018 paramat - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2014-2018 kwolekr, Ryan Kwolek +// Copyright (C) 2014-2018 paramat #include "mg_biome.h" #include "mg_decoration.h" diff --git a/src/mapgen/mg_biome.h b/src/mapgen/mg_biome.h index 389b36ee9..c23dab2aa 100644 --- a/src/mapgen/mg_biome.h +++ b/src/mapgen/mg_biome.h @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2014-2020 paramat -Copyright (C) 2014-2016 kwolekr, Ryan Kwolek - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2014-2020 paramat +// Copyright (C) 2014-2016 kwolekr, Ryan Kwolek #pragma once diff --git a/src/mapgen/mg_decoration.cpp b/src/mapgen/mg_decoration.cpp index f647059d7..60183d4e4 100644 --- a/src/mapgen/mg_decoration.cpp +++ b/src/mapgen/mg_decoration.cpp @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2014-2018 kwolekr, Ryan Kwolek -Copyright (C) 2015-2018 paramat - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2014-2018 kwolekr, Ryan Kwolek +// Copyright (C) 2015-2018 paramat #include "mg_decoration.h" #include "mg_schematic.h" diff --git a/src/mapgen/mg_decoration.h b/src/mapgen/mg_decoration.h index 41d0dac64..c8d187d2a 100644 --- a/src/mapgen/mg_decoration.h +++ b/src/mapgen/mg_decoration.h @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2014-2018 kwolekr, Ryan Kwolek -Copyright (C) 2015-2018 paramat - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2014-2018 kwolekr, Ryan Kwolek +// Copyright (C) 2015-2018 paramat #pragma once diff --git a/src/mapgen/mg_ore.cpp b/src/mapgen/mg_ore.cpp index 4f0c35548..d5817f682 100644 --- a/src/mapgen/mg_ore.cpp +++ b/src/mapgen/mg_ore.cpp @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2015-2020 paramat -Copyright (C) 2014-2016 kwolekr, Ryan Kwolek - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2015-2020 paramat +// Copyright (C) 2014-2016 kwolekr, Ryan Kwolek #include "mg_ore.h" #include "mapgen.h" diff --git a/src/mapgen/mg_ore.h b/src/mapgen/mg_ore.h index a757fa6d0..435933046 100644 --- a/src/mapgen/mg_ore.h +++ b/src/mapgen/mg_ore.h @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2015-2020 paramat -Copyright (C) 2014-2016 kwolekr, Ryan Kwolek - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2015-2020 paramat +// Copyright (C) 2014-2016 kwolekr, Ryan Kwolek #pragma once diff --git a/src/mapgen/mg_schematic.cpp b/src/mapgen/mg_schematic.cpp index bc1b35ab4..8caed8157 100644 --- a/src/mapgen/mg_schematic.cpp +++ b/src/mapgen/mg_schematic.cpp @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2014-2018 kwolekr, Ryan Kwolek -Copyright (C) 2015-2018 paramat - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2014-2018 kwolekr, Ryan Kwolek +// Copyright (C) 2015-2018 paramat #include #include "mg_schematic.h" diff --git a/src/mapgen/mg_schematic.h b/src/mapgen/mg_schematic.h index 3b988e468..02b40a6ba 100644 --- a/src/mapgen/mg_schematic.h +++ b/src/mapgen/mg_schematic.h @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2014-2018 kwolekr, Ryan Kwolek -Copyright (C) 2015-2018 paramat - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2014-2018 kwolekr, Ryan Kwolek +// Copyright (C) 2015-2018 paramat #pragma once diff --git a/src/mapgen/treegen.cpp b/src/mapgen/treegen.cpp index eaaa6c3c4..483ec4797 100644 --- a/src/mapgen/treegen.cpp +++ b/src/mapgen/treegen.cpp @@ -1,23 +1,8 @@ -/* -Minetest -Copyright (C) 2010-2018 celeron55, Perttu Ahola , -Copyright (C) 2012-2018 RealBadAngel, Maciej Kasatkin -Copyright (C) 2015-2018 paramat - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2018 celeron55, Perttu Ahola , +// Copyright (C) 2012-2018 RealBadAngel, Maciej Kasatkin +// Copyright (C) 2015-2018 paramat #include #include "treegen.h" diff --git a/src/mapgen/treegen.h b/src/mapgen/treegen.h index c622d3db4..159063eb3 100644 --- a/src/mapgen/treegen.h +++ b/src/mapgen/treegen.h @@ -1,23 +1,8 @@ -/* -Minetest -Copyright (C) 2010-2018 celeron55, Perttu Ahola , -Copyright (C) 2012-2018 RealBadAngel, Maciej Kasatkin -Copyright (C) 2015-2018 paramat - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2018 celeron55, Perttu Ahola , +// Copyright (C) 2012-2018 RealBadAngel, Maciej Kasatkin +// Copyright (C) 2015-2018 paramat #pragma once diff --git a/src/mapnode.cpp b/src/mapnode.cpp index 4e3c60192..01f52d931 100644 --- a/src/mapnode.cpp +++ b/src/mapnode.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "irrlichttypes_bloated.h" #include "mapnode.h" diff --git a/src/mapnode.h b/src/mapnode.h index 93dfd01b9..a909757bc 100644 --- a/src/mapnode.h +++ b/src/mapnode.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/mapsector.cpp b/src/mapsector.cpp index e3fc3cfee..5e943345c 100644 --- a/src/mapsector.cpp +++ b/src/mapsector.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "mapsector.h" #include "exceptions.h" diff --git a/src/mapsector.h b/src/mapsector.h index 13aa6907f..bc5a2a731 100644 --- a/src/mapsector.h +++ b/src/mapsector.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/metadata.cpp b/src/metadata.cpp index f8fc02da5..2b78f84e6 100644 --- a/src/metadata.cpp +++ b/src/metadata.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #include "metadata.h" #include "log.h" diff --git a/src/metadata.h b/src/metadata.h index be053662e..e97fb548a 100644 --- a/src/metadata.h +++ b/src/metadata.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/modchannels.cpp b/src/modchannels.cpp index 9626e8e0c..29db7d6d0 100644 --- a/src/modchannels.cpp +++ b/src/modchannels.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2017 nerzhul, Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2017 nerzhul, Loic Blot #include "modchannels.h" #include diff --git a/src/modchannels.h b/src/modchannels.h index 735609b59..57d2b4570 100644 --- a/src/modchannels.h +++ b/src/modchannels.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2017 nerzhul, Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2017 nerzhul, Loic Blot #pragma once diff --git a/src/modifiedstate.h b/src/modifiedstate.h index 5bf3b643c..659d2798e 100644 --- a/src/modifiedstate.h +++ b/src/modifiedstate.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/nameidmapping.cpp b/src/nameidmapping.cpp index 05cfae069..81e9c7175 100644 --- a/src/nameidmapping.cpp +++ b/src/nameidmapping.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "nameidmapping.h" #include "exceptions.h" diff --git a/src/nameidmapping.h b/src/nameidmapping.h index b200e3e7c..32e6fc177 100644 --- a/src/nameidmapping.h +++ b/src/nameidmapping.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/network/address.cpp b/src/network/address.cpp index 846008078..95eb63fc1 100644 --- a/src/network/address.cpp +++ b/src/network/address.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "address.h" diff --git a/src/network/address.h b/src/network/address.h index 2fbf419a7..9a53e7f63 100644 --- a/src/network/address.h +++ b/src/network/address.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/network/clientopcodes.cpp b/src/network/clientopcodes.cpp index 7d0840754..27d56c311 100644 --- a/src/network/clientopcodes.cpp +++ b/src/network/clientopcodes.cpp @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola -Copyright (C) 2015 nerzhul, Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola +// Copyright (C) 2015 nerzhul, Loic Blot #include "clientopcodes.h" #include "client/client.h" diff --git a/src/network/clientopcodes.h b/src/network/clientopcodes.h index 20bfc6697..3f8c60589 100644 --- a/src/network/clientopcodes.h +++ b/src/network/clientopcodes.h @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola -Copyright (C) 2015 nerzhul, Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola +// Copyright (C) 2015 nerzhul, Loic Blot #pragma once diff --git a/src/network/clientpackethandler.cpp b/src/network/clientpackethandler.cpp index 310e10e6e..9f987ccea 100644 --- a/src/network/clientpackethandler.cpp +++ b/src/network/clientpackethandler.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2015 nerzhul, Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2015 nerzhul, Loic Blot #include "client/client.h" diff --git a/src/network/mtp/impl.cpp b/src/network/mtp/impl.cpp index 1ef5eb853..02ee6bfda 100644 --- a/src/network/mtp/impl.cpp +++ b/src/network/mtp/impl.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include #include diff --git a/src/network/mtp/impl.h b/src/network/mtp/impl.h index 7105bac6d..1bc408a01 100644 --- a/src/network/mtp/impl.h +++ b/src/network/mtp/impl.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/network/mtp/internal.h b/src/network/mtp/internal.h index 4cf6cb57a..cc82b09f6 100644 --- a/src/network/mtp/internal.h +++ b/src/network/mtp/internal.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/network/mtp/threads.cpp b/src/network/mtp/threads.cpp index 50b7fa1e3..9976e9a04 100644 --- a/src/network/mtp/threads.cpp +++ b/src/network/mtp/threads.cpp @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2013-2017 celeron55, Perttu Ahola -Copyright (C) 2017 celeron55, Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013-2017 celeron55, Perttu Ahola +// Copyright (C) 2017 celeron55, Loic Blot #include "network/mtp/threads.h" #include "log.h" diff --git a/src/network/mtp/threads.h b/src/network/mtp/threads.h index b41307fa6..bf660bddf 100644 --- a/src/network/mtp/threads.h +++ b/src/network/mtp/threads.h @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2013-2017 celeron55, Perttu Ahola -Copyright (C) 2017 celeron55, Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013-2017 celeron55, Perttu Ahola +// Copyright (C) 2017 celeron55, Loic Blot #pragma once diff --git a/src/network/networkexceptions.h b/src/network/networkexceptions.h index 1810106e5..792b30fb0 100644 --- a/src/network/networkexceptions.h +++ b/src/network/networkexceptions.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013-2017 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013-2017 celeron55, Perttu Ahola #pragma once diff --git a/src/network/networkpacket.cpp b/src/network/networkpacket.cpp index 48e8660b6..7c82b2199 100644 --- a/src/network/networkpacket.cpp +++ b/src/network/networkpacket.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2015 nerzhul, Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2015 nerzhul, Loic Blot #include "networkpacket.h" #include diff --git a/src/network/networkpacket.h b/src/network/networkpacket.h index 0260f8072..823b0993d 100644 --- a/src/network/networkpacket.h +++ b/src/network/networkpacket.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2015 nerzhul, Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2015 nerzhul, Loic Blot #pragma once diff --git a/src/network/networkprotocol.h b/src/network/networkprotocol.h index 4ee02209a..0d63bd24f 100644 --- a/src/network/networkprotocol.h +++ b/src/network/networkprotocol.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/network/peerhandler.h b/src/network/peerhandler.h index adda995b3..dc52ef2cc 100644 --- a/src/network/peerhandler.h +++ b/src/network/peerhandler.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/network/serveropcodes.cpp b/src/network/serveropcodes.cpp index 4b87c3fbe..43febbb1b 100644 --- a/src/network/serveropcodes.cpp +++ b/src/network/serveropcodes.cpp @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola -Copyright (C) 2015 nerzhul, Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola +// Copyright (C) 2015 nerzhul, Loic Blot #include "serveropcodes.h" #include "server.h" diff --git a/src/network/serveropcodes.h b/src/network/serveropcodes.h index 509d2b4b2..4942cd759 100644 --- a/src/network/serveropcodes.h +++ b/src/network/serveropcodes.h @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola -Copyright (C) 2015 nerzhul, Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola +// Copyright (C) 2015 nerzhul, Loic Blot #pragma once diff --git a/src/network/serverpackethandler.cpp b/src/network/serverpackethandler.cpp index 449e164b6..47fd8ef5b 100644 --- a/src/network/serverpackethandler.cpp +++ b/src/network/serverpackethandler.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2015 nerzhul, Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2015 nerzhul, Loic Blot #include "chatmessage.h" #include "server.h" diff --git a/src/network/socket.cpp b/src/network/socket.cpp index 17e71d860..112230f00 100644 --- a/src/network/socket.cpp +++ b/src/network/socket.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "socket.h" diff --git a/src/network/socket.h b/src/network/socket.h index 28b69c7b8..7934ffbc8 100644 --- a/src/network/socket.h +++ b/src/network/socket.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/nodedef.cpp b/src/nodedef.cpp index 06a74ccef..c956bbdfd 100644 --- a/src/nodedef.cpp +++ b/src/nodedef.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "nodedef.h" diff --git a/src/nodedef.h b/src/nodedef.h index ac583dfd3..bc0058101 100644 --- a/src/nodedef.h +++ b/src/nodedef.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/nodemetadata.cpp b/src/nodemetadata.cpp index a86db15ad..ced7ace02 100644 --- a/src/nodemetadata.cpp +++ b/src/nodemetadata.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #include "nodemetadata.h" #include "exceptions.h" diff --git a/src/nodemetadata.h b/src/nodemetadata.h index 3c2a67f53..2e50cc689 100644 --- a/src/nodemetadata.h +++ b/src/nodemetadata.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/nodetimer.cpp b/src/nodetimer.cpp index ec8611a01..04ea3d5bc 100644 --- a/src/nodetimer.cpp +++ b/src/nodetimer.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #include "nodetimer.h" #include "log.h" diff --git a/src/nodetimer.h b/src/nodetimer.h index ec1a93253..a61abf172 100644 --- a/src/nodetimer.h +++ b/src/nodetimer.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/objdef.cpp b/src/objdef.cpp index 482544d37..f61d12f30 100644 --- a/src/objdef.cpp +++ b/src/objdef.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2015 kwolekr, Ryan Kwolek - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2015 kwolekr, Ryan Kwolek #include "objdef.h" #include "util/numeric.h" diff --git a/src/objdef.h b/src/objdef.h index e40324a88..31b686349 100644 --- a/src/objdef.h +++ b/src/objdef.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2015 kwolekr, Ryan Kwolek - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2015 kwolekr, Ryan Kwolek #pragma once diff --git a/src/object_properties.cpp b/src/object_properties.cpp index 7a70714a2..63a0ef01b 100644 --- a/src/object_properties.cpp +++ b/src/object_properties.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "object_properties.h" #include "irrlicht_changes/printing.h" diff --git a/src/object_properties.h b/src/object_properties.h index 88c2a2678..d97b4997e 100644 --- a/src/object_properties.h +++ b/src/object_properties.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/particles.cpp b/src/particles.cpp index fdc041c3e..2c470d2d3 100644 --- a/src/particles.cpp +++ b/src/particles.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2020 sfan5 - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2020 sfan5 #include "particles.h" #include diff --git a/src/particles.h b/src/particles.h index a8d30390b..52fe26661 100644 --- a/src/particles.h +++ b/src/particles.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/pathfinder.cpp b/src/pathfinder.cpp index 8b90a139c..afd998610 100644 --- a/src/pathfinder.cpp +++ b/src/pathfinder.cpp @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2013 sapier, sapier at gmx dot net -Copyright (C) 2016 est31, - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 sapier, sapier at gmx dot net +// Copyright (C) 2016 est31, /******************************************************************************/ /* Includes */ diff --git a/src/pathfinder.h b/src/pathfinder.h index 526aa0ee8..c5c505160 100644 --- a/src/pathfinder.h +++ b/src/pathfinder.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 sapier, sapier at gmx dot net - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 sapier, sapier at gmx dot net #pragma once diff --git a/src/player.cpp b/src/player.cpp index 5c8151c4a..3704f177d 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #include "player.h" diff --git a/src/player.h b/src/player.h index ea0300aff..0af737d32 100644 --- a/src/player.h +++ b/src/player.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/porting.cpp b/src/porting.cpp index 81e9afa01..93b410bcc 100644 --- a/src/porting.cpp +++ b/src/porting.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola /* Random portability stuff diff --git a/src/porting.h b/src/porting.h index b7a71bce2..edbc236a8 100644 --- a/src/porting.h +++ b/src/porting.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola /* Random portability stuff diff --git a/src/porting_android.cpp b/src/porting_android.cpp index 49f279c2b..47d8d3c1f 100644 --- a/src/porting_android.cpp +++ b/src/porting_android.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2014 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2014 celeron55, Perttu Ahola #ifndef __ANDROID__ #error This file may only be compiled for android! diff --git a/src/porting_android.h b/src/porting_android.h index efc1a19c2..64cf82ca8 100644 --- a/src/porting_android.h +++ b/src/porting_android.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2014 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2014 celeron55, Perttu Ahola #pragma once diff --git a/src/profiler.cpp b/src/profiler.cpp index ab8fbe496..d9d894da3 100644 --- a/src/profiler.cpp +++ b/src/profiler.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2015 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2015 celeron55, Perttu Ahola #include "profiler.h" #include "porting.h" diff --git a/src/profiler.h b/src/profiler.h index e7135d9c2..1ecd5ad1c 100644 --- a/src/profiler.h +++ b/src/profiler.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/raycast.cpp b/src/raycast.cpp index c78f6c27e..c84cb01e7 100644 --- a/src/raycast.cpp +++ b/src/raycast.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2016 juhdanad, Daniel Juhasz - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2016 juhdanad, Daniel Juhasz #include "raycast.h" #include "irr_v3d.h" diff --git a/src/raycast.h b/src/raycast.h index 9347b0001..5170ba3ee 100644 --- a/src/raycast.h +++ b/src/raycast.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2016 juhdanad, Daniel Juhasz - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2016 juhdanad, Daniel Juhasz #pragma once diff --git a/src/reflowscan.cpp b/src/reflowscan.cpp index e63776e67..091dfa323 100644 --- a/src/reflowscan.cpp +++ b/src/reflowscan.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2016 MillersMan - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2016 MillersMan #include "reflowscan.h" #include "map.h" diff --git a/src/reflowscan.h b/src/reflowscan.h index 7961432bd..66fec9ea6 100644 --- a/src/reflowscan.h +++ b/src/reflowscan.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2016 MillersMan - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2016 MillersMan #pragma once diff --git a/src/remoteplayer.cpp b/src/remoteplayer.cpp index 6cffa534f..ca12a38e4 100644 --- a/src/remoteplayer.cpp +++ b/src/remoteplayer.cpp @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2010-2016 celeron55, Perttu Ahola -Copyright (C) 2014-2016 nerzhul, Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2016 celeron55, Perttu Ahola +// Copyright (C) 2014-2016 nerzhul, Loic Blot #include "remoteplayer.h" #include diff --git a/src/remoteplayer.h b/src/remoteplayer.h index cbfc80d91..1f2f8df9c 100644 --- a/src/remoteplayer.h +++ b/src/remoteplayer.h @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2010-2016 celeron55, Perttu Ahola -Copyright (C) 2014-2016 nerzhul, Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2016 celeron55, Perttu Ahola +// Copyright (C) 2014-2016 nerzhul, Loic Blot #pragma once diff --git a/src/rollback_interface.cpp b/src/rollback_interface.cpp index 4e9fa5eab..007d05f3a 100644 --- a/src/rollback_interface.cpp +++ b/src/rollback_interface.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "rollback_interface.h" #include diff --git a/src/rollback_interface.h b/src/rollback_interface.h index 94b800579..aa45cbf28 100644 --- a/src/rollback_interface.h +++ b/src/rollback_interface.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/script/common/c_content.cpp b/src/script/common/c_content.cpp index 1016f373e..5355668f0 100644 --- a/src/script/common/c_content.cpp +++ b/src/script/common/c_content.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "common/c_content.h" #include "common/c_converter.h" #include "common/c_types.h" diff --git a/src/script/common/c_content.h b/src/script/common/c_content.h index 3bcc5109e..3c8780c1a 100644 --- a/src/script/common/c_content.h +++ b/src/script/common/c_content.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola /******************************************************************************/ diff --git a/src/script/common/c_converter.cpp b/src/script/common/c_converter.cpp index f0511d586..a6fa2f068 100644 --- a/src/script/common/c_converter.cpp +++ b/src/script/common/c_converter.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola extern "C" { #include diff --git a/src/script/common/c_converter.h b/src/script/common/c_converter.h index 04f1ba0f9..34c276353 100644 --- a/src/script/common/c_converter.h +++ b/src/script/common/c_converter.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola /******************************************************************************/ diff --git a/src/script/common/c_internal.cpp b/src/script/common/c_internal.cpp index e6bfafdcd..ae6b5cc23 100644 --- a/src/script/common/c_internal.cpp +++ b/src/script/common/c_internal.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "common/c_internal.h" #include "util/numeric.h" diff --git a/src/script/common/c_internal.h b/src/script/common/c_internal.h index a9f9fe226..e0b30044b 100644 --- a/src/script/common/c_internal.h +++ b/src/script/common/c_internal.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola /******************************************************************************/ /******************************************************************************/ diff --git a/src/script/common/c_packer.cpp b/src/script/common/c_packer.cpp index bbef89c1f..0a4045e1b 100644 --- a/src/script/common/c_packer.cpp +++ b/src/script/common/c_packer.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2022 sfan5 - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2022 sfan5 #include #include diff --git a/src/script/common/c_packer.h b/src/script/common/c_packer.h index 2338da455..ba6bbfef5 100644 --- a/src/script/common/c_packer.h +++ b/src/script/common/c_packer.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2022 sfan5 - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2022 sfan5 #pragma once diff --git a/src/script/common/c_types.cpp b/src/script/common/c_types.cpp index be6ef65ae..57d6c4244 100644 --- a/src/script/common/c_types.cpp +++ b/src/script/common/c_types.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include diff --git a/src/script/common/c_types.h b/src/script/common/c_types.h index 88d88703e..6560524b8 100644 --- a/src/script/common/c_types.h +++ b/src/script/common/c_types.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/script/common/helper.cpp b/src/script/common/helper.cpp index a9a05b2cb..26fb56a91 100644 --- a/src/script/common/helper.cpp +++ b/src/script/common/helper.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2018 nerzhul, Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2018 nerzhul, Loic Blot extern "C" { #include diff --git a/src/script/common/helper.h b/src/script/common/helper.h index 106966376..29f5915a1 100644 --- a/src/script/common/helper.h +++ b/src/script/common/helper.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2018 nerzhul, Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2018 nerzhul, Loic Blot #pragma once diff --git a/src/script/cpp_api/s_async.cpp b/src/script/cpp_api/s_async.cpp index bfcfb4f7d..f55082308 100644 --- a/src/script/cpp_api/s_async.cpp +++ b/src/script/cpp_api/s_async.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 sapier, - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 sapier, #include #include diff --git a/src/script/cpp_api/s_async.h b/src/script/cpp_api/s_async.h index 1e34e40ea..3dc339821 100644 --- a/src/script/cpp_api/s_async.h +++ b/src/script/cpp_api/s_async.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 sapier, - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 sapier, #pragma once diff --git a/src/script/cpp_api/s_base.cpp b/src/script/cpp_api/s_base.cpp index 0c287be67..d04419302 100644 --- a/src/script/cpp_api/s_base.cpp +++ b/src/script/cpp_api/s_base.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "cpp_api/s_base.h" #include "cpp_api/s_internal.h" diff --git a/src/script/cpp_api/s_base.h b/src/script/cpp_api/s_base.h index d232edc64..b08a887f0 100644 --- a/src/script/cpp_api/s_base.h +++ b/src/script/cpp_api/s_base.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/script/cpp_api/s_client.cpp b/src/script/cpp_api/s_client.cpp index 78d0ec44d..772bc2412 100644 --- a/src/script/cpp_api/s_client.cpp +++ b/src/script/cpp_api/s_client.cpp @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola -Copyright (C) 2017 nerzhul, Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola +// Copyright (C) 2017 nerzhul, Loic Blot #include "s_client.h" #include "s_internal.h" diff --git a/src/script/cpp_api/s_client.h b/src/script/cpp_api/s_client.h index 74cc0d898..89a065752 100644 --- a/src/script/cpp_api/s_client.h +++ b/src/script/cpp_api/s_client.h @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola -Copyright (C) 2017 nerzhul, Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola +// Copyright (C) 2017 nerzhul, Loic Blot #pragma once diff --git a/src/script/cpp_api/s_entity.cpp b/src/script/cpp_api/s_entity.cpp index 559837e0d..c1b7244df 100644 --- a/src/script/cpp_api/s_entity.cpp +++ b/src/script/cpp_api/s_entity.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "cpp_api/s_entity.h" #include "cpp_api/s_internal.h" diff --git a/src/script/cpp_api/s_entity.h b/src/script/cpp_api/s_entity.h index 11c422f67..772830477 100644 --- a/src/script/cpp_api/s_entity.h +++ b/src/script/cpp_api/s_entity.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/script/cpp_api/s_env.cpp b/src/script/cpp_api/s_env.cpp index dcc610c4f..980ba37cb 100644 --- a/src/script/cpp_api/s_env.cpp +++ b/src/script/cpp_api/s_env.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "cpp_api/s_env.h" #include "cpp_api/s_internal.h" diff --git a/src/script/cpp_api/s_env.h b/src/script/cpp_api/s_env.h index 4722cb522..e32c6bc4c 100644 --- a/src/script/cpp_api/s_env.h +++ b/src/script/cpp_api/s_env.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/script/cpp_api/s_internal.h b/src/script/cpp_api/s_internal.h index 83b3b9d27..3379d15c6 100644 --- a/src/script/cpp_api/s_internal.h +++ b/src/script/cpp_api/s_internal.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola /******************************************************************************/ /******************************************************************************/ diff --git a/src/script/cpp_api/s_inventory.cpp b/src/script/cpp_api/s_inventory.cpp index e9c09f72e..1382d43c0 100644 --- a/src/script/cpp_api/s_inventory.cpp +++ b/src/script/cpp_api/s_inventory.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "cpp_api/s_inventory.h" #include "cpp_api/s_internal.h" diff --git a/src/script/cpp_api/s_inventory.h b/src/script/cpp_api/s_inventory.h index e79b3d18b..7c4978ea0 100644 --- a/src/script/cpp_api/s_inventory.h +++ b/src/script/cpp_api/s_inventory.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/script/cpp_api/s_item.cpp b/src/script/cpp_api/s_item.cpp index feba36ffb..93f972b42 100644 --- a/src/script/cpp_api/s_item.cpp +++ b/src/script/cpp_api/s_item.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "cpp_api/s_item.h" #include "cpp_api/s_internal.h" diff --git a/src/script/cpp_api/s_item.h b/src/script/cpp_api/s_item.h index e5088c47e..8c07dfae7 100644 --- a/src/script/cpp_api/s_item.h +++ b/src/script/cpp_api/s_item.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/script/cpp_api/s_mainmenu.cpp b/src/script/cpp_api/s_mainmenu.cpp index 290758e4a..04ca4b6b2 100644 --- a/src/script/cpp_api/s_mainmenu.cpp +++ b/src/script/cpp_api/s_mainmenu.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "cpp_api/s_mainmenu.h" #include "cpp_api/s_internal.h" diff --git a/src/script/cpp_api/s_mainmenu.h b/src/script/cpp_api/s_mainmenu.h index 7085c649b..394e4e25b 100644 --- a/src/script/cpp_api/s_mainmenu.h +++ b/src/script/cpp_api/s_mainmenu.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/script/cpp_api/s_mapgen.cpp b/src/script/cpp_api/s_mapgen.cpp index f50e95159..a48a95351 100644 --- a/src/script/cpp_api/s_mapgen.cpp +++ b/src/script/cpp_api/s_mapgen.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2022 sfan5 - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2022 sfan5 #include "cpp_api/s_mapgen.h" #include "cpp_api/s_internal.h" diff --git a/src/script/cpp_api/s_mapgen.h b/src/script/cpp_api/s_mapgen.h index 08786f99e..1c830502d 100644 --- a/src/script/cpp_api/s_mapgen.h +++ b/src/script/cpp_api/s_mapgen.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2022 sfan5 - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2022 sfan5 #pragma once diff --git a/src/script/cpp_api/s_modchannels.cpp b/src/script/cpp_api/s_modchannels.cpp index e2fa0dfec..b82bbbf12 100644 --- a/src/script/cpp_api/s_modchannels.cpp +++ b/src/script/cpp_api/s_modchannels.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2017 nerzhul, Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2017 nerzhul, Loic Blot #include "s_modchannels.h" #include "s_internal.h" diff --git a/src/script/cpp_api/s_modchannels.h b/src/script/cpp_api/s_modchannels.h index d82950762..932d85ace 100644 --- a/src/script/cpp_api/s_modchannels.h +++ b/src/script/cpp_api/s_modchannels.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2017 nerzhul, Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2017 nerzhul, Loic Blot #pragma once diff --git a/src/script/cpp_api/s_node.cpp b/src/script/cpp_api/s_node.cpp index bed5966cf..98169975a 100644 --- a/src/script/cpp_api/s_node.cpp +++ b/src/script/cpp_api/s_node.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "cpp_api/s_node.h" #include "cpp_api/s_internal.h" diff --git a/src/script/cpp_api/s_node.h b/src/script/cpp_api/s_node.h index 3c6a8445b..bf4dc6af5 100644 --- a/src/script/cpp_api/s_node.h +++ b/src/script/cpp_api/s_node.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/script/cpp_api/s_nodemeta.cpp b/src/script/cpp_api/s_nodemeta.cpp index 7ab3757f3..34c0ccece 100644 --- a/src/script/cpp_api/s_nodemeta.cpp +++ b/src/script/cpp_api/s_nodemeta.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "cpp_api/s_nodemeta.h" #include "cpp_api/s_internal.h" diff --git a/src/script/cpp_api/s_nodemeta.h b/src/script/cpp_api/s_nodemeta.h index 8c7cdd93e..ae67bb73a 100644 --- a/src/script/cpp_api/s_nodemeta.h +++ b/src/script/cpp_api/s_nodemeta.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/script/cpp_api/s_player.cpp b/src/script/cpp_api/s_player.cpp index 7de445c20..6cd46a3d9 100644 --- a/src/script/cpp_api/s_player.cpp +++ b/src/script/cpp_api/s_player.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "cpp_api/s_player.h" #include "cpp_api/s_internal.h" diff --git a/src/script/cpp_api/s_player.h b/src/script/cpp_api/s_player.h index e866aee46..f74134952 100644 --- a/src/script/cpp_api/s_player.h +++ b/src/script/cpp_api/s_player.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/script/cpp_api/s_security.cpp b/src/script/cpp_api/s_security.cpp index 11db1c0ef..0d3209985 100644 --- a/src/script/cpp_api/s_security.cpp +++ b/src/script/cpp_api/s_security.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "cpp_api/s_security.h" #include "lua_api/l_base.h" diff --git a/src/script/cpp_api/s_security.h b/src/script/cpp_api/s_security.h index ee93e1f99..91d5dce54 100644 --- a/src/script/cpp_api/s_security.h +++ b/src/script/cpp_api/s_security.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/script/cpp_api/s_server.cpp b/src/script/cpp_api/s_server.cpp index d8282998d..faacf9714 100644 --- a/src/script/cpp_api/s_server.cpp +++ b/src/script/cpp_api/s_server.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "cpp_api/s_server.h" #include "cpp_api/s_internal.h" diff --git a/src/script/cpp_api/s_server.h b/src/script/cpp_api/s_server.h index bb1289dd9..148cdfa84 100644 --- a/src/script/cpp_api/s_server.h +++ b/src/script/cpp_api/s_server.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/script/lua_api/l_areastore.cpp b/src/script/lua_api/l_areastore.cpp index c261338a4..dd5edfcc4 100644 --- a/src/script/lua_api/l_areastore.cpp +++ b/src/script/lua_api/l_areastore.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2015 est31 - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2015 est31 #include "lua_api/l_areastore.h" diff --git a/src/script/lua_api/l_areastore.h b/src/script/lua_api/l_areastore.h index 5d6ef2cf0..f25faa03b 100644 --- a/src/script/lua_api/l_areastore.h +++ b/src/script/lua_api/l_areastore.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2015 est31 - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2015 est31 #pragma once diff --git a/src/script/lua_api/l_auth.cpp b/src/script/lua_api/l_auth.cpp index 32d8a7411..d65cd013b 100644 --- a/src/script/lua_api/l_auth.cpp +++ b/src/script/lua_api/l_auth.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2018 bendeutsch, Ben Deutsch - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2018 bendeutsch, Ben Deutsch #include "lua_api/l_auth.h" #include "lua_api/l_internal.h" diff --git a/src/script/lua_api/l_auth.h b/src/script/lua_api/l_auth.h index fb9a9875b..74a0d13f9 100644 --- a/src/script/lua_api/l_auth.h +++ b/src/script/lua_api/l_auth.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2018 bendeutsch, Ben Deutsch - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2018 bendeutsch, Ben Deutsch #pragma once diff --git a/src/script/lua_api/l_base.cpp b/src/script/lua_api/l_base.cpp index 162f7d9f9..8c2affe81 100644 --- a/src/script/lua_api/l_base.cpp +++ b/src/script/lua_api/l_base.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "lua_api/l_base.h" #include "lua_api/l_internal.h" diff --git a/src/script/lua_api/l_base.h b/src/script/lua_api/l_base.h index ded9db371..d0448009a 100644 --- a/src/script/lua_api/l_base.h +++ b/src/script/lua_api/l_base.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/script/lua_api/l_camera.cpp b/src/script/lua_api/l_camera.cpp index a00a937d1..a00f92fac 100644 --- a/src/script/lua_api/l_camera.cpp +++ b/src/script/lua_api/l_camera.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #include "l_camera.h" #include diff --git a/src/script/lua_api/l_camera.h b/src/script/lua_api/l_camera.h index a5f57edd2..d7db33f50 100644 --- a/src/script/lua_api/l_camera.h +++ b/src/script/lua_api/l_camera.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013-2017 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013-2017 celeron55, Perttu Ahola #pragma once diff --git a/src/script/lua_api/l_client.cpp b/src/script/lua_api/l_client.cpp index 3bd9fc04d..7735bff92 100644 --- a/src/script/lua_api/l_client.cpp +++ b/src/script/lua_api/l_client.cpp @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola -Copyright (C) 2017 nerzhul, Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola +// Copyright (C) 2017 nerzhul, Loic Blot #include "l_client.h" #include "chatmessage.h" diff --git a/src/script/lua_api/l_client.h b/src/script/lua_api/l_client.h index d726bc8a3..fb5c53171 100644 --- a/src/script/lua_api/l_client.h +++ b/src/script/lua_api/l_client.h @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola -Copyright (C) 2017 nerzhul, Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola +// Copyright (C) 2017 nerzhul, Loic Blot #pragma once diff --git a/src/script/lua_api/l_client_sound.cpp b/src/script/lua_api/l_client_sound.cpp index 6e7717d80..d1808e8d2 100644 --- a/src/script/lua_api/l_client_sound.cpp +++ b/src/script/lua_api/l_client_sound.cpp @@ -1,23 +1,8 @@ -/* -Minetest -Copyright (C) 2023 DS -Copyright (C) 2013 celeron55, Perttu Ahola -Copyright (C) 2017 nerzhul, Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2023 DS +// Copyright (C) 2013 celeron55, Perttu Ahola +// Copyright (C) 2017 nerzhul, Loic Blot #include "l_client_sound.h" #include "l_internal.h" diff --git a/src/script/lua_api/l_client_sound.h b/src/script/lua_api/l_client_sound.h index c4ebe99c4..1028afcf5 100644 --- a/src/script/lua_api/l_client_sound.h +++ b/src/script/lua_api/l_client_sound.h @@ -1,23 +1,8 @@ -/* -Minetest -Copyright (C) 2023 DS -Copyright (C) 2013 celeron55, Perttu Ahola -Copyright (C) 2017 nerzhul, Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2023 DS +// Copyright (C) 2013 celeron55, Perttu Ahola +// Copyright (C) 2017 nerzhul, Loic Blot #pragma once diff --git a/src/script/lua_api/l_craft.cpp b/src/script/lua_api/l_craft.cpp index 137b210be..be6eb4102 100644 --- a/src/script/lua_api/l_craft.cpp +++ b/src/script/lua_api/l_craft.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "lua_api/l_craft.h" diff --git a/src/script/lua_api/l_craft.h b/src/script/lua_api/l_craft.h index 5234af56f..5431a8edb 100644 --- a/src/script/lua_api/l_craft.h +++ b/src/script/lua_api/l_craft.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/script/lua_api/l_env.cpp b/src/script/lua_api/l_env.cpp index 7e8b44da9..666dee712 100644 --- a/src/script/lua_api/l_env.cpp +++ b/src/script/lua_api/l_env.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include #include "lua_api/l_env.h" diff --git a/src/script/lua_api/l_env.h b/src/script/lua_api/l_env.h index ba0f2eb61..49b3458a6 100644 --- a/src/script/lua_api/l_env.h +++ b/src/script/lua_api/l_env.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/script/lua_api/l_http.cpp b/src/script/lua_api/l_http.cpp index ea965c921..2669779e5 100644 --- a/src/script/lua_api/l_http.cpp +++ b/src/script/lua_api/l_http.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "lua_api/l_internal.h" #include "common/c_converter.h" diff --git a/src/script/lua_api/l_http.h b/src/script/lua_api/l_http.h index 8d084ecd9..081aaa0c4 100644 --- a/src/script/lua_api/l_http.h +++ b/src/script/lua_api/l_http.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/script/lua_api/l_internal.h b/src/script/lua_api/l_internal.h index fb20c061a..81e6086f2 100644 --- a/src/script/lua_api/l_internal.h +++ b/src/script/lua_api/l_internal.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola /******************************************************************************/ /******************************************************************************/ diff --git a/src/script/lua_api/l_inventory.cpp b/src/script/lua_api/l_inventory.cpp index 311cc600f..d1c357329 100644 --- a/src/script/lua_api/l_inventory.cpp +++ b/src/script/lua_api/l_inventory.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "lua_api/l_inventory.h" #include "lua_api/l_internal.h" diff --git a/src/script/lua_api/l_inventory.h b/src/script/lua_api/l_inventory.h index f8855ef7a..b320536b3 100644 --- a/src/script/lua_api/l_inventory.h +++ b/src/script/lua_api/l_inventory.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/script/lua_api/l_item.cpp b/src/script/lua_api/l_item.cpp index 4ac998a8f..37e23e59f 100644 --- a/src/script/lua_api/l_item.cpp +++ b/src/script/lua_api/l_item.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "lua_api/l_item.h" #include "lua_api/l_itemstackmeta.h" diff --git a/src/script/lua_api/l_item.h b/src/script/lua_api/l_item.h index 243d17d72..b56a8f1b6 100644 --- a/src/script/lua_api/l_item.h +++ b/src/script/lua_api/l_item.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/script/lua_api/l_itemstackmeta.cpp b/src/script/lua_api/l_itemstackmeta.cpp index 730fab3b4..d6716bd66 100644 --- a/src/script/lua_api/l_itemstackmeta.cpp +++ b/src/script/lua_api/l_itemstackmeta.cpp @@ -1,23 +1,8 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola -Copyright (C) 2017-8 rubenwardy -Copyright (C) 2017 raymoo - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola +// Copyright (C) 2017-8 rubenwardy +// Copyright (C) 2017 raymoo #include "lua_api/l_itemstackmeta.h" #include "lua_api/l_internal.h" diff --git a/src/script/lua_api/l_itemstackmeta.h b/src/script/lua_api/l_itemstackmeta.h index 27adc57e0..85278fd98 100644 --- a/src/script/lua_api/l_itemstackmeta.h +++ b/src/script/lua_api/l_itemstackmeta.h @@ -1,23 +1,8 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola -Copyright (C) 2017-8 rubenwardy -Copyright (C) 2017 raymoo - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola +// Copyright (C) 2017-8 rubenwardy +// Copyright (C) 2017 raymoo #pragma once diff --git a/src/script/lua_api/l_localplayer.cpp b/src/script/lua_api/l_localplayer.cpp index 73240ce9b..49900f145 100644 --- a/src/script/lua_api/l_localplayer.cpp +++ b/src/script/lua_api/l_localplayer.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2017 Dumbeldor, Vincent Glize - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2017 Dumbeldor, Vincent Glize #include "l_localplayer.h" #include "l_internal.h" diff --git a/src/script/lua_api/l_localplayer.h b/src/script/lua_api/l_localplayer.h index d7865b08c..7ec1c2cf7 100644 --- a/src/script/lua_api/l_localplayer.h +++ b/src/script/lua_api/l_localplayer.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2017 Dumbeldor, Vincent Glize - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2017 Dumbeldor, Vincent Glize #pragma once diff --git a/src/script/lua_api/l_mainmenu.cpp b/src/script/lua_api/l_mainmenu.cpp index e4b9ddaf5..69f63d964 100644 --- a/src/script/lua_api/l_mainmenu.cpp +++ b/src/script/lua_api/l_mainmenu.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 sapier - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 sapier #include "lua_api/l_mainmenu.h" #include "lua_api/l_internal.h" diff --git a/src/script/lua_api/l_mainmenu.h b/src/script/lua_api/l_mainmenu.h index 877aab2e8..25ea551bc 100644 --- a/src/script/lua_api/l_mainmenu.h +++ b/src/script/lua_api/l_mainmenu.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 sapier - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 sapier #pragma once diff --git a/src/script/lua_api/l_mainmenu_sound.cpp b/src/script/lua_api/l_mainmenu_sound.cpp index dce7c7b2f..5177c8bad 100644 --- a/src/script/lua_api/l_mainmenu_sound.cpp +++ b/src/script/lua_api/l_mainmenu_sound.cpp @@ -1,23 +1,8 @@ -/* -Minetest -Copyright (C) 2023 DS -Copyright (C) 2013 celeron55, Perttu Ahola -Copyright (C) 2017 nerzhul, Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2023 DS +// Copyright (C) 2013 celeron55, Perttu Ahola +// Copyright (C) 2017 nerzhul, Loic Blot #include "l_mainmenu_sound.h" #include "l_internal.h" diff --git a/src/script/lua_api/l_mainmenu_sound.h b/src/script/lua_api/l_mainmenu_sound.h index a7cedf5b4..4ef55ee41 100644 --- a/src/script/lua_api/l_mainmenu_sound.h +++ b/src/script/lua_api/l_mainmenu_sound.h @@ -1,23 +1,8 @@ -/* -Minetest -Copyright (C) 2023 DS -Copyright (C) 2013 celeron55, Perttu Ahola -Copyright (C) 2017 nerzhul, Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2023 DS +// Copyright (C) 2013 celeron55, Perttu Ahola +// Copyright (C) 2017 nerzhul, Loic Blot #pragma once diff --git a/src/script/lua_api/l_mapgen.cpp b/src/script/lua_api/l_mapgen.cpp index 8e1ef97d6..0e9c15a1b 100644 --- a/src/script/lua_api/l_mapgen.cpp +++ b/src/script/lua_api/l_mapgen.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "lua_api/l_mapgen.h" #include "lua_api/l_internal.h" diff --git a/src/script/lua_api/l_mapgen.h b/src/script/lua_api/l_mapgen.h index c540057b7..d72cbcbad 100644 --- a/src/script/lua_api/l_mapgen.h +++ b/src/script/lua_api/l_mapgen.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/script/lua_api/l_metadata.cpp b/src/script/lua_api/l_metadata.cpp index e5144259f..1eaf1cfba 100644 --- a/src/script/lua_api/l_metadata.cpp +++ b/src/script/lua_api/l_metadata.cpp @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola -Copyright (C) 2017-8 rubenwardy - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola +// Copyright (C) 2017-8 rubenwardy #include "lua_api/l_metadata.h" #include "lua_api/l_internal.h" diff --git a/src/script/lua_api/l_metadata.h b/src/script/lua_api/l_metadata.h index cae15e232..a961e0ae3 100644 --- a/src/script/lua_api/l_metadata.h +++ b/src/script/lua_api/l_metadata.h @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2013-8 celeron55, Perttu Ahola -Copyright (C) 2017-8 rubenwardy - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013-8 celeron55, Perttu Ahola +// Copyright (C) 2017-8 rubenwardy #pragma once diff --git a/src/script/lua_api/l_minimap.cpp b/src/script/lua_api/l_minimap.cpp index fcaf89bbb..b79c23627 100644 --- a/src/script/lua_api/l_minimap.cpp +++ b/src/script/lua_api/l_minimap.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2017 Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2017 Loic Blot #include "lua_api/l_minimap.h" diff --git a/src/script/lua_api/l_minimap.h b/src/script/lua_api/l_minimap.h index 3e2869bfb..5ce2a9a29 100644 --- a/src/script/lua_api/l_minimap.h +++ b/src/script/lua_api/l_minimap.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2017 Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2017 Loic Blot #pragma once diff --git a/src/script/lua_api/l_modchannels.cpp b/src/script/lua_api/l_modchannels.cpp index 911f05f69..d3dd7495f 100644 --- a/src/script/lua_api/l_modchannels.cpp +++ b/src/script/lua_api/l_modchannels.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2017 nerzhul, Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2017 nerzhul, Loic Blot #include #include diff --git a/src/script/lua_api/l_modchannels.h b/src/script/lua_api/l_modchannels.h index 86c24351d..44b060278 100644 --- a/src/script/lua_api/l_modchannels.h +++ b/src/script/lua_api/l_modchannels.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2017 nerzhul, Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2017 nerzhul, Loic Blot #pragma once diff --git a/src/script/lua_api/l_nodemeta.cpp b/src/script/lua_api/l_nodemeta.cpp index 07bdced99..40285bfe7 100644 --- a/src/script/lua_api/l_nodemeta.cpp +++ b/src/script/lua_api/l_nodemeta.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "lua_api/l_nodemeta.h" #include "lua_api/l_internal.h" diff --git a/src/script/lua_api/l_nodemeta.h b/src/script/lua_api/l_nodemeta.h index 458ba9348..58ad678ee 100644 --- a/src/script/lua_api/l_nodemeta.h +++ b/src/script/lua_api/l_nodemeta.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/script/lua_api/l_nodetimer.cpp b/src/script/lua_api/l_nodetimer.cpp index c93574144..7a4319e8f 100644 --- a/src/script/lua_api/l_nodetimer.cpp +++ b/src/script/lua_api/l_nodetimer.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "lua_api/l_nodetimer.h" #include "lua_api/l_internal.h" diff --git a/src/script/lua_api/l_nodetimer.h b/src/script/lua_api/l_nodetimer.h index f28e0abd5..091a5b468 100644 --- a/src/script/lua_api/l_nodetimer.h +++ b/src/script/lua_api/l_nodetimer.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/script/lua_api/l_noise.cpp b/src/script/lua_api/l_noise.cpp index ead14fec0..3818218ee 100644 --- a/src/script/lua_api/l_noise.cpp +++ b/src/script/lua_api/l_noise.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "lua_api/l_noise.h" #include "lua_api/l_internal.h" diff --git a/src/script/lua_api/l_noise.h b/src/script/lua_api/l_noise.h index 9c7e799e8..595aa0694 100644 --- a/src/script/lua_api/l_noise.h +++ b/src/script/lua_api/l_noise.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/script/lua_api/l_object.cpp b/src/script/lua_api/l_object.cpp index cd9be5428..2fce24906 100644 --- a/src/script/lua_api/l_object.cpp +++ b/src/script/lua_api/l_object.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "lua_api/l_object.h" #include diff --git a/src/script/lua_api/l_object.h b/src/script/lua_api/l_object.h index bc131f4f2..900ec243d 100644 --- a/src/script/lua_api/l_object.h +++ b/src/script/lua_api/l_object.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/script/lua_api/l_particleparams.h b/src/script/lua_api/l_particleparams.h index 0ad1541b4..7303081db 100644 --- a/src/script/lua_api/l_particleparams.h +++ b/src/script/lua_api/l_particleparams.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2021 velartrill, Lexi Hale - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2021 velartrill, Lexi Hale #pragma once #include "lua_api/l_particles.h" diff --git a/src/script/lua_api/l_particles.cpp b/src/script/lua_api/l_particles.cpp index 06511df07..80c3f27c2 100644 --- a/src/script/lua_api/l_particles.cpp +++ b/src/script/lua_api/l_particles.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "lua_api/l_particles.h" #include "lua_api/l_object.h" diff --git a/src/script/lua_api/l_particles.h b/src/script/lua_api/l_particles.h index 122810b6d..702488310 100644 --- a/src/script/lua_api/l_particles.h +++ b/src/script/lua_api/l_particles.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/script/lua_api/l_particles_local.cpp b/src/script/lua_api/l_particles_local.cpp index 43304b7a7..52f46ed4c 100644 --- a/src/script/lua_api/l_particles_local.cpp +++ b/src/script/lua_api/l_particles_local.cpp @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola -Copyright (C) 2017 red-001 - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola +// Copyright (C) 2017 red-001 #include "lua_api/l_particles_local.h" #include "common/c_content.h" diff --git a/src/script/lua_api/l_particles_local.h b/src/script/lua_api/l_particles_local.h index d8bb2b1c6..cca1b1512 100644 --- a/src/script/lua_api/l_particles_local.h +++ b/src/script/lua_api/l_particles_local.h @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola -Copyright (C) 2017 red-001 - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola +// Copyright (C) 2017 red-001 #pragma once diff --git a/src/script/lua_api/l_playermeta.cpp b/src/script/lua_api/l_playermeta.cpp index a3377c524..e33df3e9f 100644 --- a/src/script/lua_api/l_playermeta.cpp +++ b/src/script/lua_api/l_playermeta.cpp @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola -Copyright (C) 2017-8 rubenwardy - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola +// Copyright (C) 2017-8 rubenwardy #include "lua_api/l_playermeta.h" #include "lua_api/l_internal.h" diff --git a/src/script/lua_api/l_playermeta.h b/src/script/lua_api/l_playermeta.h index 3f39c3755..c0f708643 100644 --- a/src/script/lua_api/l_playermeta.h +++ b/src/script/lua_api/l_playermeta.h @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola -Copyright (C) 2017-8 rubenwardy - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola +// Copyright (C) 2017-8 rubenwardy #pragma once diff --git a/src/script/lua_api/l_rollback.cpp b/src/script/lua_api/l_rollback.cpp index 482b0cbf5..93137263c 100644 --- a/src/script/lua_api/l_rollback.cpp +++ b/src/script/lua_api/l_rollback.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "lua_api/l_rollback.h" #include "lua_api/l_internal.h" diff --git a/src/script/lua_api/l_rollback.h b/src/script/lua_api/l_rollback.h index c26ff634e..b1b1daee8 100644 --- a/src/script/lua_api/l_rollback.h +++ b/src/script/lua_api/l_rollback.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/script/lua_api/l_server.cpp b/src/script/lua_api/l_server.cpp index 82170f936..061dbb206 100644 --- a/src/script/lua_api/l_server.cpp +++ b/src/script/lua_api/l_server.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "lua_api/l_server.h" #include "lua_api/l_internal.h" diff --git a/src/script/lua_api/l_server.h b/src/script/lua_api/l_server.h index a0fae79bd..6de7de363 100644 --- a/src/script/lua_api/l_server.h +++ b/src/script/lua_api/l_server.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/script/lua_api/l_settings.cpp b/src/script/lua_api/l_settings.cpp index cde337b1a..f3f1a57bf 100644 --- a/src/script/lua_api/l_settings.cpp +++ b/src/script/lua_api/l_settings.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 PilzAdam - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 PilzAdam #include "lua_api/l_settings.h" #include "lua_api/l_internal.h" diff --git a/src/script/lua_api/l_settings.h b/src/script/lua_api/l_settings.h index 96f56bb3b..ca609fc1f 100644 --- a/src/script/lua_api/l_settings.h +++ b/src/script/lua_api/l_settings.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 PilzAdam - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 PilzAdam #pragma once diff --git a/src/script/lua_api/l_storage.cpp b/src/script/lua_api/l_storage.cpp index dd2a4123d..d03aeed78 100644 --- a/src/script/lua_api/l_storage.cpp +++ b/src/script/lua_api/l_storage.cpp @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola -Copyright (C) 2017 nerzhul, Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola +// Copyright (C) 2017 nerzhul, Loic Blot #include "lua_api/l_storage.h" #include "l_internal.h" diff --git a/src/script/lua_api/l_storage.h b/src/script/lua_api/l_storage.h index ce41adb08..edcfb1cb6 100644 --- a/src/script/lua_api/l_storage.h +++ b/src/script/lua_api/l_storage.h @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola -Copyright (C) 2017 nerzhul, Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola +// Copyright (C) 2017 nerzhul, Loic Blot #pragma once diff --git a/src/script/lua_api/l_util.cpp b/src/script/lua_api/l_util.cpp index e78ac6d3f..e464cb3a2 100644 --- a/src/script/lua_api/l_util.cpp +++ b/src/script/lua_api/l_util.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "irrlichttypes_extrabloated.h" #include "lua_api/l_util.h" diff --git a/src/script/lua_api/l_util.h b/src/script/lua_api/l_util.h index 89cc684e1..0df2c3ae4 100644 --- a/src/script/lua_api/l_util.h +++ b/src/script/lua_api/l_util.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/script/lua_api/l_vmanip.cpp b/src/script/lua_api/l_vmanip.cpp index 33f6f7407..464cd9fd3 100644 --- a/src/script/lua_api/l_vmanip.cpp +++ b/src/script/lua_api/l_vmanip.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 kwolekr, Ryan Kwolek - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 kwolekr, Ryan Kwolek #include #include "lua_api/l_vmanip.h" diff --git a/src/script/lua_api/l_vmanip.h b/src/script/lua_api/l_vmanip.h index 820f89d5a..5ba1caffa 100644 --- a/src/script/lua_api/l_vmanip.h +++ b/src/script/lua_api/l_vmanip.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 kwolekr, Ryan Kwolek - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 kwolekr, Ryan Kwolek #pragma once diff --git a/src/script/scripting_client.cpp b/src/script/scripting_client.cpp index 4e90079bd..dc9b6212c 100644 --- a/src/script/scripting_client.cpp +++ b/src/script/scripting_client.cpp @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola -Copyright (C) 2017 nerzhul, Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola +// Copyright (C) 2017 nerzhul, Loic Blot #include "scripting_client.h" #include "client/client.h" diff --git a/src/script/scripting_client.h b/src/script/scripting_client.h index 3088029f0..cfe4133c7 100644 --- a/src/script/scripting_client.h +++ b/src/script/scripting_client.h @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola -Copyright (C) 2017 nerzhul, Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola +// Copyright (C) 2017 nerzhul, Loic Blot #pragma once diff --git a/src/script/scripting_emerge.cpp b/src/script/scripting_emerge.cpp index f96a6c294..cc2c350d9 100644 --- a/src/script/scripting_emerge.cpp +++ b/src/script/scripting_emerge.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2022 sfan5 - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2022 sfan5 #include "scripting_emerge.h" #include "emerge_internal.h" diff --git a/src/script/scripting_emerge.h b/src/script/scripting_emerge.h index 713dda7c2..8f3c7c348 100644 --- a/src/script/scripting_emerge.h +++ b/src/script/scripting_emerge.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2022 sfan5 - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2022 sfan5 #pragma once #include "cpp_api/s_base.h" diff --git a/src/script/scripting_mainmenu.cpp b/src/script/scripting_mainmenu.cpp index e5cb81cab..17e2ebb1e 100644 --- a/src/script/scripting_mainmenu.cpp +++ b/src/script/scripting_mainmenu.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "scripting_mainmenu.h" #include "content/mods.h" diff --git a/src/script/scripting_mainmenu.h b/src/script/scripting_mainmenu.h index d2e5716e2..8b7c0cfe8 100644 --- a/src/script/scripting_mainmenu.h +++ b/src/script/scripting_mainmenu.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/script/scripting_server.cpp b/src/script/scripting_server.cpp index d7d2513bb..db1dfc34b 100644 --- a/src/script/scripting_server.cpp +++ b/src/script/scripting_server.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "scripting_server.h" #include "server.h" diff --git a/src/script/scripting_server.h b/src/script/scripting_server.h index 20d99313a..54093e84a 100644 --- a/src/script/scripting_server.h +++ b/src/script/scripting_server.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once #include "cpp_api/s_base.h" diff --git a/src/serialization.cpp b/src/serialization.cpp index d35e0f23f..59d302d1a 100644 --- a/src/serialization.cpp +++ b/src/serialization.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "serialization.h" #include "log.h" diff --git a/src/serialization.h b/src/serialization.h index d2ffb054f..7e63ec23c 100644 --- a/src/serialization.h +++ b/src/serialization.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/server.cpp b/src/server.cpp index 531eaf664..8d1a41811 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #include "server.h" #include diff --git a/src/server.h b/src/server.h index 69dace6d5..f2d767e99 100644 --- a/src/server.h +++ b/src/server.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/server/activeobjectmgr.cpp b/src/server/activeobjectmgr.cpp index f0216d9e3..155cf50fb 100644 --- a/src/server/activeobjectmgr.cpp +++ b/src/server/activeobjectmgr.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2018 nerzhul, Loic BLOT - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2018 nerzhul, Loic BLOT #include #include "mapblock.h" diff --git a/src/server/activeobjectmgr.h b/src/server/activeobjectmgr.h index 82c0ab3ad..854a75b18 100644 --- a/src/server/activeobjectmgr.h +++ b/src/server/activeobjectmgr.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2018 nerzhul, Loic BLOT - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2018 nerzhul, Loic BLOT #pragma once diff --git a/src/server/ban.cpp b/src/server/ban.cpp index 4af108795..737f5a57e 100644 --- a/src/server/ban.cpp +++ b/src/server/ban.cpp @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola -Copyright (C) 2018 nerzhul, Loic BLOT - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola +// Copyright (C) 2018 nerzhul, Loic BLOT #include "ban.h" #include diff --git a/src/server/ban.h b/src/server/ban.h index 3e2ab7a87..146f3210a 100644 --- a/src/server/ban.h +++ b/src/server/ban.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/server/clientiface.cpp b/src/server/clientiface.cpp index 0e5140f00..f50b4273f 100644 --- a/src/server/clientiface.cpp +++ b/src/server/clientiface.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2014 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2014 celeron55, Perttu Ahola #include #include "clientiface.h" diff --git a/src/server/clientiface.h b/src/server/clientiface.h index 5b20d8f70..4546f045e 100644 --- a/src/server/clientiface.h +++ b/src/server/clientiface.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2014 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2014 celeron55, Perttu Ahola #pragma once diff --git a/src/server/luaentity_sao.cpp b/src/server/luaentity_sao.cpp index e932f418b..27408565d 100644 --- a/src/server/luaentity_sao.cpp +++ b/src/server/luaentity_sao.cpp @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola -Copyright (C) 2013-2020 Minetest core developers & community - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola +// Copyright (C) 2013-2020 Minetest core developers & community #include "luaentity_sao.h" #include "collision.h" diff --git a/src/server/luaentity_sao.h b/src/server/luaentity_sao.h index 6bc7a8409..9ea1d3f22 100644 --- a/src/server/luaentity_sao.h +++ b/src/server/luaentity_sao.h @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola -Copyright (C) 2013-2020 Minetest core developers & community - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola +// Copyright (C) 2013-2020 Minetest core developers & community #pragma once diff --git a/src/server/mods.cpp b/src/server/mods.cpp index 8d0152ba2..fb47439c9 100644 --- a/src/server/mods.cpp +++ b/src/server/mods.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2018 nerzhul, Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2018 nerzhul, Loic Blot #include "mods.h" #include "filesys.h" diff --git a/src/server/mods.h b/src/server/mods.h index f6a40bf69..a82d4d572 100644 --- a/src/server/mods.h +++ b/src/server/mods.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2018 nerzhul, Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2018 nerzhul, Loic Blot #pragma once diff --git a/src/server/player_sao.cpp b/src/server/player_sao.cpp index a5961fa39..5d6b891fa 100644 --- a/src/server/player_sao.cpp +++ b/src/server/player_sao.cpp @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola -Copyright (C) 2013-2020 Minetest core developers & community - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola +// Copyright (C) 2013-2020 Minetest core developers & community #include "player_sao.h" #include "nodedef.h" diff --git a/src/server/player_sao.h b/src/server/player_sao.h index 487e37957..a792f0c11 100644 --- a/src/server/player_sao.h +++ b/src/server/player_sao.h @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola -Copyright (C) 2013-2020 Minetest core developers & community - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola +// Copyright (C) 2013-2020 Minetest core developers & community #pragma once diff --git a/src/server/rollback.cpp b/src/server/rollback.cpp index 7ec4b98d4..ba93385e9 100644 --- a/src/server/rollback.cpp +++ b/src/server/rollback.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "rollback.h" #include diff --git a/src/server/rollback.h b/src/server/rollback.h index b5131fa71..c085b7313 100644 --- a/src/server/rollback.h +++ b/src/server/rollback.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/server/serveractiveobject.cpp b/src/server/serveractiveobject.cpp index c660b5a69..913c402ed 100644 --- a/src/server/serveractiveobject.cpp +++ b/src/server/serveractiveobject.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #include "serveractiveobject.h" #include "inventory.h" diff --git a/src/server/serveractiveobject.h b/src/server/serveractiveobject.h index 486b3b230..8b60bc5f8 100644 --- a/src/server/serveractiveobject.h +++ b/src/server/serveractiveobject.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/server/serverinventorymgr.cpp b/src/server/serverinventorymgr.cpp index c633b6fca..dc6500767 100644 --- a/src/server/serverinventorymgr.cpp +++ b/src/server/serverinventorymgr.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2020 Minetest core development team - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2020 Minetest core development team #include "serverinventorymgr.h" #include "map.h" diff --git a/src/server/serverinventorymgr.h b/src/server/serverinventorymgr.h index 9b654c507..31979d6e4 100644 --- a/src/server/serverinventorymgr.h +++ b/src/server/serverinventorymgr.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2020 Minetest core development team - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2020 Minetest core development team #pragma once diff --git a/src/server/serverlist.cpp b/src/server/serverlist.cpp index 0586a1979..ca82bbc52 100644 --- a/src/server/serverlist.cpp +++ b/src/server/serverlist.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include #include "version.h" diff --git a/src/server/serverlist.h b/src/server/serverlist.h index 2e2b8590f..fd7551b69 100644 --- a/src/server/serverlist.h +++ b/src/server/serverlist.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "config.h" #include "content/mods.h" diff --git a/src/server/unit_sao.cpp b/src/server/unit_sao.cpp index a4f547146..d7fff69bf 100644 --- a/src/server/unit_sao.cpp +++ b/src/server/unit_sao.cpp @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola -Copyright (C) 2013-2020 Minetest core developers & community - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola +// Copyright (C) 2013-2020 Minetest core developers & community #include "unit_sao.h" #include "scripting_server.h" diff --git a/src/server/unit_sao.h b/src/server/unit_sao.h index 32b5dd30e..8cc27c967 100644 --- a/src/server/unit_sao.h +++ b/src/server/unit_sao.h @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola -Copyright (C) 2013-2020 Minetest core developers & community - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola +// Copyright (C) 2013-2020 Minetest core developers & community #pragma once diff --git a/src/serverenvironment.cpp b/src/serverenvironment.cpp index 813184de1..b333a30ec 100644 --- a/src/serverenvironment.cpp +++ b/src/serverenvironment.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2017 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2017 celeron55, Perttu Ahola #include #include diff --git a/src/serverenvironment.h b/src/serverenvironment.h index 0b00fac91..42f777dde 100644 --- a/src/serverenvironment.h +++ b/src/serverenvironment.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2017 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2017 celeron55, Perttu Ahola #pragma once diff --git a/src/servermap.cpp b/src/servermap.cpp index f57e5b5e4..b72626255 100644 --- a/src/servermap.cpp +++ b/src/servermap.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2024 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2024 celeron55, Perttu Ahola #include "map.h" #include "mapsector.h" diff --git a/src/servermap.h b/src/servermap.h index 3a2102668..203020006 100644 --- a/src/servermap.h +++ b/src/servermap.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2024 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2024 celeron55, Perttu Ahola #pragma once diff --git a/src/settings.cpp b/src/settings.cpp index 867801e06..02c84437d 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #include "settings.h" #include "irrlichttypes_bloated.h" diff --git a/src/settings.h b/src/settings.h index 8fc5b8258..0638dad2d 100644 --- a/src/settings.h +++ b/src/settings.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/skyparams.h b/src/skyparams.h index 52a15810b..79a4d8024 100644 --- a/src/skyparams.h +++ b/src/skyparams.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2019 Jordach, Jordan Snelling - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2019 Jordach, Jordan Snelling #pragma once diff --git a/src/sound.h b/src/sound.h index afb9ac9ef..fa3135c03 100644 --- a/src/sound.h +++ b/src/sound.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/staticobject.cpp b/src/staticobject.cpp index 8fbfcef8b..5674a7f76 100644 --- a/src/staticobject.cpp +++ b/src/staticobject.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #include "staticobject.h" #include "util/serialize.h" diff --git a/src/staticobject.h b/src/staticobject.h index eef090376..f741e528c 100644 --- a/src/staticobject.h +++ b/src/staticobject.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/terminal_chat_console.cpp b/src/terminal_chat_console.cpp index 752d7c7b8..471409ee0 100644 --- a/src/terminal_chat_console.cpp +++ b/src/terminal_chat_console.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2015 est31 - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2015 est31 #include #include "config.h" diff --git a/src/terminal_chat_console.h b/src/terminal_chat_console.h index 7ce2c5c2b..f49557d0c 100644 --- a/src/terminal_chat_console.h +++ b/src/terminal_chat_console.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2015 est31 - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2015 est31 #pragma once diff --git a/src/texture_override.cpp b/src/texture_override.cpp index e8386afe2..472dc78b6 100644 --- a/src/texture_override.cpp +++ b/src/texture_override.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2020 Hugues Ross - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2020 Hugues Ross #include "texture_override.h" diff --git a/src/texture_override.h b/src/texture_override.h index 19e55689c..f86c112a9 100644 --- a/src/texture_override.h +++ b/src/texture_override.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2020 Hugues Ross - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2020 Hugues Ross #pragma once diff --git a/src/threading/semaphore.cpp b/src/threading/semaphore.cpp index ce22dcd05..c2ef6a0c2 100644 --- a/src/threading/semaphore.cpp +++ b/src/threading/semaphore.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 sapier - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 sapier #include "threading/semaphore.h" diff --git a/src/threading/semaphore.h b/src/threading/semaphore.h index a8847a100..6fdfb5e99 100644 --- a/src/threading/semaphore.h +++ b/src/threading/semaphore.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 sapier - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 sapier #pragma once diff --git a/src/tileanimation.cpp b/src/tileanimation.cpp index 53ae264af..311fa4c84 100644 --- a/src/tileanimation.cpp +++ b/src/tileanimation.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2016 sfan5 - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2016 sfan5 #include "tileanimation.h" #include "util/serialize.h" diff --git a/src/tileanimation.h b/src/tileanimation.h index db258e240..27ae3b7c7 100644 --- a/src/tileanimation.h +++ b/src/tileanimation.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2016 sfan5 - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2016 sfan5 #pragma once diff --git a/src/tool.cpp b/src/tool.cpp index 0cb1724de..7f32e63d4 100644 --- a/src/tool.cpp +++ b/src/tool.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "tool.h" #include "itemdef.h" diff --git a/src/tool.h b/src/tool.h index c3d811dd4..b2e8c7ae5 100644 --- a/src/tool.h +++ b/src/tool.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/translation.cpp b/src/translation.cpp index 186dfad1b..71469507d 100644 --- a/src/translation.cpp +++ b/src/translation.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2017 Nore, Nathanaëlle Courant - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2017 Nore, Nathanaëlle Courant #include "translation.h" #include "log.h" diff --git a/src/translation.h b/src/translation.h index c61ef4fe7..c5494dd78 100644 --- a/src/translation.h +++ b/src/translation.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2017 Nore, Nathanaëlle Courant - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2017 Nore, Nathanaëlle Courant #pragma once diff --git a/src/unittest/mesh_compare.cpp b/src/unittest/mesh_compare.cpp index 6e21d377b..3b79b7f1c 100644 --- a/src/unittest/mesh_compare.cpp +++ b/src/unittest/mesh_compare.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2023 Vitaliy Lobachevskiy - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2023 Vitaliy Lobachevskiy #include "mesh_compare.h" #include diff --git a/src/unittest/mesh_compare.h b/src/unittest/mesh_compare.h index 3f0d53d67..75e86e1c4 100644 --- a/src/unittest/mesh_compare.h +++ b/src/unittest/mesh_compare.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2023 Vitaliy Lobachevskiy - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2023 Vitaliy Lobachevskiy #pragma once #include diff --git a/src/unittest/mock_activeobject.h b/src/unittest/mock_activeobject.h index d62f002e2..d31df1a4d 100644 --- a/src/unittest/mock_activeobject.h +++ b/src/unittest/mock_activeobject.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2022 Minetest core developers & community - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2022 Minetest core developers & community #include diff --git a/src/unittest/mock_inventorymanager.h b/src/unittest/mock_inventorymanager.h index bdf75296a..dec1b0503 100644 --- a/src/unittest/mock_inventorymanager.h +++ b/src/unittest/mock_inventorymanager.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2022 Minetest core developers & community - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2022 Minetest core developers & community #pragma once diff --git a/src/unittest/mock_server.h b/src/unittest/mock_server.h index 6ac86b471..722e55f5d 100644 --- a/src/unittest/mock_server.h +++ b/src/unittest/mock_server.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2022 Minetest core developers & community - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2022 Minetest core developers & community #pragma once diff --git a/src/unittest/mock_serveractiveobject.h b/src/unittest/mock_serveractiveobject.h index 995a27e55..9d886b4eb 100644 --- a/src/unittest/mock_serveractiveobject.h +++ b/src/unittest/mock_serveractiveobject.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2022 Minetest core developers & community - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2022 Minetest core developers & community #include diff --git a/src/unittest/test.cpp b/src/unittest/test.cpp index a3b9250a0..8c20b0ed5 100644 --- a/src/unittest/test.cpp +++ b/src/unittest/test.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "catch.h" diff --git a/src/unittest/test.h b/src/unittest/test.h index 881189adf..cc772f670 100644 --- a/src/unittest/test.h +++ b/src/unittest/test.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/unittest/test_activeobject.cpp b/src/unittest/test_activeobject.cpp index 872130a2a..42354b342 100644 --- a/src/unittest/test_activeobject.cpp +++ b/src/unittest/test_activeobject.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2018 nerzhul, Loic BLOT - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2018 nerzhul, Loic BLOT #include "test.h" diff --git a/src/unittest/test_address.cpp b/src/unittest/test_address.cpp index dd77d0264..7ae7f85cf 100644 --- a/src/unittest/test_address.cpp +++ b/src/unittest/test_address.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "test.h" diff --git a/src/unittest/test_areastore.cpp b/src/unittest/test_areastore.cpp index 2af3ca90c..ff7a0fb2d 100644 --- a/src/unittest/test_areastore.cpp +++ b/src/unittest/test_areastore.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2015 est31, - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2015 est31, #include "test.h" diff --git a/src/unittest/test_authdatabase.cpp b/src/unittest/test_authdatabase.cpp index 856f04437..a04c6f650 100644 --- a/src/unittest/test_authdatabase.cpp +++ b/src/unittest/test_authdatabase.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2018 bendeutsch, Ben Deutsch - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2018 bendeutsch, Ben Deutsch #include "test.h" diff --git a/src/unittest/test_ban.cpp b/src/unittest/test_ban.cpp index 58132e20a..e63324c6d 100644 --- a/src/unittest/test_ban.cpp +++ b/src/unittest/test_ban.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2018 nerzhul, Loic BLOT - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2018 nerzhul, Loic BLOT #include "test.h" diff --git a/src/unittest/test_clientactiveobjectmgr.cpp b/src/unittest/test_clientactiveobjectmgr.cpp index 28fc1c1a4..a36a2d12a 100644 --- a/src/unittest/test_clientactiveobjectmgr.cpp +++ b/src/unittest/test_clientactiveobjectmgr.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2018 nerzhul, Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2018 nerzhul, Loic Blot #include "test.h" diff --git a/src/unittest/test_collision.cpp b/src/unittest/test_collision.cpp index 2f39c2489..ce2e3933c 100644 --- a/src/unittest/test_collision.cpp +++ b/src/unittest/test_collision.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "test.h" diff --git a/src/unittest/test_compression.cpp b/src/unittest/test_compression.cpp index 3ada3fa00..ad8dba2fc 100644 --- a/src/unittest/test_compression.cpp +++ b/src/unittest/test_compression.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "test.h" diff --git a/src/unittest/test_connection.cpp b/src/unittest/test_connection.cpp index b7d751dc3..654d6f463 100644 --- a/src/unittest/test_connection.cpp +++ b/src/unittest/test_connection.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "test.h" diff --git a/src/unittest/test_content_mapblock.cpp b/src/unittest/test_content_mapblock.cpp index 798206a5f..acc6213a4 100644 --- a/src/unittest/test_content_mapblock.cpp +++ b/src/unittest/test_content_mapblock.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2023 Vitaliy Lobachevskiy - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2023 Vitaliy Lobachevskiy #include "test.h" diff --git a/src/unittest/test_craft.cpp b/src/unittest/test_craft.cpp index 5b546f709..16043cd77 100644 --- a/src/unittest/test_craft.cpp +++ b/src/unittest/test_craft.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2023 DS - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2023 DS #include "test.h" diff --git a/src/unittest/test_datastructures.cpp b/src/unittest/test_datastructures.cpp index 0bf892353..89c910b46 100644 --- a/src/unittest/test_datastructures.cpp +++ b/src/unittest/test_datastructures.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2024 sfan5 - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2024 sfan5 #include "test.h" diff --git a/src/unittest/test_eventmanager.cpp b/src/unittest/test_eventmanager.cpp index fec57f9fe..0b1d3bbd1 100644 --- a/src/unittest/test_eventmanager.cpp +++ b/src/unittest/test_eventmanager.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2018 nerzhul, Loic BLOT - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2018 nerzhul, Loic BLOT #include #include "test.h" diff --git a/src/unittest/test_filesys.cpp b/src/unittest/test_filesys.cpp index e24e79374..9bab4fb5d 100644 --- a/src/unittest/test_filesys.cpp +++ b/src/unittest/test_filesys.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "test.h" diff --git a/src/unittest/test_gameui.cpp b/src/unittest/test_gameui.cpp index 7170031ba..cd9357773 100644 --- a/src/unittest/test_gameui.cpp +++ b/src/unittest/test_gameui.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2018 nerzhul, Loic BLOT - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2018 nerzhul, Loic BLOT #include "test.h" diff --git a/src/unittest/test_inventory.cpp b/src/unittest/test_inventory.cpp index 5f71636c4..8eb222e7d 100644 --- a/src/unittest/test_inventory.cpp +++ b/src/unittest/test_inventory.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "test.h" diff --git a/src/unittest/test_irrptr.cpp b/src/unittest/test_irrptr.cpp index 61d1e302c..9cdbef84f 100644 --- a/src/unittest/test_irrptr.cpp +++ b/src/unittest/test_irrptr.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2018 numzero, Lobachevskiy Vitaliy - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2018 numzero, Lobachevskiy Vitaliy #include "test.h" diff --git a/src/unittest/test_keycode.cpp b/src/unittest/test_keycode.cpp index 3398626fa..125098341 100644 --- a/src/unittest/test_keycode.cpp +++ b/src/unittest/test_keycode.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2016 sfan5 - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2016 sfan5 #include "test.h" diff --git a/src/unittest/test_lua.cpp b/src/unittest/test_lua.cpp index 724da1080..e32b66ee1 100644 --- a/src/unittest/test_lua.cpp +++ b/src/unittest/test_lua.cpp @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola -Copyright (C) 2021 TurkeyMcMac, Jude Melton-Houghton - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola +// Copyright (C) 2021 TurkeyMcMac, Jude Melton-Houghton #include "test.h" #include "config.h" diff --git a/src/unittest/test_map_settings_manager.cpp b/src/unittest/test_map_settings_manager.cpp index acada024b..234b40cda 100644 --- a/src/unittest/test_map_settings_manager.cpp +++ b/src/unittest/test_map_settings_manager.cpp @@ -1,21 +1,6 @@ - /* -Minetest -Copyright (C) 2010-2014 kwolekr, Ryan Kwolek - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2014 kwolekr, Ryan Kwolek #include "test.h" diff --git a/src/unittest/test_mapnode.cpp b/src/unittest/test_mapnode.cpp index 9a5c69bed..b4b79fb3b 100644 --- a/src/unittest/test_mapnode.cpp +++ b/src/unittest/test_mapnode.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "test.h" diff --git a/src/unittest/test_mesh_compare.cpp b/src/unittest/test_mesh_compare.cpp index 63ce04231..5e5c25e07 100644 --- a/src/unittest/test_mesh_compare.cpp +++ b/src/unittest/test_mesh_compare.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2023 Vitaliy Lobachevskiy - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2023 Vitaliy Lobachevskiy #include "test.h" diff --git a/src/unittest/test_modchannels.cpp b/src/unittest/test_modchannels.cpp index 069f439a1..424da69e0 100644 --- a/src/unittest/test_modchannels.cpp +++ b/src/unittest/test_modchannels.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "test.h" diff --git a/src/unittest/test_modstoragedatabase.cpp b/src/unittest/test_modstoragedatabase.cpp index 7d2e6e4e0..1f9e09a32 100644 --- a/src/unittest/test_modstoragedatabase.cpp +++ b/src/unittest/test_modstoragedatabase.cpp @@ -1,22 +1,7 @@ -/* -Minetest -Copyright (C) 2018 bendeutsch, Ben Deutsch -Copyright (C) 2021 TurkeyMcMac, Jude Melton-Houghton - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2018 bendeutsch, Ben Deutsch +// Copyright (C) 2021 TurkeyMcMac, Jude Melton-Houghton // This file is an edited copy of test_authdatabase.cpp diff --git a/src/unittest/test_moveaction.cpp b/src/unittest/test_moveaction.cpp index b3e49341e..302e58964 100644 --- a/src/unittest/test_moveaction.cpp +++ b/src/unittest/test_moveaction.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2022 Minetest core developers & community - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2022 Minetest core developers & community #include "test.h" diff --git a/src/unittest/test_nodedef.cpp b/src/unittest/test_nodedef.cpp index 85dadd17d..5841bf003 100644 --- a/src/unittest/test_nodedef.cpp +++ b/src/unittest/test_nodedef.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "gamedef.h" #include "nodedef.h" diff --git a/src/unittest/test_noderesolver.cpp b/src/unittest/test_noderesolver.cpp index ed66093a9..8287a25eb 100644 --- a/src/unittest/test_noderesolver.cpp +++ b/src/unittest/test_noderesolver.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2014 kwolekr, Ryan Kwolek - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2014 kwolekr, Ryan Kwolek #include "test.h" diff --git a/src/unittest/test_noise.cpp b/src/unittest/test_noise.cpp index 12b155f46..fec4da0d3 100644 --- a/src/unittest/test_noise.cpp +++ b/src/unittest/test_noise.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2014 kwolekr, Ryan Kwolek - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2014 kwolekr, Ryan Kwolek #include "test.h" diff --git a/src/unittest/test_objdef.cpp b/src/unittest/test_objdef.cpp index 40f7faa9d..ac2971b00 100644 --- a/src/unittest/test_objdef.cpp +++ b/src/unittest/test_objdef.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2014 kwolekr, Ryan Kwolek - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2014 kwolekr, Ryan Kwolek #include "test.h" diff --git a/src/unittest/test_profiler.cpp b/src/unittest/test_profiler.cpp index 92d336a72..22bb5e28f 100644 --- a/src/unittest/test_profiler.cpp +++ b/src/unittest/test_profiler.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "test.h" diff --git a/src/unittest/test_random.cpp b/src/unittest/test_random.cpp index 5fa7a5932..da5c2cf90 100644 --- a/src/unittest/test_random.cpp +++ b/src/unittest/test_random.cpp @@ -1,21 +1,6 @@ - /* -Minetest -Copyright (C) 2010-2014 kwolekr, Ryan Kwolek - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2014 kwolekr, Ryan Kwolek #include "test.h" diff --git a/src/unittest/test_sao.cpp b/src/unittest/test_sao.cpp index abacd15eb..e424fb7a4 100644 --- a/src/unittest/test_sao.cpp +++ b/src/unittest/test_sao.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2024 sfan5 - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2024 sfan5 #include "test.h" diff --git a/src/unittest/test_schematic.cpp b/src/unittest/test_schematic.cpp index d2f027eb4..9bd3e6e9a 100644 --- a/src/unittest/test_schematic.cpp +++ b/src/unittest/test_schematic.cpp @@ -1,21 +1,6 @@ - /* -Minetest -Copyright (C) 2010-2014 kwolekr, Ryan Kwolek - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2014 kwolekr, Ryan Kwolek #include "test.h" diff --git a/src/unittest/test_serialization.cpp b/src/unittest/test_serialization.cpp index 037162611..839a09060 100644 --- a/src/unittest/test_serialization.cpp +++ b/src/unittest/test_serialization.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "test.h" diff --git a/src/unittest/test_server_shutdown_state.cpp b/src/unittest/test_server_shutdown_state.cpp index b52fbcb82..dc7040664 100644 --- a/src/unittest/test_server_shutdown_state.cpp +++ b/src/unittest/test_server_shutdown_state.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2018 nerzhul, Loic BLOT - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2018 nerzhul, Loic BLOT #include "test.h" diff --git a/src/unittest/test_serveractiveobjectmgr.cpp b/src/unittest/test_serveractiveobjectmgr.cpp index cbfd1b859..0d370b5c5 100644 --- a/src/unittest/test_serveractiveobjectmgr.cpp +++ b/src/unittest/test_serveractiveobjectmgr.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2018 nerzhul, Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2018 nerzhul, Loic Blot #include "test.h" #include "mock_serveractiveobject.h" diff --git a/src/unittest/test_servermodmanager.cpp b/src/unittest/test_servermodmanager.cpp index 033cbbc49..500d0f288 100644 --- a/src/unittest/test_servermodmanager.cpp +++ b/src/unittest/test_servermodmanager.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2018 nerzhul, Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2018 nerzhul, Loic Blot #include "test.h" #include diff --git a/src/unittest/test_settings.cpp b/src/unittest/test_settings.cpp index dbb60abdc..94b222c1f 100644 --- a/src/unittest/test_settings.cpp +++ b/src/unittest/test_settings.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "test.h" diff --git a/src/unittest/test_socket.cpp b/src/unittest/test_socket.cpp index 620021b59..2d5eb1d5b 100644 --- a/src/unittest/test_socket.cpp +++ b/src/unittest/test_socket.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "test.h" diff --git a/src/unittest/test_threading.cpp b/src/unittest/test_threading.cpp index a91e1b532..0eb9bb7df 100644 --- a/src/unittest/test_threading.cpp +++ b/src/unittest/test_threading.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "test.h" diff --git a/src/unittest/test_utilities.cpp b/src/unittest/test_utilities.cpp index a05421c9b..b7d4965f9 100644 --- a/src/unittest/test_utilities.cpp +++ b/src/unittest/test_utilities.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "test.h" diff --git a/src/unittest/test_voxelalgorithms.cpp b/src/unittest/test_voxelalgorithms.cpp index 366755da5..2a98412b4 100644 --- a/src/unittest/test_voxelalgorithms.cpp +++ b/src/unittest/test_voxelalgorithms.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "test.h" diff --git a/src/unittest/test_voxelarea.cpp b/src/unittest/test_voxelarea.cpp index 1139e72fa..384fda0d1 100644 --- a/src/unittest/test_voxelarea.cpp +++ b/src/unittest/test_voxelarea.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2018 nerzhul, Loic Blot - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2018 nerzhul, Loic Blot #include "test.h" #include "voxel.h" diff --git a/src/unittest/test_voxelmanipulator.cpp b/src/unittest/test_voxelmanipulator.cpp index 6ea0ca9af..abfb5a5ec 100644 --- a/src/unittest/test_voxelmanipulator.cpp +++ b/src/unittest/test_voxelmanipulator.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "test.h" diff --git a/src/util/areastore.cpp b/src/util/areastore.cpp index 053460d68..8d5dfa7d4 100644 --- a/src/util/areastore.cpp +++ b/src/util/areastore.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2015 est31 - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2015 est31 #include "util/areastore.h" #include "util/serialize.h" diff --git a/src/util/areastore.h b/src/util/areastore.h index 150a043db..7f6c24815 100644 --- a/src/util/areastore.h +++ b/src/util/areastore.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2015 est31 - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2015 est31 #pragma once diff --git a/src/util/auth.cpp b/src/util/auth.cpp index d7d1da280..3c8e5763a 100644 --- a/src/util/auth.cpp +++ b/src/util/auth.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2015, 2016 est31 - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2015, 2016 est31 #include #include diff --git a/src/util/auth.h b/src/util/auth.h index ba827f322..2e6976c65 100644 --- a/src/util/auth.h +++ b/src/util/auth.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2015, 2016 est31 - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2015, 2016 est31 #pragma once diff --git a/src/util/basic_macros.h b/src/util/basic_macros.h index f0fd4eb48..961d6fa31 100644 --- a/src/util/basic_macros.h +++ b/src/util/basic_macros.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/util/container.h b/src/util/container.h index 6e45ef208..2ab573c19 100644 --- a/src/util/container.h +++ b/src/util/container.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/util/directiontables.cpp b/src/util/directiontables.cpp index 69dfc8a8a..3fd562a46 100644 --- a/src/util/directiontables.cpp +++ b/src/util/directiontables.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #include "directiontables.h" diff --git a/src/util/directiontables.h b/src/util/directiontables.h index 5672fe628..2d338fab8 100644 --- a/src/util/directiontables.h +++ b/src/util/directiontables.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/util/hex.h b/src/util/hex.h index 30e02994f..0d3ea6d0c 100644 --- a/src/util/hex.h +++ b/src/util/hex.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 Jonathan Neuschäfer - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 Jonathan Neuschäfer #pragma once diff --git a/src/util/ieee_float.h b/src/util/ieee_float.h index 42b8641d0..f3f6de442 100644 --- a/src/util/ieee_float.h +++ b/src/util/ieee_float.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2018 SmallJoker - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2018 SmallJoker #pragma once diff --git a/src/util/metricsbackend.cpp b/src/util/metricsbackend.cpp index 63b49ac0a..1bd485cde 100644 --- a/src/util/metricsbackend.cpp +++ b/src/util/metricsbackend.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013-2020 Minetest core developers team - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013-2020 Minetest core developers team #include "metricsbackend.h" #include "util/thread.h" diff --git a/src/util/metricsbackend.h b/src/util/metricsbackend.h index 644c73325..0f6908628 100644 --- a/src/util/metricsbackend.h +++ b/src/util/metricsbackend.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013-2020 Minetest core developers team - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013-2020 Minetest core developers team #pragma once #include diff --git a/src/util/numeric.cpp b/src/util/numeric.cpp index b500c4d1e..2ed351fbf 100644 --- a/src/util/numeric.cpp +++ b/src/util/numeric.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #include "numeric.h" diff --git a/src/util/numeric.h b/src/util/numeric.h index 758b55968..6062f0717 100644 --- a/src/util/numeric.h +++ b/src/util/numeric.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/util/png.cpp b/src/util/png.cpp index b4bc6b72f..442958e65 100644 --- a/src/util/png.cpp +++ b/src/util/png.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2021 hecks - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2021 hecks #include "png.h" #include diff --git a/src/util/png.h b/src/util/png.h index 92387aef0..7a7127bbd 100644 --- a/src/util/png.h +++ b/src/util/png.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2021 hecks - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2021 hecks #pragma once diff --git a/src/util/pointabilities.cpp b/src/util/pointabilities.cpp index 575ae269b..716a19b28 100644 --- a/src/util/pointabilities.cpp +++ b/src/util/pointabilities.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2023 cx384 - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2023 cx384 #include "pointabilities.h" diff --git a/src/util/pointabilities.h b/src/util/pointabilities.h index 1ad57143b..057767e66 100644 --- a/src/util/pointabilities.h +++ b/src/util/pointabilities.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2023 cx384 - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2023 cx384 #pragma once #include diff --git a/src/util/pointedthing.cpp b/src/util/pointedthing.cpp index 467e466d5..7b554a247 100644 --- a/src/util/pointedthing.cpp +++ b/src/util/pointedthing.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #include "pointedthing.h" diff --git a/src/util/pointedthing.h b/src/util/pointedthing.h index 5c8bc7ca1..4b7e98a0c 100644 --- a/src/util/pointedthing.h +++ b/src/util/pointedthing.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/util/pointer.h b/src/util/pointer.h index b7fad4fe1..306ef55f9 100644 --- a/src/util/pointer.h +++ b/src/util/pointer.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/util/quicktune.cpp b/src/util/quicktune.cpp index 1acd94fa6..a1a3e4465 100644 --- a/src/util/quicktune.cpp +++ b/src/util/quicktune.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "quicktune.h" #include "threading/mutex_auto_lock.h" diff --git a/src/util/quicktune.h b/src/util/quicktune.h index 14e7f5d7f..caed0f6a2 100644 --- a/src/util/quicktune.h +++ b/src/util/quicktune.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola /* Used for tuning constants when developing. diff --git a/src/util/quicktune_shortcutter.h b/src/util/quicktune_shortcutter.h index 4cab05ff6..bafabee8b 100644 --- a/src/util/quicktune_shortcutter.h +++ b/src/util/quicktune_shortcutter.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/util/serialize.cpp b/src/util/serialize.cpp index e1552f602..3ca415ddb 100644 --- a/src/util/serialize.cpp +++ b/src/util/serialize.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #include "serialize.h" #include "porting.h" diff --git a/src/util/serialize.h b/src/util/serialize.h index 0a8a559fa..8247eeb3e 100644 --- a/src/util/serialize.h +++ b/src/util/serialize.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/util/stream.h b/src/util/stream.h index dbbe22592..a0c594048 100644 --- a/src/util/stream.h +++ b/src/util/stream.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2022 Minetest Authors - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2022 Minetest Authors #pragma once diff --git a/src/util/strfnd.h b/src/util/strfnd.h index 296e37a82..396abc0b4 100644 --- a/src/util/strfnd.h +++ b/src/util/strfnd.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/util/string.cpp b/src/util/string.cpp index 32355b6e7..43e936788 100644 --- a/src/util/string.cpp +++ b/src/util/string.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #include "string.h" #include "serialize.h" // BYTE_ORDER diff --git a/src/util/string.h b/src/util/string.h index 06fcf975b..1874ccd2a 100644 --- a/src/util/string.h +++ b/src/util/string.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/util/thread.h b/src/util/thread.h index 73e9beb80..1bc91e726 100644 --- a/src/util/thread.h +++ b/src/util/thread.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/util/timetaker.cpp b/src/util/timetaker.cpp index 47d8ab83a..e205ee141 100644 --- a/src/util/timetaker.cpp +++ b/src/util/timetaker.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #include "timetaker.h" diff --git a/src/util/timetaker.h b/src/util/timetaker.h index 203b419d3..1ec985559 100644 --- a/src/util/timetaker.h +++ b/src/util/timetaker.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once diff --git a/src/util/tracy_wrapper.h b/src/util/tracy_wrapper.h index 0c61ba837..cc6bf20c3 100644 --- a/src/util/tracy_wrapper.h +++ b/src/util/tracy_wrapper.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2024 DS - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2024 DS /* * Wrapper for , so that we can use Tracy's macros without diff --git a/src/version.cpp b/src/version.cpp index 8af1bb6d7..c9cf8c108 100644 --- a/src/version.cpp +++ b/src/version.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "version.h" #include "config.h" diff --git a/src/version.h b/src/version.h index 30bb81fdf..a01f9fb88 100644 --- a/src/version.h +++ b/src/version.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/voxel.cpp b/src/voxel.cpp index 9fb310962..b0a63b4f0 100644 --- a/src/voxel.cpp +++ b/src/voxel.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #include "voxel.h" #include "map.h" diff --git a/src/voxel.h b/src/voxel.h index 89e16f274..a2b725385 100644 --- a/src/voxel.h +++ b/src/voxel.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2013 celeron55, Perttu Ahola #pragma once diff --git a/src/voxelalgorithms.cpp b/src/voxelalgorithms.cpp index 6d159fcf2..cd2664938 100644 --- a/src/voxelalgorithms.cpp +++ b/src/voxelalgorithms.cpp @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #include diff --git a/src/voxelalgorithms.h b/src/voxelalgorithms.h index 1fe070152..f938053c2 100644 --- a/src/voxelalgorithms.h +++ b/src/voxelalgorithms.h @@ -1,21 +1,6 @@ -/* -Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ +// Luanti +// SPDX-License-Identifier: LGPL-2.1-or-later +// Copyright (C) 2010-2013 celeron55, Perttu Ahola #pragma once From 88c7a54e08da5b343eb4bdb170c6adaa96b2c94d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lars=20M=C3=BCller?= <34514239+appgurueu@users.noreply.github.com> Date: Mon, 28 Oct 2024 15:57:54 +0100 Subject: [PATCH 049/178] Rename `minetest.*` to `core.*` in devtest --- games/devtest/mods/basenodes/init.lua | 60 +++--- games/devtest/mods/basetools/init.lua | 78 ++++---- games/devtest/mods/benchmarks/init.lua | 88 ++++----- games/devtest/mods/broken/init.lua | 8 +- games/devtest/mods/bucket/init.lua | 8 +- games/devtest/mods/callbacks/entities.lua | 12 +- games/devtest/mods/callbacks/init.lua | 8 +- games/devtest/mods/callbacks/items.lua | 18 +- games/devtest/mods/callbacks/nodes.lua | 26 +-- games/devtest/mods/callbacks/players.lua | 4 +- games/devtest/mods/chest/chest.lua | 10 +- games/devtest/mods/chest/detached.lua | 10 +- games/devtest/mods/chest/init.lua | 4 +- .../devtest/mods/chest_of_everything/init.lua | 46 ++--- games/devtest/mods/dignodes/init.lua | 4 +- .../devtest/mods/give_initial_stuff/init.lua | 10 +- games/devtest/mods/gltf/init.lua | 16 +- games/devtest/mods/initial_message/init.lua | 6 +- games/devtest/mods/lighting/init.lua | 10 +- games/devtest/mods/log/init.lua | 16 +- games/devtest/mods/mapgen/init.lua | 72 +++---- games/devtest/mods/modchannels/init.lua | 6 +- games/devtest/mods/soundstuff/bigfoot.lua | 8 +- games/devtest/mods/soundstuff/init.lua | 2 +- games/devtest/mods/soundstuff/jukebox.lua | 40 ++-- games/devtest/mods/soundstuff/racecar.lua | 2 +- .../mods/soundstuff/sound_event_items.lua | 36 ++-- games/devtest/mods/stairs/init.lua | 4 +- games/devtest/mods/testabms/after_node.lua | 4 +- games/devtest/mods/testabms/chances.lua | 22 +-- games/devtest/mods/testabms/init.lua | 2 +- games/devtest/mods/testabms/intervals.lua | 22 +-- games/devtest/mods/testabms/min_max.lua | 22 +-- games/devtest/mods/testabms/neighbors.lua | 32 ++-- games/devtest/mods/testentities/armor.lua | 6 +- games/devtest/mods/testentities/init.lua | 10 +- games/devtest/mods/testentities/observers.lua | 4 +- games/devtest/mods/testentities/pointable.lua | 2 +- .../mods/testentities/selectionbox.lua | 12 +- games/devtest/mods/testentities/visuals.lua | 26 +-- games/devtest/mods/testfood/init.lua | 22 +-- games/devtest/mods/testformspec/callbacks.lua | 18 +- .../devtest/mods/testformspec/dummy_items.lua | 4 +- games/devtest/mods/testformspec/formspec.lua | 26 +-- games/devtest/mods/testformspec/init.lua | 6 +- games/devtest/mods/testfullscreenfs/init.lua | 16 +- games/devtest/mods/testfullscreenfs/mod.conf | 2 +- games/devtest/mods/testhud/init.lua | 48 ++--- games/devtest/mods/testitems/init.lua | 16 +- games/devtest/mods/testnodes/commands.lua | 22 +-- games/devtest/mods/testnodes/drawtypes.lua | 94 ++++----- games/devtest/mods/testnodes/init.lua | 2 +- games/devtest/mods/testnodes/light.lua | 10 +- games/devtest/mods/testnodes/liquids.lua | 12 +- games/devtest/mods/testnodes/meshes.lua | 26 +-- games/devtest/mods/testnodes/nodeboxes.lua | 26 +-- games/devtest/mods/testnodes/overlays.lua | 18 +- games/devtest/mods/testnodes/param2.lua | 34 ++-- .../mods/testnodes/performance_test_nodes.lua | 10 +- games/devtest/mods/testnodes/properties.lua | 72 +++---- games/devtest/mods/testnodes/textures.lua | 50 ++--- games/devtest/mods/testpathfinder/init.lua | 38 ++-- games/devtest/mods/testtools/init.lua | 180 +++++++++--------- games/devtest/mods/testtools/light.lua | 16 +- .../mods/testtools/node_box_visualizer.lua | 16 +- games/devtest/mods/testtools/particles.lua | 6 +- games/devtest/mods/testtools/privatizer.lua | 16 +- games/devtest/mods/testtranslations/init.lua | 4 +- games/devtest/mods/tiled/init.lua | 6 +- games/devtest/mods/unittests/crafting.lua | 70 +++---- .../mods/unittests/crafting_prepare.lua | 28 +-- games/devtest/mods/unittests/init.lua | 6 +- games/devtest/mods/unittests/inventory.lua | 6 +- .../mods/unittests/itemdescription.lua | 10 +- games/devtest/mods/unittests/load_time.lua | 16 +- games/devtest/mods/unittests/metadata.lua | 2 +- games/devtest/mods/unittests/misc.lua | 34 ++-- games/devtest/mods/util_commands/init.lua | 64 +++---- 78 files changed, 914 insertions(+), 914 deletions(-) diff --git a/games/devtest/mods/basenodes/init.lua b/games/devtest/mods/basenodes/init.lua index 249c7fbd8..a6cc680b4 100644 --- a/games/devtest/mods/basenodes/init.lua +++ b/games/devtest/mods/basenodes/init.lua @@ -8,19 +8,19 @@ local LAVA_VISC = 7 -- Register nodes -minetest.register_node("basenodes:stone", { +core.register_node("basenodes:stone", { description = "Stone", tiles = {"default_stone.png"}, groups = {cracky=3}, }) -minetest.register_node("basenodes:desert_stone", { +core.register_node("basenodes:desert_stone", { description = "Desert Stone", tiles = {"default_desert_stone.png"}, groups = {cracky=3}, }) -minetest.register_node("basenodes:dirt_with_grass", { +core.register_node("basenodes:dirt_with_grass", { description = "Dirt with Grass", tiles ={"default_grass.png", -- a little dot on the bottom to distinguish it from dirt @@ -30,7 +30,7 @@ minetest.register_node("basenodes:dirt_with_grass", { groups = {crumbly=3, soil=1}, }) -minetest.register_node("basenodes:dirt_with_snow", { +core.register_node("basenodes:dirt_with_snow", { description = "Dirt with Snow", tiles ={"basenodes_dirt_with_snow.png", -- a little dot on the bottom to distinguish it from dirt @@ -40,31 +40,31 @@ minetest.register_node("basenodes:dirt_with_snow", { groups = {crumbly=3, soil=1}, }) -minetest.register_node("basenodes:dirt", { +core.register_node("basenodes:dirt", { description = "Dirt", tiles ={"default_dirt.png"}, groups = {crumbly=3, soil=1}, }) -minetest.register_node("basenodes:sand", { +core.register_node("basenodes:sand", { description = "Sand", tiles ={"default_sand.png"}, groups = {crumbly=3}, }) -minetest.register_node("basenodes:desert_sand", { +core.register_node("basenodes:desert_sand", { description = "Desert Sand", tiles ={"default_desert_sand.png"}, groups = {crumbly=3}, }) -minetest.register_node("basenodes:gravel", { +core.register_node("basenodes:gravel", { description = "Gravel", tiles ={"default_gravel.png"}, groups = {crumbly=2}, }) -minetest.register_node("basenodes:junglegrass", { +core.register_node("basenodes:junglegrass", { description = "Jungle Grass", drawtype = "plantlike", tiles ={"default_junglegrass.png"}, @@ -75,14 +75,14 @@ minetest.register_node("basenodes:junglegrass", { groups = {snappy=3}, }) -minetest.register_node("basenodes:tree", { +core.register_node("basenodes:tree", { description = "Normal Tree Trunk", tiles = {"default_tree_top.png", "default_tree_top.png", "default_tree.png"}, is_ground_content = false, groups = {choppy=2,oddly_breakable_by_hand=1}, }) -minetest.register_node("basenodes:leaves", { +core.register_node("basenodes:leaves", { description = "Normal Leaves", drawtype = "allfaces_optional", tiles = {"default_leaves.png"}, @@ -91,14 +91,14 @@ minetest.register_node("basenodes:leaves", { groups = {snappy=3}, }) -minetest.register_node("basenodes:jungletree", { +core.register_node("basenodes:jungletree", { description = "Jungle Tree Trunk", tiles = {"default_jungletree_top.png", "default_jungletree_top.png", "default_jungletree.png"}, is_ground_content = false, groups = {choppy=2,oddly_breakable_by_hand=1}, }) -minetest.register_node("basenodes:jungleleaves", { +core.register_node("basenodes:jungleleaves", { description = "Jungle Leaves", drawtype = "allfaces_optional", tiles = {"default_jungleleaves.png"}, @@ -107,14 +107,14 @@ minetest.register_node("basenodes:jungleleaves", { groups = {snappy=3}, }) -minetest.register_node("basenodes:pine_tree", { +core.register_node("basenodes:pine_tree", { description = "Pine Tree Trunk", tiles = {"default_pine_tree_top.png", "default_pine_tree_top.png", "default_pine_tree.png"}, is_ground_content = false, groups = {choppy=2,oddly_breakable_by_hand=1}, }) -minetest.register_node("basenodes:pine_needles", { +core.register_node("basenodes:pine_needles", { description = "Pine Needles", drawtype = "allfaces_optional", tiles = {"default_pine_needles.png"}, @@ -123,7 +123,7 @@ minetest.register_node("basenodes:pine_needles", { groups = {snappy=3}, }) -minetest.register_node("basenodes:water_source", { +core.register_node("basenodes:water_source", { description = "Water Source".."\n".. "Swimmable, spreading, renewable liquid".."\n".. "Drowning damage: 1", @@ -151,7 +151,7 @@ minetest.register_node("basenodes:water_source", { groups = {water = 3, liquid = 3}, }) -minetest.register_node("basenodes:water_flowing", { +core.register_node("basenodes:water_flowing", { description = "Flowing Water".."\n".. "Swimmable, spreading, renewable liquid".."\n".. "Drowning damage: 1", @@ -182,7 +182,7 @@ minetest.register_node("basenodes:water_flowing", { groups = {water = 3, liquid = 3}, }) -minetest.register_node("basenodes:river_water_source", { +core.register_node("basenodes:river_water_source", { description = "River Water Source".."\n".. "Swimmable, spreading, non-renewable liquid".."\n".. "Drowning damage: 1", @@ -212,7 +212,7 @@ minetest.register_node("basenodes:river_water_source", { groups = {water = 3, liquid = 3, }, }) -minetest.register_node("basenodes:river_water_flowing", { +core.register_node("basenodes:river_water_flowing", { description = "Flowing River Water".."\n".. "Swimmable, spreading, non-renewable liquid".."\n".. "Drowning damage: 1", @@ -245,7 +245,7 @@ minetest.register_node("basenodes:river_water_flowing", { groups = {water = 3, liquid = 3, }, }) -minetest.register_node("basenodes:lava_flowing", { +core.register_node("basenodes:lava_flowing", { description = "Flowing Lava".."\n".. "Swimmable, spreading, renewable liquid".."\n".. "4 damage per second".."\n".. @@ -257,7 +257,7 @@ minetest.register_node("basenodes:lava_flowing", { {name="default_lava_flowing.png", backface_culling = false}, }, paramtype = "light", - light_source = minetest.LIGHT_MAX, + light_source = core.LIGHT_MAX, walkable = false, pointable = false, diggable = false, @@ -273,7 +273,7 @@ minetest.register_node("basenodes:lava_flowing", { groups = {lava=3, liquid=1}, }) -minetest.register_node("basenodes:lava_source", { +core.register_node("basenodes:lava_source", { description = "Lava Source".."\n".. "Swimmable, spreading, renewable liquid".."\n".. "4 damage per second".."\n".. @@ -285,7 +285,7 @@ minetest.register_node("basenodes:lava_source", { {name = "default_lava.png", backface_culling = true}, }, paramtype = "light", - light_source = minetest.LIGHT_MAX, + light_source = core.LIGHT_MAX, walkable = false, pointable = false, diggable = false, @@ -301,21 +301,21 @@ minetest.register_node("basenodes:lava_source", { groups = {lava=3, liquid=1}, }) -minetest.register_node("basenodes:cobble", { +core.register_node("basenodes:cobble", { description = "Cobblestone", tiles ={"default_cobble.png"}, is_ground_content = false, groups = {cracky=3}, }) -minetest.register_node("basenodes:mossycobble", { +core.register_node("basenodes:mossycobble", { description = "Mossy Cobblestone", tiles ={"default_mossycobble.png"}, is_ground_content = false, groups = {cracky=3}, }) -minetest.register_node("basenodes:apple", { +core.register_node("basenodes:apple", { description = "Apple".."\n".. "Punch: Eat (+2)", drawtype = "plantlike", @@ -328,10 +328,10 @@ minetest.register_node("basenodes:apple", { groups = {dig_immediate=3}, -- Make eatable because why not? - on_use = minetest.item_eat(2), + on_use = core.item_eat(2), }) -minetest.register_node("basenodes:ice", { +core.register_node("basenodes:ice", { description = "Ice", tiles ={"default_ice.png"}, groups = {cracky=3}, @@ -339,7 +339,7 @@ minetest.register_node("basenodes:ice", { -- The snow nodes intentionally have different tints to make them more -- distinguishable -minetest.register_node("basenodes:snow", { +core.register_node("basenodes:snow", { description = "Snow Sheet", tiles = {"basenodes_snow_sheet.png"}, groups = {crumbly=3}, @@ -352,7 +352,7 @@ minetest.register_node("basenodes:snow", { }, }) -minetest.register_node("basenodes:snowblock", { +core.register_node("basenodes:snowblock", { description = "Snow Block", tiles ={"default_snow.png"}, groups = {crumbly=3}, diff --git a/games/devtest/mods/basetools/init.lua b/games/devtest/mods/basetools/init.lua index 17e53c1fe..92b58881b 100644 --- a/games/devtest/mods/basetools/init.lua +++ b/games/devtest/mods/basetools/init.lua @@ -24,11 +24,11 @@ Tool materials: ]] -- The hand -if minetest.settings:get_bool("creative_mode") then +if core.settings:get_bool("creative_mode") then local digtime = 42 local caps = {times = {digtime, digtime, digtime}, uses = 0, maxlevel = 256} - minetest.register_item(":", { + core.register_item(":", { type = "none", wield_image = "wieldhand.png", wield_scale = {x = 1, y = 1, z = 2.5}, @@ -50,7 +50,7 @@ if minetest.settings:get_bool("creative_mode") then } }) else - minetest.register_item(":", { + core.register_item(":", { type = "none", wield_image = "wieldhand.png", wield_scale = {x = 1, y = 1, z = 2.5}, @@ -69,7 +69,7 @@ else end -- Mese Pickaxe: special tool that digs "everything" instantly -minetest.register_tool("basetools:pick_mese", { +core.register_tool("basetools:pick_mese", { description = "Mese Pickaxe".."\n".. "Digs diggable nodes instantly.", inventory_image = "basetools_mesepick.png", @@ -89,7 +89,7 @@ minetest.register_tool("basetools:pick_mese", { -- A variant of the mese pickaxe that is not affected by the 0.15s digging delay -minetest.register_tool("basetools:pick_mese_no_delay", { +core.register_tool("basetools:pick_mese_no_delay", { description = "Mese Pickaxe (no delay)".."\n".. "Digs diggable nodes instantly.".."\n".. "There is no delay between digging each node,\n".. @@ -114,7 +114,7 @@ minetest.register_tool("basetools:pick_mese_no_delay", { -- Pickaxes: Dig cracky -- -minetest.register_tool("basetools:pick_wood", { +core.register_tool("basetools:pick_wood", { description = "Wooden Pickaxe".."\n".. "Digs cracky=3", inventory_image = "basetools_woodpick.png", @@ -125,7 +125,7 @@ minetest.register_tool("basetools:pick_wood", { }, }, }) -minetest.register_tool("basetools:pick_stone", { +core.register_tool("basetools:pick_stone", { description = "Stone Pickaxe".."\n".. "Digs cracky=2..3", inventory_image = "basetools_stonepick.png", @@ -136,7 +136,7 @@ minetest.register_tool("basetools:pick_stone", { }, }, }) -minetest.register_tool("basetools:pick_steel", { +core.register_tool("basetools:pick_steel", { description = "Steel Pickaxe".."\n".. "Digs cracky=1..3", inventory_image = "basetools_steelpick.png", @@ -147,7 +147,7 @@ minetest.register_tool("basetools:pick_steel", { }, }, }) -minetest.register_tool("basetools:pick_steel_l1", { +core.register_tool("basetools:pick_steel_l1", { description = "Steel Pickaxe Level 1".."\n".. "Digs cracky=1..3".."\n".. "maxlevel=1", @@ -159,7 +159,7 @@ minetest.register_tool("basetools:pick_steel_l1", { }, }, }) -minetest.register_tool("basetools:pick_steel_l2", { +core.register_tool("basetools:pick_steel_l2", { description = "Steel Pickaxe Level 2".."\n".. "Digs cracky=1..3".."\n".. "maxlevel=2", @@ -176,7 +176,7 @@ minetest.register_tool("basetools:pick_steel_l2", { -- Shovels (dig crumbly) -- -minetest.register_tool("basetools:shovel_wood", { +core.register_tool("basetools:shovel_wood", { description = "Wooden Shovel".."\n".. "Digs crumbly=3", inventory_image = "basetools_woodshovel.png", @@ -187,7 +187,7 @@ minetest.register_tool("basetools:shovel_wood", { }, }, }) -minetest.register_tool("basetools:shovel_stone", { +core.register_tool("basetools:shovel_stone", { description = "Stone Shovel".."\n".. "Digs crumbly=2..3", inventory_image = "basetools_stoneshovel.png", @@ -198,7 +198,7 @@ minetest.register_tool("basetools:shovel_stone", { }, }, }) -minetest.register_tool("basetools:shovel_steel", { +core.register_tool("basetools:shovel_steel", { description = "Steel Shovel".."\n".. "Digs crumbly=1..3", inventory_image = "basetools_steelshovel.png", @@ -214,7 +214,7 @@ minetest.register_tool("basetools:shovel_steel", { -- Axes (dig choppy) -- -minetest.register_tool("basetools:axe_wood", { +core.register_tool("basetools:axe_wood", { description = "Wooden Axe".."\n".. "Digs choppy=3", inventory_image = "basetools_woodaxe.png", @@ -225,7 +225,7 @@ minetest.register_tool("basetools:axe_wood", { }, }, }) -minetest.register_tool("basetools:axe_stone", { +core.register_tool("basetools:axe_stone", { description = "Stone Axe".."\n".. "Digs choppy=2..3", inventory_image = "basetools_stoneaxe.png", @@ -236,7 +236,7 @@ minetest.register_tool("basetools:axe_stone", { }, }, }) -minetest.register_tool("basetools:axe_steel", { +core.register_tool("basetools:axe_steel", { description = "Steel Axe".."\n".. "Digs choppy=1..3", inventory_image = "basetools_steelaxe.png", @@ -252,7 +252,7 @@ minetest.register_tool("basetools:axe_steel", { -- Shears (dig snappy) -- -minetest.register_tool("basetools:shears_wood", { +core.register_tool("basetools:shears_wood", { description = "Wooden Shears".."\n".. "Digs snappy=3", inventory_image = "basetools_woodshears.png", @@ -263,7 +263,7 @@ minetest.register_tool("basetools:shears_wood", { }, }, }) -minetest.register_tool("basetools:shears_stone", { +core.register_tool("basetools:shears_stone", { description = "Stone Shears".."\n".. "Digs snappy=2..3", inventory_image = "basetools_stoneshears.png", @@ -274,7 +274,7 @@ minetest.register_tool("basetools:shears_stone", { }, }, }) -minetest.register_tool("basetools:shears_steel", { +core.register_tool("basetools:shears_steel", { description = "Steel Shears".."\n".. "Digs snappy=1..3", inventory_image = "basetools_steelshears.png", @@ -290,7 +290,7 @@ minetest.register_tool("basetools:shears_steel", { -- Swords (deal damage) -- -minetest.register_tool("basetools:sword_wood", { +core.register_tool("basetools:sword_wood", { description = "Wooden Sword".."\n".. "Damage: fleshy=2", inventory_image = "basetools_woodsword.png", @@ -299,7 +299,7 @@ minetest.register_tool("basetools:sword_wood", { damage_groups = {fleshy=2}, } }) -minetest.register_tool("basetools:sword_stone", { +core.register_tool("basetools:sword_stone", { description = "Stone Sword".."\n".. "Damage: fleshy=5", inventory_image = "basetools_stonesword.png", @@ -309,7 +309,7 @@ minetest.register_tool("basetools:sword_stone", { damage_groups = {fleshy=5}, } }) -minetest.register_tool("basetools:sword_steel", { +core.register_tool("basetools:sword_steel", { description = "Steel Sword".."\n".. "Damage: fleshy=10", inventory_image = "basetools_steelsword.png", @@ -319,7 +319,7 @@ minetest.register_tool("basetools:sword_steel", { damage_groups = {fleshy=10}, } }) -minetest.register_tool("basetools:sword_titanium", { +core.register_tool("basetools:sword_titanium", { description = "Titanium Sword".."\n".. "Damage: fleshy=100", inventory_image = "basetools_titaniumsword.png", @@ -329,7 +329,7 @@ minetest.register_tool("basetools:sword_titanium", { damage_groups = {fleshy=100}, } }) -minetest.register_tool("basetools:sword_blood", { +core.register_tool("basetools:sword_blood", { description = "Blood Sword".."\n".. "Damage: fleshy=1000", inventory_image = "basetools_bloodsword.png", @@ -341,7 +341,7 @@ minetest.register_tool("basetools:sword_blood", { }) -- Max. damage sword -minetest.register_tool("basetools:sword_mese", { +core.register_tool("basetools:sword_mese", { description = "Mese Sword".."\n".. "Damage: fleshy=32767, fiery=32767, icy=32767".."\n".. "Full Punch Interval: 0.0s", @@ -354,7 +354,7 @@ minetest.register_tool("basetools:sword_mese", { }) -- Fire/Ice sword: Deal damage to non-fleshy damage groups -minetest.register_tool("basetools:sword_fire", { +core.register_tool("basetools:sword_fire", { description = "Fire Sword".."\n".. "Damage: icy=10", inventory_image = "basetools_firesword.png", @@ -364,7 +364,7 @@ minetest.register_tool("basetools:sword_fire", { damage_groups = {icy=10}, } }) -minetest.register_tool("basetools:sword_ice", { +core.register_tool("basetools:sword_ice", { description = "Ice Sword".."\n".. "Damage: fiery=10", inventory_image = "basetools_icesword.png", @@ -374,7 +374,7 @@ minetest.register_tool("basetools:sword_ice", { damage_groups = {fiery=10}, } }) -minetest.register_tool("basetools:sword_elemental", { +core.register_tool("basetools:sword_elemental", { description = "Elemental Sword".."\n".. "Damage: fiery=10, icy=10", inventory_image = "basetools_elementalsword.png", @@ -386,7 +386,7 @@ minetest.register_tool("basetools:sword_elemental", { }) -- Healing weapons: heal HP -minetest.register_tool("basetools:dagger_heal", { +core.register_tool("basetools:dagger_heal", { description = "Healing Dagger".."\n".. "Heal: fleshy=1".."\n".. "Full Punch Interval: 0.5s", @@ -396,7 +396,7 @@ minetest.register_tool("basetools:dagger_heal", { damage_groups = {fleshy=-1}, } }) -minetest.register_tool("basetools:sword_heal", { +core.register_tool("basetools:sword_heal", { description = "Healing Sword".."\n".. "Heal: fleshy=10", inventory_image = "basetools_healsword.png", @@ -405,7 +405,7 @@ minetest.register_tool("basetools:sword_heal", { damage_groups = {fleshy=-10}, } }) -minetest.register_tool("basetools:sword_heal_super", { +core.register_tool("basetools:sword_heal_super", { description = "Super Healing Sword".."\n".. "Heal: fleshy=32768, fiery=32768, icy=32768", inventory_image = "basetools_superhealsword.png", @@ -419,7 +419,7 @@ minetest.register_tool("basetools:sword_heal_super", { -- -- Dagger: Low damage, fast punch interval -- -minetest.register_tool("basetools:dagger_wood", { +core.register_tool("basetools:dagger_wood", { description = "Wooden Dagger".."\n".. "Damage: fleshy=1".."\n".. "Full Punch Interval: 0.5s", @@ -430,7 +430,7 @@ minetest.register_tool("basetools:dagger_wood", { damage_groups = {fleshy=1}, } }) -minetest.register_tool("basetools:dagger_steel", { +core.register_tool("basetools:dagger_steel", { description = "Steel Dagger".."\n".. "Damage: fleshy=2".."\n".. "Full Punch Interval: 0.5s", @@ -492,7 +492,7 @@ for i, params in ipairs(tool_params) do local uses = params.uses local ustring = uses.."-Use"..(uses == 1 and "" or "s") local color = string.format("#FF00%02X", math.floor(((i-1)/#tool_params) * 255)) - minetest.register_tool("basetools:pick_uses_"..string.format("%05d", uses), { + core.register_tool("basetools:pick_uses_"..string.format("%05d", uses), { description = ustring.." Pickaxe".."\n".. "Digs cracky=3".. (params.wear_description and "\n".."Wear bar: " .. params.wear_description or ""), @@ -506,7 +506,7 @@ for i, params in ipairs(tool_params) do wear_color = params.wear_color }) - minetest.register_tool("basetools:sword_uses_"..string.format("%05d", uses), { + core.register_tool("basetools:sword_uses_"..string.format("%05d", uses), { description = ustring.." Sword".."\n".. "Damage: fleshy=1", inventory_image = "basetools_usessword.png^[colorize:"..color..":127", @@ -517,11 +517,11 @@ for i, params in ipairs(tool_params) do }) end -minetest.register_chatcommand("wear_color", { +core.register_chatcommand("wear_color", { params = "[idx]", description = "Set wear bar color override", func = function(player_name, param) - local player = minetest.get_player_by_name(player_name) + local player = core.get_player_by_name(player_name) if not player then return end local wear_color = nil @@ -551,7 +551,7 @@ local wear_on_use = function(itemstack, user, pointed_thing) local color = math.random(0, 0xFFFFFF) local colorstr = string.format("#%06x", color) meta:set_wear_bar_params(colorstr) - minetest.log("action", "[basetool] Wear bar color of "..itemstack:get_name().." changed to "..colorstr) + core.log("action", "[basetool] Wear bar color of "..itemstack:get_name().." changed to "..colorstr) itemstack:set_wear(math.random(0, 65535)) return itemstack end @@ -563,7 +563,7 @@ local wear_on_place = function(itemstack, user, pointed_thing) return itemstack end -minetest.register_tool("basetools:random_wear_bar", { +core.register_tool("basetools:random_wear_bar", { description = "Wear Bar Color Test\n" .. "Punch: Set random color & wear\n" .. "Place: Clear color", diff --git a/games/devtest/mods/benchmarks/init.lua b/games/devtest/mods/benchmarks/init.lua index e3a4409a5..8f6bb1ee4 100644 --- a/games/devtest/mods/benchmarks/init.lua +++ b/games/devtest/mods/benchmarks/init.lua @@ -6,17 +6,17 @@ local function bench_name2content() local t = {} _G._bench_content_ids_data[t] = true - local get_content_id = minetest.get_content_id + local get_content_id = core.get_content_id - local start = minetest.get_us_time() + local start = core.get_us_time() for i = 1, 200 do - for name in pairs(minetest.registered_nodes) do + for name in pairs(core.registered_nodes) do t[#t + 1] = get_content_id(name) end end - local finish = minetest.get_us_time() + local finish = core.get_us_time() return (finish - start) / 1000 end @@ -28,13 +28,13 @@ local function bench_content2name() -- Try to estimate the highest content ID that's used -- (not accurate but good enough for this test) local n = 0 - for _ in pairs(minetest.registered_nodes) do + for _ in pairs(core.registered_nodes) do n = n + 1 end - local get_name_from_content_id = minetest.get_name_from_content_id + local get_name_from_content_id = core.get_name_from_content_id - local start = minetest.get_us_time() + local start = core.get_us_time() for i = 1, 200 do for j = 0, n do @@ -42,30 +42,30 @@ local function bench_content2name() end end - local finish = minetest.get_us_time() + local finish = core.get_us_time() return (finish - start) / 1000 end -minetest.register_chatcommand("bench_name2content", { +core.register_chatcommand("bench_name2content", { params = "", description = "Benchmark: Conversion from node names to content IDs", func = function(name, param) - minetest.chat_send_player(name, "Benchmarking minetest.get_content_id. Warming up ...") + core.chat_send_player(name, "Benchmarking core.get_content_id. Warming up ...") bench_name2content() - minetest.chat_send_player(name, "Warming up finished, now benchmarking ...") + core.chat_send_player(name, "Warming up finished, now benchmarking ...") local time = bench_name2content() return true, ("Time: %.2f ms"):format(time) end, }) -minetest.register_chatcommand("bench_content2name", { +core.register_chatcommand("bench_content2name", { params = "", description = "Benchmark: Conversion from content IDs to node names", func = function(name, param) - minetest.chat_send_player(name, "Benchmarking minetest.get_name_from_content_id. Warming up ...") + core.chat_send_player(name, "Benchmarking core.get_name_from_content_id. Warming up ...") bench_content2name() - minetest.chat_send_player(name, "Warming up finished, now benchmarking ...") + core.chat_send_player(name, "Warming up finished, now benchmarking ...") local time = bench_content2name() return true, ("Time: %.2f ms"):format(time) end, @@ -87,32 +87,32 @@ local function get_positions_cube(ppos) return pos_list end -minetest.register_chatcommand("bench_bulk_set_node", { +core.register_chatcommand("bench_bulk_set_node", { params = "", description = "Benchmark: Bulk-set 99×99×99 stone nodes", func = function(name, param) - local player = minetest.get_player_by_name(name) + local player = core.get_player_by_name(name) if not player then return false, "No player." end local pos_list = get_positions_cube(player:get_pos()) - minetest.chat_send_player(name, "Benchmarking minetest.bulk_set_node. Warming up ...") + core.chat_send_player(name, "Benchmarking core.bulk_set_node. Warming up ...") -- warm up with stone to prevent having different callbacks -- due to different node topology - minetest.bulk_set_node(pos_list, {name = "mapgen_stone"}) + core.bulk_set_node(pos_list, {name = "mapgen_stone"}) - minetest.chat_send_player(name, "Warming up finished, now benchmarking ...") + core.chat_send_player(name, "Warming up finished, now benchmarking ...") - local start_time = minetest.get_us_time() + local start_time = core.get_us_time() for i=1,#pos_list do - minetest.set_node(pos_list[i], {name = "mapgen_stone"}) + core.set_node(pos_list[i], {name = "mapgen_stone"}) end - local middle_time = minetest.get_us_time() - minetest.bulk_set_node(pos_list, {name = "mapgen_stone"}) - local end_time = minetest.get_us_time() - local msg = string.format("Benchmark results: minetest.set_node loop: %.2f ms; minetest.bulk_set_node: %.2f ms", + local middle_time = core.get_us_time() + core.bulk_set_node(pos_list, {name = "mapgen_stone"}) + local end_time = core.get_us_time() + local msg = string.format("Benchmark results: core.set_node loop: %.2f ms; core.bulk_set_node: %.2f ms", ((middle_time - start_time)) / 1000, ((end_time - middle_time)) / 1000 ) @@ -120,19 +120,19 @@ minetest.register_chatcommand("bench_bulk_set_node", { end, }) -minetest.register_chatcommand("bench_bulk_get_node", { +core.register_chatcommand("bench_bulk_get_node", { params = "", description = "Benchmark: Bulk-get 99×99×99 nodes", func = function(name, param) - local player = minetest.get_player_by_name(name) + local player = core.get_player_by_name(name) if not player then return false, "No player." end local pos_list = get_positions_cube(player:get_pos()) local function bench() - local start_time = minetest.get_us_time() + local start_time = core.get_us_time() for i=1,#pos_list do - local n = minetest.get_node(pos_list[i]) + local n = core.get_node(pos_list[i]) -- Make sure the name lookup is never optimized away. -- Table allocation might still be omitted. But only accessing -- the name of a node is a common pattern anyways. @@ -140,47 +140,47 @@ minetest.register_chatcommand("bench_bulk_get_node", { error("should never happen") end end - return minetest.get_us_time() - start_time + return core.get_us_time() - start_time end - minetest.chat_send_player(name, "Benchmarking minetest.get_node. Warming up ...") + core.chat_send_player(name, "Benchmarking core.get_node. Warming up ...") bench() - minetest.chat_send_player(name, "Warming up finished, now benchmarking ...") + core.chat_send_player(name, "Warming up finished, now benchmarking ...") local result_us = bench() - local msg = string.format("Benchmark results: minetest.get_node loop 1: %.2f ms", + local msg = string.format("Benchmark results: core.get_node loop 1: %.2f ms", result_us / 1000) return true, msg end, }) -minetest.register_chatcommand("bench_bulk_swap_node", { +core.register_chatcommand("bench_bulk_swap_node", { params = "", description = "Benchmark: Bulk-swap 99×99×99 stone nodes", func = function(name, param) - local player = minetest.get_player_by_name(name) + local player = core.get_player_by_name(name) if not player then return false, "No player." end local pos_list = get_positions_cube(player:get_pos()) - minetest.chat_send_player(name, "Benchmarking minetest.bulk_swap_node. Warming up ...") + core.chat_send_player(name, "Benchmarking core.bulk_swap_node. Warming up ...") -- warm up because first execution otherwise becomes -- significantly slower - minetest.bulk_swap_node(pos_list, {name = "mapgen_stone"}) + core.bulk_swap_node(pos_list, {name = "mapgen_stone"}) - minetest.chat_send_player(name, "Warming up finished, now benchmarking ...") + core.chat_send_player(name, "Warming up finished, now benchmarking ...") - local start_time = minetest.get_us_time() + local start_time = core.get_us_time() for i=1,#pos_list do - minetest.swap_node(pos_list[i], {name = "mapgen_stone"}) + core.swap_node(pos_list[i], {name = "mapgen_stone"}) end - local middle_time = minetest.get_us_time() - minetest.bulk_swap_node(pos_list, {name = "mapgen_stone"}) - local end_time = minetest.get_us_time() - local msg = string.format("Benchmark results: minetest.swap_node loop: %.2f ms; minetest.bulk_swap_node: %.2f ms", + local middle_time = core.get_us_time() + core.bulk_swap_node(pos_list, {name = "mapgen_stone"}) + local end_time = core.get_us_time() + local msg = string.format("Benchmark results: core.swap_node loop: %.2f ms; core.bulk_swap_node: %.2f ms", ((middle_time - start_time)) / 1000, ((end_time - middle_time)) / 1000 ) diff --git a/games/devtest/mods/broken/init.lua b/games/devtest/mods/broken/init.lua index 7bbf49856..dcbc47dfa 100644 --- a/games/devtest/mods/broken/init.lua +++ b/games/devtest/mods/broken/init.lua @@ -4,8 +4,8 @@ -- The itemstrings are deliberately kept descriptive to keep them easy to -- recognize. -minetest.register_node("broken:node_with_empty_definition", {}) -minetest.register_tool("broken:tool_with_empty_definition", {}) -minetest.register_craftitem("broken:craftitem_with_empty_definition", {}) +core.register_node("broken:node_with_empty_definition", {}) +core.register_tool("broken:tool_with_empty_definition", {}) +core.register_craftitem("broken:craftitem_with_empty_definition", {}) -minetest.register_entity("broken:entity_with_empty_definition", {}) +core.register_entity("broken:entity_with_empty_definition", {}) diff --git a/games/devtest/mods/bucket/init.lua b/games/devtest/mods/bucket/init.lua index ff58b0669..bce5843ae 100644 --- a/games/devtest/mods/bucket/init.lua +++ b/games/devtest/mods/bucket/init.lua @@ -1,6 +1,6 @@ -- Bucket: Punch liquid source or flowing liquid to collect it -minetest.register_tool("bucket:bucket", { +core.register_tool("bucket:bucket", { description = "Bucket".."\n".. "Picks up liquid nodes", inventory_image = "bucket.png", @@ -13,10 +13,10 @@ minetest.register_tool("bucket:bucket", { return end -- Check if pointing to a liquid - local n = minetest.get_node(pointed_thing.under) - local def = minetest.registered_nodes[n.name] + local n = core.get_node(pointed_thing.under) + local def = core.registered_nodes[n.name] if def ~= nil and (def.liquidtype == "source" or def.liquidtype == "flowing") then - minetest.add_node(pointed_thing.under, {name="air"}) + core.add_node(pointed_thing.under, {name="air"}) local inv = user:get_inventory() if inv then inv:add_item("main", ItemStack(n.name)) diff --git a/games/devtest/mods/callbacks/entities.lua b/games/devtest/mods/callbacks/entities.lua index 528c985da..340af17e3 100644 --- a/games/devtest/mods/callbacks/entities.lua +++ b/games/devtest/mods/callbacks/entities.lua @@ -1,8 +1,8 @@ -- Entities that test their callbacks local message = function(msg) - minetest.log("action", "[callbacks] "..msg) - minetest.chat_send_all(msg) + core.log("action", "[callbacks] "..msg) + core.chat_send_all(msg) end local get_object_name = function(obj) @@ -18,11 +18,11 @@ local get_object_name = function(obj) end local spos = function(self) - return minetest.pos_to_string(vector.round(self.object:get_pos())) + return core.pos_to_string(vector.round(self.object:get_pos())) end -- Callback test entity (all callbacks except on_step) -minetest.register_entity("callbacks:callback", { +core.register_entity("callbacks:callback", { initial_properties = { visual = "upright_sprite", textures = { "callbacks_callback_entity.png" }, @@ -69,7 +69,7 @@ minetest.register_entity("callbacks:callback", { }) -- Only test on_step callback -minetest.register_entity("callbacks:callback_step", { +core.register_entity("callbacks:callback_step", { visual = "upright_sprite", textures = { "callbacks_callback_entity_step.png" }, on_step = function(self, dtime) @@ -78,7 +78,7 @@ minetest.register_entity("callbacks:callback_step", { }) -- Callback punch with nil puncher -minetest.register_entity("callbacks:callback_puncher", { +core.register_entity("callbacks:callback_puncher", { initial_properties = { visual = "upright_sprite", textures = { "callbacks_callback_entity.png" }, diff --git a/games/devtest/mods/callbacks/init.lua b/games/devtest/mods/callbacks/init.lua index 77cee1db2..ff2da9730 100644 --- a/games/devtest/mods/callbacks/init.lua +++ b/games/devtest/mods/callbacks/init.lua @@ -1,4 +1,4 @@ -dofile(minetest.get_modpath("callbacks").."/items.lua") -dofile(minetest.get_modpath("callbacks").."/nodes.lua") -dofile(minetest.get_modpath("callbacks").."/entities.lua") -dofile(minetest.get_modpath("callbacks").."/players.lua") +dofile(core.get_modpath("callbacks").."/items.lua") +dofile(core.get_modpath("callbacks").."/nodes.lua") +dofile(core.get_modpath("callbacks").."/entities.lua") +dofile(core.get_modpath("callbacks").."/players.lua") diff --git a/games/devtest/mods/callbacks/items.lua b/games/devtest/mods/callbacks/items.lua index cd73529bd..880f393e6 100644 --- a/games/devtest/mods/callbacks/items.lua +++ b/games/devtest/mods/callbacks/items.lua @@ -3,11 +3,11 @@ -- local function print_to_everything(msg) - minetest.log("action", "[callbacks] " .. msg) - minetest.chat_send_all(msg) + core.log("action", "[callbacks] " .. msg) + core.chat_send_all(msg) end -minetest.register_craftitem("callbacks:callback_item_1", { +core.register_craftitem("callbacks:callback_item_1", { description = "Callback Test Item 1".."\n".. "Tests callbacks: on_secondary_use, on_drop, on_pickup, on_use, after_use".."\n".. "Punch/Drop + Sneak: Switch to Callback Test Item 2".."\n".. @@ -34,7 +34,7 @@ minetest.register_craftitem("callbacks:callback_item_1", { itemstack:set_name("callbacks:callback_item_2") end - return minetest.item_drop(itemstack, dropper, pos) + return core.item_drop(itemstack, dropper, pos) end, on_pickup = function(itemstack, picker, pointed_thing, ...) @@ -50,7 +50,7 @@ minetest.register_craftitem("callbacks:callback_item_1", { -- Pick up one item of the other kind at once local taken = itemstack:take_item() taken:set_name("callbacks:callback_item_2") - local leftover = minetest.item_pickup(taken, picker, pointed_thing, ...) + local leftover = core.item_pickup(taken, picker, pointed_thing, ...) leftover:set_name("callbacks:callback_item_1") itemstack:add_item(leftover) return itemstack @@ -59,10 +59,10 @@ minetest.register_craftitem("callbacks:callback_item_1", { return elseif ctrl.left then -- Eat it - return minetest.do_item_eat(2, nil, itemstack, picker, pointed_thing) + return core.do_item_eat(2, nil, itemstack, picker, pointed_thing) else -- Normal: pick up everything - return minetest.item_pickup(itemstack, picker, pointed_thing, ...) + return core.item_pickup(itemstack, picker, pointed_thing, ...) end end, @@ -87,7 +87,7 @@ minetest.register_craftitem("callbacks:callback_item_1", { end, }) -minetest.register_craftitem("callbacks:callback_item_2", { +core.register_craftitem("callbacks:callback_item_2", { description = "Callback Test Item 2".."\n".. "Punch to switch to Callback Test Item 1", inventory_image = "callbacks_callback_item_2.png", @@ -102,7 +102,7 @@ minetest.register_craftitem("callbacks:callback_item_2", { end, }) -minetest.register_on_item_pickup(function(itemstack, picker, pointed_thing, time_from_last_punch, ...) +core.register_on_item_pickup(function(itemstack, picker, pointed_thing, time_from_last_punch, ...) assert(not pointed_thing or pointed_thing.ref:get_luaentity().name == "__builtin:item") local item_name = itemstack:get_name() diff --git a/games/devtest/mods/callbacks/nodes.lua b/games/devtest/mods/callbacks/nodes.lua index 80e3f9bed..67f4be455 100644 --- a/games/devtest/mods/callbacks/nodes.lua +++ b/games/devtest/mods/callbacks/nodes.lua @@ -1,29 +1,29 @@ local function print_to_everything(msg) - minetest.log("action", "[callbacks] " .. msg) - minetest.chat_send_all(msg) + core.log("action", "[callbacks] " .. msg) + core.chat_send_all(msg) end -minetest.register_node("callbacks:callback_node", { +core.register_node("callbacks:callback_node", { description = "Callback Test Node (construct/destruct/timer)".."\n".. "Tests callbacks: on_construct, after_place_node, on_destruct, after_destruct, after_dig_node, on_timer", tiles = {"callbacks_callback_node.png"}, groups = {callback_test=1, dig_immediate=3}, - -- This was known to cause a bug in minetest.item_place_node() when used - -- via minetest.place_node(), causing a placer with no position + -- This was known to cause a bug in core.item_place_node() when used + -- via core.place_node(), causing a placer with no position paramtype2 = "facedir", drop = "", on_construct = function(pos) - print_to_everything("callbacks:callback_node:on_construct("..minetest.pos_to_string(pos)..")") - local meta = minetest.get_meta(pos) + print_to_everything("callbacks:callback_node:on_construct("..core.pos_to_string(pos)..")") + local meta = core.get_meta(pos) meta:set_string("mine", "test") - local timer = minetest.get_node_timer(pos) + local timer = core.get_node_timer(pos) timer:start(4, 3) end, after_place_node = function(pos, placer) - print_to_everything("callbacks:callback_node:after_place_node("..minetest.pos_to_string(pos)..")") - local meta = minetest.get_meta(pos) + print_to_everything("callbacks:callback_node:after_place_node("..core.pos_to_string(pos)..")") + local meta = core.get_meta(pos) if meta:get_string("mine") == "test" then print_to_everything("correct metadata found") else @@ -32,15 +32,15 @@ minetest.register_node("callbacks:callback_node", { end, on_destruct = function(pos) - print_to_everything("callbacks:callback_node:on_destruct("..minetest.pos_to_string(pos)..")") + print_to_everything("callbacks:callback_node:on_destruct("..core.pos_to_string(pos)..")") end, after_destruct = function(pos) - print_to_everything("callbacks:callback_node:after_destruct("..minetest.pos_to_string(pos)..")") + print_to_everything("callbacks:callback_node:after_destruct("..core.pos_to_string(pos)..")") end, after_dig_node = function(pos, oldnode, oldmetadata, digger) - print_to_everything("callbacks:callback_node:after_dig_node("..minetest.pos_to_string(pos)..")") + print_to_everything("callbacks:callback_node:after_dig_node("..core.pos_to_string(pos)..")") end, on_timer = function(pos, elapsed) diff --git a/games/devtest/mods/callbacks/players.lua b/games/devtest/mods/callbacks/players.lua index 15bb076dc..2e9b2faf6 100644 --- a/games/devtest/mods/callbacks/players.lua +++ b/games/devtest/mods/callbacks/players.lua @@ -1,7 +1,7 @@ local message = function(msg) - minetest.log("action", "[callbacks] "..msg) - minetest.chat_send_all(msg) + core.log("action", "[callbacks] "..msg) + core.chat_send_all(msg) end core.register_on_punchplayer(function(player, hitter, time_from_last_punch, tool_capabilities, dir, damage) diff --git a/games/devtest/mods/chest/chest.lua b/games/devtest/mods/chest/chest.lua index 1f165fed4..251133aaf 100644 --- a/games/devtest/mods/chest/chest.lua +++ b/games/devtest/mods/chest/chest.lua @@ -1,9 +1,9 @@ local function print_to_everything(msg) - minetest.log("action", "[chest] " .. msg) - minetest.chat_send_all(msg) + core.log("action", "[chest] " .. msg) + core.chat_send_all(msg) end -minetest.register_node("chest:chest", { +core.register_node("chest:chest", { description = "Chest" .. "\n" .. "32 inventory slots", tiles ={"chest_chest.png^[sheet:2x2:0,0", "chest_chest.png^[sheet:2x2:0,0", @@ -13,7 +13,7 @@ minetest.register_node("chest:chest", { groups = {dig_immediate=2,choppy=3,meta_is_privatizable=1}, is_ground_content = false, on_construct = function(pos) - local meta = minetest.get_meta(pos) + local meta = core.get_meta(pos) meta:set_string("formspec", "size[8,9]".. "list[current_name;main;0,0;8,4;]".. @@ -24,7 +24,7 @@ minetest.register_node("chest:chest", { inv:set_size("main", 8*4) end, can_dig = function(pos,player) - local meta = minetest.get_meta(pos); + local meta = core.get_meta(pos); local inv = meta:get_inventory() return inv:is_empty("main") end, diff --git a/games/devtest/mods/chest/detached.lua b/games/devtest/mods/chest/detached.lua index 90bc437af..bf6eea98a 100644 --- a/games/devtest/mods/chest/detached.lua +++ b/games/devtest/mods/chest/detached.lua @@ -2,12 +2,12 @@ local ALLOW_PUT_MAX = 1 local ALLOW_TAKE_MAX = 4 local function print_to_everything(msg) - minetest.log("action", "[chest] " .. msg) - minetest.chat_send_all(msg) + core.log("action", "[chest] " .. msg) + core.chat_send_all(msg) end -- Create a detached inventory -local inv = minetest.create_detached_inventory("detached_inventory", { +local inv = core.create_detached_inventory("detached_inventory", { allow_move = function(inv, from_list, from_index, to_list, to_index, count, player) print_to_everything("Detached inventory: "..player:get_player_name().." triggered allow_move") return count -- Allow all @@ -34,7 +34,7 @@ inv:set_size("main", 8*3) -- Add a special chest to grant access to this inventory -minetest.register_node("chest:detached_chest", { +core.register_node("chest:detached_chest", { description = "Detached Chest" .. "\n" .. "Grants access to a shared detached inventory" .."\n" .. "Max. item put count: "..ALLOW_PUT_MAX .."\n".. @@ -46,7 +46,7 @@ minetest.register_node("chest:detached_chest", { groups = {dig_immediate=2,choppy=3,meta_is_privatizable=1}, is_ground_content = false, on_construct = function(pos) - local meta = minetest.get_meta(pos) + local meta = core.get_meta(pos) meta:set_string("formspec", "size[8,9]".. "list[detached:detached_inventory;main;0,0;8,3;0]".. diff --git a/games/devtest/mods/chest/init.lua b/games/devtest/mods/chest/init.lua index cb2974c64..fad6cfdee 100644 --- a/games/devtest/mods/chest/init.lua +++ b/games/devtest/mods/chest/init.lua @@ -1,2 +1,2 @@ -dofile(minetest.get_modpath("chest").."/chest.lua") -dofile(minetest.get_modpath("chest").."/detached.lua") +dofile(core.get_modpath("chest").."/chest.lua") +dofile(core.get_modpath("chest").."/detached.lua") diff --git a/games/devtest/mods/chest_of_everything/init.lua b/games/devtest/mods/chest_of_everything/init.lua index 22d40d9bb..e8a1728c2 100644 --- a/games/devtest/mods/chest_of_everything/init.lua +++ b/games/devtest/mods/chest_of_everything/init.lua @@ -1,5 +1,5 @@ -local F = minetest.formspec_escape -local S = minetest.get_translator("chest_of_everything") +local F = core.formspec_escape +local S = core.get_translator("chest_of_everything") local detached_inventories = {} @@ -22,7 +22,7 @@ local all_items_list -- cached list of all items -- Create detached inventories local function add_detached_inventories(player) local name = player:get_player_name() - local inv_items = minetest.create_detached_inventory("chest_of_everything_items_"..name, { + local inv_items = core.create_detached_inventory("chest_of_everything_items_"..name, { allow_move = function(inv, from_list, from_index, to_list, to_index, count, player) return 0 end, @@ -33,7 +33,7 @@ local function add_detached_inventories(player) return -1 end, }, name) - local inv_trash = minetest.create_detached_inventory("chest_of_everything_trash_"..name, { + local inv_trash = core.create_detached_inventory("chest_of_everything_trash_"..name, { allow_take = function(inv, listname, index, stack, player) return 0 end, @@ -58,14 +58,14 @@ local sort_items_by_type = function(item1, item2) * Other items * Items from the 'broken' mod * Dummy items ]] - local def1 = minetest.registered_items[item1] - local def2 = minetest.registered_items[item2] + local def1 = core.registered_items[item1] + local def2 = core.registered_items[item2] local tool1 = def1.type == "tool" local tool2 = def2.type == "tool" - local testtool1 = minetest.get_item_group(item1, "testtool") == 1 - local testtool2 = minetest.get_item_group(item2, "testtool") == 1 - local dummy1 = minetest.get_item_group(item1, "dummy") == 1 - local dummy2 = minetest.get_item_group(item2, "dummy") == 1 + local testtool1 = core.get_item_group(item1, "testtool") == 1 + local testtool2 = core.get_item_group(item2, "testtool") == 1 + local dummy1 = core.get_item_group(item1, "dummy") == 1 + local dummy2 = core.get_item_group(item2, "dummy") == 1 local broken1 = def1.mod_origin == "broken" local broken2 = def2.mod_origin == "broken" local craftitem1 = def1.type == "craft" @@ -113,7 +113,7 @@ local collect_items = function(filter, lang_code) filter = string.trim(filter) filter = string.lower(filter) -- to make sure the search is case-insensitive end - for itemstring, def in pairs(minetest.registered_items) do + for itemstring, def in pairs(core.registered_items) do if itemstring ~= "" and itemstring ~= "unknown" and itemstring ~= "ignore" then if filter and lang_code then local desc = ItemStack(itemstring):get_description() @@ -124,7 +124,7 @@ local collect_items = function(filter, lang_code) matches = string.match(ldesc, filter) ~= nil -- Second, try to match translated description if not matches then - local tdesc = minetest.get_translated_string(lang_code, desc) + local tdesc = core.get_translated_string(lang_code, desc) if tdesc ~= "" then tdesc = string.lower(tdesc) matches = string.match(tdesc, filter) ~= nil @@ -134,7 +134,7 @@ local collect_items = function(filter, lang_code) if not matches then local sdesc = ItemStack(itemstring):get_short_description() if sdesc ~= "" then - sdesc = minetest.get_translated_string(lang_code, sdesc) + sdesc = core.get_translated_string(lang_code, sdesc) sdesc = string.lower(sdesc) matches = string.match(sdesc, filter) ~= nil end @@ -172,7 +172,7 @@ local function update_inventory(name) if search == "" then items = all_items_list else - local lang_code = minetest.get_player_information(name).lang_code + local lang_code = core.get_player_information(name).lang_code items = collect_items(search, lang_code) end local max_page = math.ceil(#items / SLOTS) @@ -197,7 +197,7 @@ local function get_formspec(page, name) if not name then return "" end - local player = minetest.get_player_by_name(name) + local player = core.get_player_by_name(name) local playerinvsize = player:get_inventory():get_size("main") local hotbarsize = player:hud_get_hotbar_itemcount() local pinv_w, pinv_h, pinv_x @@ -250,11 +250,11 @@ end local show_formspec = function(name) local page = current_pages[name] local form = get_formspec(page, name) - minetest.show_formspec(name, "chest_of_everything:getitem", form) + core.show_formspec(name, "chest_of_everything:getitem", form) return true end -minetest.register_on_player_receive_fields(function(player, formname, fields) +core.register_on_player_receive_fields(function(player, formname, fields) if formname ~= "chest_of_everything:getitem" then return end @@ -296,7 +296,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end end) -minetest.register_tool("chest_of_everything:bag", { +core.register_tool("chest_of_everything:bag", { description = S("Bag of Everything") .. "\n" .. S("Grants access to all items"), inventory_image = "chest_of_everything_bag.png", @@ -310,7 +310,7 @@ minetest.register_tool("chest_of_everything:bag", { end, }) -minetest.register_node("chest_of_everything:chest", { +core.register_node("chest_of_everything:chest", { description = S("Chest of Everything") .. "\n" .. S("Grants access to all items"), tiles ={"chest_of_everything_chest.png^[sheet:2x2:0,0", "chest_of_everything_chest.png^[sheet:2x2:0,0", @@ -320,7 +320,7 @@ minetest.register_node("chest_of_everything:chest", { groups = { dig_immediate=2, choppy=3 }, is_ground_content = false, on_construct = function(pos) - local meta = minetest.get_meta(pos) + local meta = core.get_meta(pos) meta:set_string("infotext", S("Chest of Everything")) end, on_rightclick = function(pos, node, clicker) @@ -332,11 +332,11 @@ minetest.register_node("chest_of_everything:chest", { }) -minetest.register_on_mods_loaded(function() +core.register_on_mods_loaded(function() all_items_list = collect_items() end) -minetest.register_on_joinplayer(function(player) +core.register_on_joinplayer(function(player) local name = player:get_player_name() current_searches[name] = "" current_pages[name] = 1 @@ -345,7 +345,7 @@ minetest.register_on_joinplayer(function(player) update_inventory(name) end) -minetest.register_on_leaveplayer(function(player) +core.register_on_leaveplayer(function(player) local name = player:get_player_name() current_pages[name] = nil current_max_pages[name] = nil diff --git a/games/devtest/mods/dignodes/init.lua b/games/devtest/mods/dignodes/init.lua index b66cc3c21..312207e67 100644 --- a/games/devtest/mods/dignodes/init.lua +++ b/games/devtest/mods/dignodes/init.lua @@ -20,7 +20,7 @@ for g=1, #groups do elseif l==2 then tile = tile .. "^[colorize:#FF0000:127" end - minetest.register_node("dignodes:"..gr.."_"..r.."_"..l, { + core.register_node("dignodes:"..gr.."_"..r.."_"..l, { description = d, tiles = { tile }, groups = { [gr] = r, level = l }, @@ -31,7 +31,7 @@ for g=1, #groups do end -- Node without any digging groups -minetest.register_node("dignodes:none", { +core.register_node("dignodes:none", { description = "Dig Test Node: groupless".."\n".. "Can't be dug by normal digging tools".."\n".. "(use the Remover tool to remove)", diff --git a/games/devtest/mods/give_initial_stuff/init.lua b/games/devtest/mods/give_initial_stuff/init.lua index 055ae8976..4b31b5299 100644 --- a/games/devtest/mods/give_initial_stuff/init.lua +++ b/games/devtest/mods/give_initial_stuff/init.lua @@ -12,21 +12,21 @@ local give_initial_stuff = function(player) give_if_not_gotten_already(inv, "main", "bucket:bucket") give_if_not_gotten_already(inv, "main", "testnodes:light14") give_if_not_gotten_already(inv, "main", "chest_of_everything:bag") - minetest.log("action", "[give_initial_stuff] Giving initial stuff to "..player:get_player_name()) + core.log("action", "[give_initial_stuff] Giving initial stuff to "..player:get_player_name()) end -minetest.register_on_newplayer(function(player) - if minetest.settings:get_bool("give_initial_stuff", true) then +core.register_on_newplayer(function(player) + if core.settings:get_bool("give_initial_stuff", true) then give_initial_stuff(player) end end) -minetest.register_chatcommand("stuff", { +core.register_chatcommand("stuff", { params = "", privs = { give = true }, description = "Give yourself initial items", func = function(name, param) - local player = minetest.get_player_by_name(name) + local player = core.get_player_by_name(name) if not player or not player:is_player() then return false, "No player." end diff --git a/games/devtest/mods/gltf/init.lua b/games/devtest/mods/gltf/init.lua index 252fd017d..fd4d13bee 100644 --- a/games/devtest/mods/gltf/init.lua +++ b/games/devtest/mods/gltf/init.lua @@ -1,5 +1,5 @@ local function register_entity(name, textures, backface_culling) - minetest.register_entity("gltf:" .. name, { + core.register_entity("gltf:" .. name, { initial_properties = { visual = "mesh", mesh = "gltf_" .. name .. ".gltf", @@ -18,7 +18,7 @@ do register_entity("blender_cube", cube_textures) register_entity("blender_cube_scaled", cube_textures) register_entity("blender_cube_matrix_transform", cube_textures) - minetest.register_entity("gltf:blender_cube_glb", { + core.register_entity("gltf:blender_cube_glb", { initial_properties = { visual = "mesh", mesh = "gltf_blender_cube.glb", @@ -31,7 +31,7 @@ end register_entity("snow_man", {"gltf_snow_man.png"}) register_entity("spider", {"gltf_spider.png"}) -minetest.register_entity("gltf:spider_animated", { +core.register_entity("gltf:spider_animated", { initial_properties = { visual = "mesh", mesh = "gltf_spider_animated.gltf", @@ -42,7 +42,7 @@ minetest.register_entity("gltf:spider_animated", { end }) -minetest.register_entity("gltf:simple_skin", { +core.register_entity("gltf:simple_skin", { initial_properties = { visual = "mesh", visual_size = vector.new(5, 5, 5), @@ -57,7 +57,7 @@ minetest.register_entity("gltf:simple_skin", { -- The claws rendering incorrectly from one side is expected behavior: -- They use an unsupported double-sided material. -minetest.register_entity("gltf:frog", { +core.register_entity("gltf:frog", { initial_properties = { visual = "mesh", mesh = "gltf_frog.gltf", @@ -70,14 +70,14 @@ minetest.register_entity("gltf:frog", { }) -minetest.register_node("gltf:frog", { +core.register_node("gltf:frog", { description = "glTF frog, but it's a node", tiles = {{name = "gltf_frog.png", backface_culling = false}}, drawtype = "mesh", mesh = "gltf_frog.gltf", }) -minetest.register_chatcommand("show_model", { +core.register_chatcommand("show_model", { params = " [textures]", description = "Show a model (defaults to gltf models, for example '/show_model frog').", func = function(name, param) @@ -86,7 +86,7 @@ minetest.register_chatcommand("show_model", { model = "gltf_" .. param .. ".gltf" textures = "gltf_" .. param .. ".png" end - minetest.show_formspec(name, "gltf:model", table.concat{ + core.show_formspec(name, "gltf:model", table.concat{ "formspec_version[7]", "size[10,10]", "model[0,0;10,10;model;", model, ";", textures, ";0,0;true;true;0,0;0]", diff --git a/games/devtest/mods/initial_message/init.lua b/games/devtest/mods/initial_message/init.lua index 2bff5741f..255dca04d 100644 --- a/games/devtest/mods/initial_message/init.lua +++ b/games/devtest/mods/initial_message/init.lua @@ -1,9 +1,9 @@ -minetest.register_on_joinplayer(function(player) +core.register_on_joinplayer(function(player) local cb = function(player) if not player or not player:is_player() then return end - minetest.chat_send_player(player:get_player_name(), "This is the \"Development Test\" [devtest], meant only for testing and development.") + core.chat_send_player(player:get_player_name(), "This is the \"Development Test\" [devtest], meant only for testing and development.") end - minetest.after(2.0, cb, player) + core.after(2.0, cb, player) end) diff --git a/games/devtest/mods/lighting/init.lua b/games/devtest/mods/lighting/init.lua index 20448d925..1251ef12f 100644 --- a/games/devtest/mods/lighting/init.lua +++ b/games/devtest/mods/lighting/init.lua @@ -63,11 +63,11 @@ local function dump_lighting(lighting) return result end -minetest.register_chatcommand("set_lighting", { +core.register_chatcommand("set_lighting", { params = "", description = "Tune lighting parameters", func = function(player_name, param) - local player = minetest.get_player_by_name(player_name); + local player = core.get_player_by_name(player_name); if not player then return end local lighting = player:get_lighting() @@ -107,14 +107,14 @@ minetest.register_chatcommand("set_lighting", { } table.insert_all(form, content) - minetest.show_formspec(player_name, "lighting", table.concat(form)) + core.show_formspec(player_name, "lighting", table.concat(form)) local debug_value = dump_lighting(lighting) local debug_ui = player:hud_add({type="text", position={x=0.1, y=0.3}, scale={x=1,y=1}, alignment = {x=1, y=1}, text=debug_value, number=0xFFFFFF}) player:get_meta():set_int("lighting_hud", debug_ui) end }) -minetest.register_on_player_receive_fields(function(player, formname, fields) +core.register_on_player_receive_fields(function(player, formname, fields) if formname ~= "lighting" then return end if not player then return end @@ -137,7 +137,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) for _,v in ipairs(parameters) do if fields[section.n.."."..v.n] then - local event = minetest.explode_scrollbar_event(fields[section.n.."."..v.n]) + local event = core.explode_scrollbar_event(fields[section.n.."."..v.n]) if event.type == "CHG" then local value = v.min + (v.max - v.min) * (event.value / 1000); if v.type == "log2" then diff --git a/games/devtest/mods/log/init.lua b/games/devtest/mods/log/init.lua index c1c052ddc..64673f260 100644 --- a/games/devtest/mods/log/init.lua +++ b/games/devtest/mods/log/init.lua @@ -1,16 +1,16 @@ -local modname = minetest.get_current_modname() +local modname = core.get_current_modname() local prefix = "["..modname.."] " -- Startup info -minetest.log("action", prefix.."modname="..dump(modname)) -minetest.log("action", prefix.."modpath="..dump(minetest.get_modpath(modname))) -minetest.log("action", prefix.."worldpath="..dump(minetest.get_worldpath())) +core.log("action", prefix.."modname="..dump(modname)) +core.log("action", prefix.."modpath="..dump(core.get_modpath(modname))) +core.log("action", prefix.."worldpath="..dump(core.get_worldpath())) -- Callback info -minetest.register_on_mods_loaded(function() - minetest.log("action", prefix.."Callback: on_mods_loaded()") +core.register_on_mods_loaded(function() + core.log("action", prefix.."Callback: on_mods_loaded()") end) -minetest.register_on_chatcommand(function(name, command, params) - minetest.log("action", prefix.."Caught command '"..command.."', issued by '"..name.."'. Parameters: '"..params.."'") +core.register_on_chatcommand(function(name, command, params) + core.log("action", prefix.."Caught command '"..command.."', issued by '"..name.."'. Parameters: '"..params.."'") end) diff --git a/games/devtest/mods/mapgen/init.lua b/games/devtest/mods/mapgen/init.lua index a5f9128fb..d8439024b 100644 --- a/games/devtest/mods/mapgen/init.lua +++ b/games/devtest/mods/mapgen/init.lua @@ -4,46 +4,46 @@ -- ESSENTIAL node aliases -- Basic nodes -minetest.register_alias("mapgen_stone", "basenodes:stone") -minetest.register_alias("mapgen_water_source", "basenodes:water_source") -minetest.register_alias("mapgen_river_water_source", "basenodes:river_water_source") +core.register_alias("mapgen_stone", "basenodes:stone") +core.register_alias("mapgen_water_source", "basenodes:water_source") +core.register_alias("mapgen_river_water_source", "basenodes:river_water_source") -- Additional essential aliases for v6 -minetest.register_alias("mapgen_lava_source", "basenodes:lava_source") -minetest.register_alias("mapgen_dirt", "basenodes:dirt") -minetest.register_alias("mapgen_dirt_with_grass", "basenodes:dirt_with_grass") -minetest.register_alias("mapgen_sand", "basenodes:sand") -minetest.register_alias("mapgen_tree", "basenodes:tree") -minetest.register_alias("mapgen_leaves", "basenodes:leaves") -minetest.register_alias("mapgen_apple", "basenodes:apple") +core.register_alias("mapgen_lava_source", "basenodes:lava_source") +core.register_alias("mapgen_dirt", "basenodes:dirt") +core.register_alias("mapgen_dirt_with_grass", "basenodes:dirt_with_grass") +core.register_alias("mapgen_sand", "basenodes:sand") +core.register_alias("mapgen_tree", "basenodes:tree") +core.register_alias("mapgen_leaves", "basenodes:leaves") +core.register_alias("mapgen_apple", "basenodes:apple") -- Essential alias for dungeons -minetest.register_alias("mapgen_cobble", "basenodes:cobble") +core.register_alias("mapgen_cobble", "basenodes:cobble") -- Optional aliases for v6 (they all have fallback values in the engine) -if minetest.settings:get_bool("devtest_v6_mapgen_aliases", false) then - minetest.register_alias("mapgen_gravel", "basenodes:gravel") - minetest.register_alias("mapgen_desert_stone", "basenodes:desert_stone") - minetest.register_alias("mapgen_desert_sand", "basenodes:desert_sand") - minetest.register_alias("mapgen_dirt_with_snow", "basenodes:dirt_with_snow") - minetest.register_alias("mapgen_snowblock", "basenodes:snowblock") - minetest.register_alias("mapgen_snow", "basenodes:snow") - minetest.register_alias("mapgen_ice", "basenodes:ice") - minetest.register_alias("mapgen_junglegrass", "basenodes:junglegrass") - minetest.register_alias("mapgen_jungletree", "basenodes:jungletree") - minetest.register_alias("mapgen_jungleleaves", "basenodes:jungleleaves") - minetest.register_alias("mapgen_pine_tree", "basenodes:pine_tree") - minetest.register_alias("mapgen_pine_needles", "basenodes:pine_needles") +if core.settings:get_bool("devtest_v6_mapgen_aliases", false) then + core.register_alias("mapgen_gravel", "basenodes:gravel") + core.register_alias("mapgen_desert_stone", "basenodes:desert_stone") + core.register_alias("mapgen_desert_sand", "basenodes:desert_sand") + core.register_alias("mapgen_dirt_with_snow", "basenodes:dirt_with_snow") + core.register_alias("mapgen_snowblock", "basenodes:snowblock") + core.register_alias("mapgen_snow", "basenodes:snow") + core.register_alias("mapgen_ice", "basenodes:ice") + core.register_alias("mapgen_junglegrass", "basenodes:junglegrass") + core.register_alias("mapgen_jungletree", "basenodes:jungletree") + core.register_alias("mapgen_jungleleaves", "basenodes:jungleleaves") + core.register_alias("mapgen_pine_tree", "basenodes:pine_tree") + core.register_alias("mapgen_pine_needles", "basenodes:pine_needles") end -- Optional alias for mossycobble (should fall back to cobble) -if minetest.settings:get_bool("devtest_dungeon_mossycobble", false) then - minetest.register_alias("mapgen_mossycobble", "basenodes:mossycobble") +if core.settings:get_bool("devtest_dungeon_mossycobble", false) then + core.register_alias("mapgen_mossycobble", "basenodes:mossycobble") end -- Optional aliases for dungeon stairs (should fall back to full nodes) -if minetest.settings:get_bool("devtest_dungeon_stairs", false) then - minetest.register_alias("mapgen_stair_cobble", "stairs:stair_cobble") - if minetest.settings:get_bool("devtest_v6_mapgen_aliases", false) then - minetest.register_alias("mapgen_stair_desert_stone", "stairs:stair_desert_stone") +if core.settings:get_bool("devtest_dungeon_stairs", false) then + core.register_alias("mapgen_stair_cobble", "stairs:stair_cobble") + if core.settings:get_bool("devtest_v6_mapgen_aliases", false) then + core.register_alias("mapgen_stair_desert_stone", "stairs:stair_desert_stone") end end @@ -51,11 +51,11 @@ end -- Register biomes for biome API -- -minetest.clear_registered_biomes() -minetest.clear_registered_decorations() +core.clear_registered_biomes() +core.clear_registered_decorations() -if minetest.settings:get_bool("devtest_register_biomes", true) then - minetest.register_biome({ +if core.settings:get_bool("devtest_register_biomes", true) then + core.register_biome({ name = "mapgen:grassland", node_top = "basenodes:dirt_with_grass", depth_top = 1, @@ -72,7 +72,7 @@ if minetest.settings:get_bool("devtest_register_biomes", true) then humidity_point = 50, }) - minetest.register_biome({ + core.register_biome({ name = "mapgen:grassland_ocean", node_top = "basenodes:sand", depth_top = 1, @@ -90,7 +90,7 @@ if minetest.settings:get_bool("devtest_register_biomes", true) then humidity_point = 50, }) - minetest.register_biome({ + core.register_biome({ name = "mapgen:grassland_under", node_cave_liquid = {"basenodes:water_source", "basenodes:lava_source"}, node_dungeon = "basenodes:cobble", diff --git a/games/devtest/mods/modchannels/init.lua b/games/devtest/mods/modchannels/init.lua index ee925f09b..2003841b2 100644 --- a/games/devtest/mods/modchannels/init.lua +++ b/games/devtest/mods/modchannels/init.lua @@ -1,10 +1,10 @@ -- -- Mod channels experimental handlers -- -local mod_channel = minetest.mod_channel_join("experimental_preview") +local mod_channel = core.mod_channel_join("experimental_preview") -minetest.register_on_modchannel_message(function(channel, sender, message) - minetest.log("action", "[modchannels] Server received message `" .. message +core.register_on_modchannel_message(function(channel, sender, message) + core.log("action", "[modchannels] Server received message `" .. message .. "` on channel `" .. channel .. "` from sender `" .. sender .. "`") if mod_channel:is_writeable() then diff --git a/games/devtest/mods/soundstuff/bigfoot.lua b/games/devtest/mods/soundstuff/bigfoot.lua index 40677793f..afa2b6eea 100644 --- a/games/devtest/mods/soundstuff/bigfoot.lua +++ b/games/devtest/mods/soundstuff/bigfoot.lua @@ -2,7 +2,7 @@ local walk_speed = 2 local walk_distance = 10 -minetest.register_entity("soundstuff:bigfoot", { +core.register_entity("soundstuff:bigfoot", { initial_properties = { physical = false, collisionbox = {-1, -1, -1, 1, 1, 1}, @@ -31,18 +31,18 @@ minetest.register_entity("soundstuff:bigfoot", { end, }) -minetest.register_chatcommand("spawn_bigfoot", { +core.register_chatcommand("spawn_bigfoot", { params = "", description = "Spawn a big foot object that makes footstep sounds", func = function(name, _param) - local player = minetest.get_player_by_name(name) + local player = core.get_player_by_name(name) if not player then return false, "No player." end local pos = player:get_pos() pos.y = pos.y + player:get_properties().collisionbox[2] pos.y = pos.y - (-1) -- bigfoot collisionbox goes 1 down - minetest.add_entity(pos, "soundstuff:bigfoot") + core.add_entity(pos, "soundstuff:bigfoot") return true end, }) diff --git a/games/devtest/mods/soundstuff/init.lua b/games/devtest/mods/soundstuff/init.lua index 31a871cad..6c0049a5e 100644 --- a/games/devtest/mods/soundstuff/init.lua +++ b/games/devtest/mods/soundstuff/init.lua @@ -1,5 +1,5 @@ -local path = minetest.get_modpath("soundstuff") .. "/" +local path = core.get_modpath("soundstuff") .. "/" dofile(path .. "sound_event_items.lua") dofile(path .. "jukebox.lua") dofile(path .. "bigfoot.lua") diff --git a/games/devtest/mods/soundstuff/jukebox.lua b/games/devtest/mods/soundstuff/jukebox.lua index 298697edf..6c70fe306 100644 --- a/games/devtest/mods/soundstuff/jukebox.lua +++ b/games/devtest/mods/soundstuff/jukebox.lua @@ -1,4 +1,4 @@ -local F = minetest.formspec_escape +local F = core.formspec_escape -- hashed node pos -> sound handle local played_sounds = {} @@ -57,8 +57,8 @@ local function get_all_metadata(meta) end local function log_msg(msg) - minetest.log("action", msg) - minetest.chat_send_all(msg) + core.log("action", msg) + core.chat_send_all(msg) end local function try_call(f, ...) @@ -74,11 +74,11 @@ local function try_call(f, ...) end local function show_formspec(pos, player) - local meta = minetest.get_meta(pos) + local meta = core.get_meta(pos) local md = get_all_metadata(meta) - local pos_hash = minetest.hash_node_position(pos) + local pos_hash = core.hash_node_position(pos) local sound_handle = played_sounds[pos_hash] local fs = {} @@ -195,17 +195,17 @@ local function show_formspec(pos, player) button_exit[10.75,11;3,0.75;btn_save_quit;Save & Quit] ]]) - minetest.show_formspec(player:get_player_name(), "soundstuff:jukebox@"..pos:to_string(), + core.show_formspec(player:get_player_name(), "soundstuff:jukebox@"..pos:to_string(), table.concat(fs)) end -minetest.register_node("soundstuff:jukebox", { +core.register_node("soundstuff:jukebox", { description = "Jukebox\nAllows to play arbitrary sounds.", tiles = {"soundstuff_jukebox.png"}, groups = {dig_immediate = 2}, on_construct = function(pos) - local meta = minetest.get_meta(pos) + local meta = core.get_meta(pos) -- SimpleSoundSpec meta:set_string("sss.name", "") meta:set_string("sss.gain", "") @@ -236,18 +236,18 @@ minetest.register_node("soundstuff:jukebox", { end, }) -minetest.register_on_player_receive_fields(function(player, formname, fields) +core.register_on_player_receive_fields(function(player, formname, fields) if formname:sub(1, 19) ~= "soundstuff:jukebox@" then return false end local pos = vector.from_string(formname, 20) if not pos or pos ~= pos:round() then - minetest.log("error", "[soundstuff:jukebox] Invalid formname.") + core.log("error", "[soundstuff:jukebox] Invalid formname.") return true end - local meta = minetest.get_meta(pos) + local meta = core.get_meta(pos) for _, k in ipairs(meta_keys) do if fields[k] then @@ -256,7 +256,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end meta:mark_as_private(meta_keys) - local pos_hash = minetest.hash_node_position(pos) + local pos_hash = core.hash_node_position(pos) local sound_handle = played_sounds[pos_hash] if not sound_handle then @@ -274,17 +274,17 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) pitch = tonumber(md.sparam.pitch), fade = tonumber(md.sparam.fade), start_time = tonumber(md.sparam.start_time), - loop = minetest.is_yes(md.sparam.loop), + loop = core.is_yes(md.sparam.loop), pos = vector.from_string(md.sparam.pos), object = testtools.get_branded_object(md.sparam.object), to_player = md.sparam.to_player, exclude_player = md.sparam.exclude_player, max_hear_distance = tonumber(md.sparam.max_hear_distance), } - local ephemeral = minetest.is_yes(md.ephemeral) + local ephemeral = core.is_yes(md.ephemeral) log_msg(string.format( - "[soundstuff:jukebox] Playing sound: minetest.sound_play(%s, %s, %s)", + "[soundstuff:jukebox] Playing sound: core.sound_play(%s, %s, %s)", string.format("{name=\"%s\", gain=%s, pitch=%s, fade=%s}", sss.name, sss.gain, sss.pitch, sss.fade), string.format("{gain=%s, pitch=%s, fade=%s, start_time=%s, loop=%s, pos=%s, " @@ -295,7 +295,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) sparam.max_hear_distance), tostring(ephemeral))) - sound_handle = try_call(minetest.sound_play, sss, sparam, ephemeral) + sound_handle = try_call(core.sound_play, sss, sparam, ephemeral) played_sounds[pos_hash] = sound_handle show_formspec(pos, player) @@ -303,9 +303,9 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) else if fields.btn_stop then - log_msg("[soundstuff:jukebox] Stopping sound: minetest.sound_stop()") + log_msg("[soundstuff:jukebox] Stopping sound: core.sound_stop()") - try_call(minetest.sound_stop, sound_handle) + try_call(core.sound_stop, sound_handle) elseif fields.btn_release then log_msg("[soundstuff:jukebox] Releasing handle.") @@ -320,10 +320,10 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) local gain = tonumber(md.fade.gain) log_msg(string.format( - "[soundstuff:jukebox] Fading sound: minetest.sound_fade(, %s, %s)", + "[soundstuff:jukebox] Fading sound: core.sound_fade(, %s, %s)", step, gain)) - try_call(minetest.sound_fade, sound_handle, step, gain) + try_call(core.sound_fade, sound_handle, step, gain) end end diff --git a/games/devtest/mods/soundstuff/racecar.lua b/games/devtest/mods/soundstuff/racecar.lua index e7eda6d2e..916279231 100644 --- a/games/devtest/mods/soundstuff/racecar.lua +++ b/games/devtest/mods/soundstuff/racecar.lua @@ -2,7 +2,7 @@ local drive_speed = 20 local drive_distance = 30 -minetest.register_entity("soundstuff:racecar", { +core.register_entity("soundstuff:racecar", { initial_properties = { physical = false, collisionbox = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, diff --git a/games/devtest/mods/soundstuff/sound_event_items.lua b/games/devtest/mods/soundstuff/sound_event_items.lua index b9a43bfc7..9b2eb6b0b 100644 --- a/games/devtest/mods/soundstuff/sound_event_items.lua +++ b/games/devtest/mods/soundstuff/sound_event_items.lua @@ -7,7 +7,7 @@ local simple_nodes = { } for k,v in pairs(simple_nodes) do - minetest.register_node("soundstuff:"..k, { + core.register_node("soundstuff:"..k, { description = v[1].."\n"..v[3], tiles = {"soundstuff_node_sound.png","soundstuff_node_sound.png",v[2]}, groups = {dig_immediate=2}, @@ -17,7 +17,7 @@ for k,v in pairs(simple_nodes) do }) end -minetest.register_node("soundstuff:place_failed_attached", { +core.register_node("soundstuff:place_failed_attached", { description = "Attached Place Failed Sound Node".."\n".. "Attached to the floor; plays a sound when you try to place it but failed", tiles = {"soundstuff_node_sound.png", "soundstuff_node_sound.png", "soundstuff_node_place_failed.png"}, @@ -33,7 +33,7 @@ minetest.register_node("soundstuff:place_failed_attached", { }, }) -minetest.register_node("soundstuff:fall", { +core.register_node("soundstuff:fall", { description = "Fall Sound Node".."\n".. "Falls and plays sound if node below is gone", tiles = {"soundstuff_node_sound.png", "soundstuff_node_sound.png", "soundstuff_node_fall.png"}, @@ -43,7 +43,7 @@ minetest.register_node("soundstuff:fall", { } }) -minetest.register_node("soundstuff:fall_attached", { +core.register_node("soundstuff:fall_attached", { description = "Attached Fall Sound Node".."\n".. "Drops as item and plays sound if node below is gone", tiles = {"soundstuff_node_sound.png", "soundstuff_node_sound.png", "soundstuff_node_fall.png"}, @@ -59,7 +59,7 @@ minetest.register_node("soundstuff:fall_attached", { } }) -minetest.register_node("soundstuff:footstep_liquid", { +core.register_node("soundstuff:footstep_liquid", { description = "Liquid Footstep Sound Node".."\n".. "Plays sound when moving inside it; swimmable", drawtype = "liquid", @@ -92,7 +92,7 @@ minetest.register_node("soundstuff:footstep_liquid", { } }) -minetest.register_node("soundstuff:footstep_climbable", { +core.register_node("soundstuff:footstep_climbable", { description = "Climbable Footstep Sound Node".."\n".. "Plays sound when moving inside it; can climb up and down here", drawtype = "allfaces", @@ -112,17 +112,17 @@ minetest.register_node("soundstuff:footstep_climbable", { -minetest.register_craftitem("soundstuff:eat", { +core.register_craftitem("soundstuff:eat", { description = "Eat Sound Item".."\n".. "Makes a sound when 'eaten' (with punch key)", inventory_image = "soundstuff_eat.png", - on_use = minetest.item_eat(0), + on_use = core.item_eat(0), sound = { eat = { name = "soundstuff_mono", gain = 1.0 }, } }) -minetest.register_tool("soundstuff:breaks", { +core.register_tool("soundstuff:breaks", { description = "Break Sound Tool".."\n".. "Digs cracky=3 and more".."\n".. "Makes a sound when it breaks", @@ -142,7 +142,7 @@ minetest.register_tool("soundstuff:breaks", { }) -minetest.register_tool("soundstuff:punch_use", { +core.register_tool("soundstuff:punch_use", { description = "Punch Use Sound Tool\n".. "Digs cracky=3 and more\n".. "Makes a sound when used on node or entity", @@ -161,7 +161,7 @@ minetest.register_tool("soundstuff:punch_use", { }, }) -minetest.register_tool("soundstuff:punch_use_air", { +core.register_tool("soundstuff:punch_use_air", { description = "Punch Use (Air) Sound Tool\n".. "Makes a sound when used pointing at nothing", inventory_image = "soundstuff_node_dig.png", @@ -171,26 +171,26 @@ minetest.register_tool("soundstuff:punch_use_air", { }) -- Plays sound repeatedly -minetest.register_node("soundstuff:positional", { +core.register_node("soundstuff:positional", { description = "Positional Sound Node".."\n".. "Repeatedly plays a sound at the node location", on_construct = function(pos) - local timer = minetest.get_node_timer(pos) + local timer = core.get_node_timer(pos) timer:start(0) end, on_timer = function(pos, elapsed) - local node = minetest.get_node(pos) + local node = core.get_node(pos) local dist = node.param2 if dist == 0 then dist = nil end - minetest.sound_play("soundstuff_mono", { pos = pos, max_hear_distance = dist }) - local timer = minetest.get_node_timer(pos) + core.sound_play("soundstuff_mono", { pos = pos, max_hear_distance = dist }) + local timer = core.get_node_timer(pos) timer:start(0.7) end, on_rightclick = function(pos, node, clicker) node.param2 = (node.param2 + 1) % 64 - minetest.set_node(pos, node) + core.set_node(pos, node) if clicker and clicker:is_player() then local dist = node.param2 local diststr @@ -199,7 +199,7 @@ minetest.register_node("soundstuff:positional", { else diststr = tostring(dist) end - minetest.chat_send_player(clicker:get_player_name(), "max_hear_distance = " .. diststr) + core.chat_send_player(clicker:get_player_name(), "max_hear_distance = " .. diststr) end end, diff --git a/games/devtest/mods/stairs/init.lua b/games/devtest/mods/stairs/init.lua index 043cf827c..267540e8d 100644 --- a/games/devtest/mods/stairs/init.lua +++ b/games/devtest/mods/stairs/init.lua @@ -2,7 +2,7 @@ stairs = {} -- Node will be called stairs:stair_ function stairs.register_stair(subname, recipeitem, groups, images, description) - minetest.register_node(":stairs:stair_" .. subname, { + core.register_node(":stairs:stair_" .. subname, { description = description.."\n".. "param2 = facedir rotation (0..23)", drawtype = "nodebox", @@ -23,7 +23,7 @@ end -- Node will be called stairs:slab_ function stairs.register_slab(subname, recipeitem, groups, images, description) - minetest.register_node(":stairs:slab_" .. subname, { + core.register_node(":stairs:slab_" .. subname, { description = description, drawtype = "nodebox", tiles = images, diff --git a/games/devtest/mods/testabms/after_node.lua b/games/devtest/mods/testabms/after_node.lua index 64cdfb484..fa2b3ab16 100644 --- a/games/devtest/mods/testabms/after_node.lua +++ b/games/devtest/mods/testabms/after_node.lua @@ -1,8 +1,8 @@ -local S = minetest.get_translator("testnodes") +local S = core.get_translator("testnodes") -- After ABM node -minetest.register_node("testabms:after_abm", { +core.register_node("testabms:after_abm", { description = S("After ABM processed node."), drawtype = "normal", tiles = { "testabms_after_node.png" }, diff --git a/games/devtest/mods/testabms/chances.lua b/games/devtest/mods/testabms/chances.lua index 95f416b45..a84e75260 100644 --- a/games/devtest/mods/testabms/chances.lua +++ b/games/devtest/mods/testabms/chances.lua @@ -1,9 +1,9 @@ -- test ABMs with different chances -local S = minetest.get_translator("testnodes") +local S = core.get_translator("testnodes") -- ABM chance 5 node -minetest.register_node("testabms:chance_5", { +core.register_node("testabms:chance_5", { description = S("Node for test ABM chance_5"), drawtype = "normal", tiles = { "testabms_wait_node.png" }, @@ -11,25 +11,25 @@ minetest.register_node("testabms:chance_5", { groups = { dig_immediate = 3 }, on_construct = function (pos) - local meta = minetest.get_meta(pos) + local meta = core.get_meta(pos) meta:set_string("infotext", "Waiting for ABM testabms:chance_5") end, }) -minetest.register_abm({ +core.register_abm({ label = "testabms:chance_5", nodenames = "testabms:chance_5", interval = 10, chance = 5, action = function (pos) - minetest.swap_node(pos, {name="testabms:after_abm"}) - local meta = minetest.get_meta(pos) + core.swap_node(pos, {name="testabms:after_abm"}) + local meta = core.get_meta(pos) meta:set_string("infotext", "ABM testabsm:chance_5 changed this node.") end }) -- ABM chance 20 node -minetest.register_node("testabms:chance_20", { +core.register_node("testabms:chance_20", { description = S("Node for test ABM chance_20"), drawtype = "normal", tiles = { "testabms_wait_node.png" }, @@ -37,19 +37,19 @@ minetest.register_node("testabms:chance_20", { groups = { dig_immediate = 3 }, on_construct = function (pos) - local meta = minetest.get_meta(pos) + local meta = core.get_meta(pos) meta:set_string("infotext", "Waiting for ABM testabms:chance_20") end, }) -minetest.register_abm({ +core.register_abm({ label = "testabms:chance_20", nodenames = "testabms:chance_20", interval = 10, chance = 20, action = function (pos) - minetest.swap_node(pos, {name="testabms:after_abm"}) - local meta = minetest.get_meta(pos) + core.swap_node(pos, {name="testabms:after_abm"}) + local meta = core.get_meta(pos) meta:set_string("infotext", "ABM testabsm:chance_20 changed this node.") end }) diff --git a/games/devtest/mods/testabms/init.lua b/games/devtest/mods/testabms/init.lua index 7830d8436..8bf4975cf 100644 --- a/games/devtest/mods/testabms/init.lua +++ b/games/devtest/mods/testabms/init.lua @@ -1,4 +1,4 @@ -local path = minetest.get_modpath(minetest.get_current_modname()) +local path = core.get_modpath(core.get_current_modname()) dofile(path.."/after_node.lua") dofile(path.."/chances.lua") diff --git a/games/devtest/mods/testabms/intervals.lua b/games/devtest/mods/testabms/intervals.lua index 57b58faa5..928406508 100644 --- a/games/devtest/mods/testabms/intervals.lua +++ b/games/devtest/mods/testabms/intervals.lua @@ -1,9 +1,9 @@ -- test ABMs with different interval -local S = minetest.get_translator("testnodes") +local S = core.get_translator("testnodes") -- ABM inteval 1 node -minetest.register_node("testabms:interval_1", { +core.register_node("testabms:interval_1", { description = S("Node for test ABM interval_1"), drawtype = "normal", tiles = { "testabms_wait_node.png" }, @@ -11,25 +11,25 @@ minetest.register_node("testabms:interval_1", { groups = { dig_immediate = 3 }, on_construct = function (pos) - local meta = minetest.get_meta(pos) + local meta = core.get_meta(pos) meta:set_string("infotext", "Waiting for ABM testabms:interval_1") end, }) -minetest.register_abm({ +core.register_abm({ label = "testabms:interval_1", nodenames = "testabms:interval_1", interval = 1, chance = 1, action = function (pos) - minetest.swap_node(pos, {name="testabms:after_abm"}) - local meta = minetest.get_meta(pos) + core.swap_node(pos, {name="testabms:after_abm"}) + local meta = core.get_meta(pos) meta:set_string("infotext", "ABM testabsm:interval_1 changed this node.") end }) -- ABM interval 60 node -minetest.register_node("testabms:interval_60", { +core.register_node("testabms:interval_60", { description = S("Node for test ABM interval_60"), drawtype = "normal", tiles = { "testabms_wait_node.png" }, @@ -37,19 +37,19 @@ minetest.register_node("testabms:interval_60", { groups = { dig_immediate = 3 }, on_construct = function (pos) - local meta = minetest.get_meta(pos) + local meta = core.get_meta(pos) meta:set_string("infotext", "Waiting for ABM testabms:interval_60") end, }) -minetest.register_abm({ +core.register_abm({ label = "testabms:interval_60", nodenames = "testabms:interval_60", interval = 60, chance = 1, action = function (pos) - minetest.swap_node(pos, {name="testabms:after_abm"}) - local meta = minetest.get_meta(pos) + core.swap_node(pos, {name="testabms:after_abm"}) + local meta = core.get_meta(pos) meta:set_string("infotext", "ABM testabsm:interval_60 changed this node.") end }) diff --git a/games/devtest/mods/testabms/min_max.lua b/games/devtest/mods/testabms/min_max.lua index 62f1ccd53..b5df4e40e 100644 --- a/games/devtest/mods/testabms/min_max.lua +++ b/games/devtest/mods/testabms/min_max.lua @@ -1,9 +1,9 @@ -- test ABMs with min_y and max_y -local S = minetest.get_translator("testnodes") +local S = core.get_translator("testnodes") -- ABM min_y node -minetest.register_node("testabms:min_y", { +core.register_node("testabms:min_y", { description = S("Node for test ABM min_y."), drawtype = "normal", tiles = { "testabms_wait_node.png" }, @@ -11,26 +11,26 @@ minetest.register_node("testabms:min_y", { groups = { dig_immediate = 3 }, on_construct = function (pos) - local meta = minetest.get_meta(pos) + local meta = core.get_meta(pos) meta:set_string("infotext", "Waiting for ABM testabms:min_y at y "..pos.y.." with min_y = 0") end, }) -minetest.register_abm({ +core.register_abm({ label = "testabms:min_y", nodenames = "testabms:min_y", interval = 10, chance = 1, min_y = 0, action = function (pos) - minetest.swap_node(pos, {name="testabms:after_abm"}) - local meta = minetest.get_meta(pos) + core.swap_node(pos, {name="testabms:after_abm"}) + local meta = core.get_meta(pos) meta:set_string("infotext", "ABM testabsm:min_y changed this node.") end }) -- ABM max_y node -minetest.register_node("testabms:max_y", { +core.register_node("testabms:max_y", { description = S("Node for test ABM max_y."), drawtype = "normal", tiles = { "testabms_wait_node.png" }, @@ -38,20 +38,20 @@ minetest.register_node("testabms:max_y", { groups = { dig_immediate = 3 }, on_construct = function (pos) - local meta = minetest.get_meta(pos) + local meta = core.get_meta(pos) meta:set_string("infotext", "Waiting for ABM testabms:max_y at y "..pos.y.." with max_y = 0") end, }) -minetest.register_abm({ +core.register_abm({ label = "testabms:max_y", nodenames = "testabms:max_y", interval = 10, chance = 1, max_y = 0, action = function (pos) - minetest.swap_node(pos, {name="testabms:after_abm"}) - local meta = minetest.get_meta(pos) + core.swap_node(pos, {name="testabms:after_abm"}) + local meta = core.get_meta(pos) meta:set_string("infotext", "ABM testabsm:max_y changed this node.") end }) diff --git a/games/devtest/mods/testabms/neighbors.lua b/games/devtest/mods/testabms/neighbors.lua index 42ce47dff..0ce21c23c 100644 --- a/games/devtest/mods/testabms/neighbors.lua +++ b/games/devtest/mods/testabms/neighbors.lua @@ -1,9 +1,9 @@ -- test ABMs with neighbor and without_neighbor -local S = minetest.get_translator("testnodes") +local S = core.get_translator("testnodes") -- ABM required neighbor -minetest.register_node("testabms:required_neighbor", { +core.register_node("testabms:required_neighbor", { description = S("Node for test ABM required_neighbor.") .. "\n" .. S("Sensitive neighbor node is testnodes:normal."), drawtype = "normal", @@ -12,29 +12,29 @@ minetest.register_node("testabms:required_neighbor", { groups = { dig_immediate = 3 }, on_construct = function (pos) - local meta = minetest.get_meta(pos) + local meta = core.get_meta(pos) meta:set_string("infotext", "Waiting for ABM testabms:required_neighbor " .. "(normal drawtype testnode sensitive)") end, }) -minetest.register_abm({ +core.register_abm({ label = "testabms:required_neighbor", nodenames = "testabms:required_neighbor", neighbors = {"testnodes:normal"}, interval = 1, chance = 1, action = function (pos) - minetest.swap_node(pos, {name="testabms:after_abm"}) - local meta = minetest.get_meta(pos) + core.swap_node(pos, {name="testabms:after_abm"}) + local meta = core.get_meta(pos) meta:set_string("infotext", "ABM testabsm:required_neighbor changed this node.") end }) -- ABM missing neighbor node -minetest.register_node("testabms:missing_neighbor", { +core.register_node("testabms:missing_neighbor", { description = S("Node for test ABM missing_neighbor.") .. "\n" .. S("Sensitive neighbor node is testnodes:normal."), drawtype = "normal", @@ -43,29 +43,29 @@ minetest.register_node("testabms:missing_neighbor", { groups = { dig_immediate = 3 }, on_construct = function (pos) - local meta = minetest.get_meta(pos) + local meta = core.get_meta(pos) meta:set_string("infotext", "Waiting for ABM testabms:missing_neighbor" .. " (normal drawtype testnode sensitive)") end, }) -minetest.register_abm({ +core.register_abm({ label = "testabms:missing_neighbor", nodenames = "testabms:missing_neighbor", without_neighbors = {"testnodes:normal"}, interval = 1, chance = 1, action = function (pos) - minetest.swap_node(pos, {name="testabms:after_abm"}) - local meta = minetest.get_meta(pos) + core.swap_node(pos, {name="testabms:after_abm"}) + local meta = core.get_meta(pos) meta:set_string("infotext", "ABM testabsm:missing_neighbor changed this node.") end }) -- ABM required and missing neighbor node -minetest.register_node("testabms:required_missing_neighbor", { +core.register_node("testabms:required_missing_neighbor", { description = S("Node for test ABM required_missing_neighbor.") .. "\n" .. S("Sensitive neighbor nodes are testnodes:normal and testnodes:glasslike."), drawtype = "normal", @@ -74,7 +74,7 @@ minetest.register_node("testabms:required_missing_neighbor", { groups = { dig_immediate = 3 }, on_construct = function (pos) - local meta = minetest.get_meta(pos) + local meta = core.get_meta(pos) meta:set_string("infotext", "Waiting for ABM testabms:required_missing_neighbor" .. " (wint normal drawtype testnode and no glasslike" @@ -82,7 +82,7 @@ minetest.register_node("testabms:required_missing_neighbor", { end, }) -minetest.register_abm({ +core.register_abm({ label = "testabms:required_missing_neighbor", nodenames = "testabms:required_missing_neighbor", neighbors = {"testnodes:normal"}, @@ -90,8 +90,8 @@ minetest.register_abm({ interval = 1, chance = 1, action = function (pos) - minetest.swap_node(pos, {name="testabms:after_abm"}) - local meta = minetest.get_meta(pos) + core.swap_node(pos, {name="testabms:after_abm"}) + local meta = core.get_meta(pos) meta:set_string("infotext", "ABM testabsm:required_missing_neighbor changed this node.") end diff --git a/games/devtest/mods/testentities/armor.lua b/games/devtest/mods/testentities/armor.lua index 415e5bd19..95351ab01 100644 --- a/games/devtest/mods/testentities/armor.lua +++ b/games/devtest/mods/testentities/armor.lua @@ -18,7 +18,7 @@ local phasearmor = { } local max_phase = 12 -minetest.register_entity("testentities:armorball", { +core.register_entity("testentities:armorball", { initial_properties = { hp_max = 20, physical = false, @@ -33,7 +33,7 @@ minetest.register_entity("testentities:armorball", { _phase = 7, on_activate = function(self, staticdata) - minetest.log("action", "[testentities] armorball.on_activate") + core.log("action", "[testentities] armorball.on_activate") self.object:set_armor_groups(phasearmor[self._phase]) self.object:set_sprite({x=0, y=self._phase}) end, @@ -56,6 +56,6 @@ minetest.register_entity("testentities:armorball", { if not name then return end - minetest.chat_send_player(name, "time_from_last_punch="..string.format("%.3f", time_from_last_punch).."; damage="..tostring(damage)) + core.chat_send_player(name, "time_from_last_punch="..string.format("%.3f", time_from_last_punch).."; damage="..tostring(damage)) end, }) diff --git a/games/devtest/mods/testentities/init.lua b/games/devtest/mods/testentities/init.lua index 659febe20..4ad855702 100644 --- a/games/devtest/mods/testentities/init.lua +++ b/games/devtest/mods/testentities/init.lua @@ -1,5 +1,5 @@ -dofile(minetest.get_modpath("testentities").."/visuals.lua") -dofile(minetest.get_modpath("testentities").."/observers.lua") -dofile(minetest.get_modpath("testentities").."/selectionbox.lua") -dofile(minetest.get_modpath("testentities").."/armor.lua") -dofile(minetest.get_modpath("testentities").."/pointable.lua") +dofile(core.get_modpath("testentities").."/visuals.lua") +dofile(core.get_modpath("testentities").."/observers.lua") +dofile(core.get_modpath("testentities").."/selectionbox.lua") +dofile(core.get_modpath("testentities").."/armor.lua") +dofile(core.get_modpath("testentities").."/pointable.lua") diff --git a/games/devtest/mods/testentities/observers.lua b/games/devtest/mods/testentities/observers.lua index 6dbbeba42..c7e95dfbb 100644 --- a/games/devtest/mods/testentities/observers.lua +++ b/games/devtest/mods/testentities/observers.lua @@ -1,13 +1,13 @@ local function player_names_excluding(exclude_player_name) local player_names = {} - for _, player in ipairs(minetest.get_connected_players()) do + for _, player in ipairs(core.get_connected_players()) do player_names[player:get_player_name()] = true end player_names[exclude_player_name] = nil return player_names end -minetest.register_entity("testentities:observable", { +core.register_entity("testentities:observable", { initial_properties = { visual = "sprite", textures = { "testentities_sprite.png" }, diff --git a/games/devtest/mods/testentities/pointable.lua b/games/devtest/mods/testentities/pointable.lua index be7ce4ba8..e23dcc5ff 100644 --- a/games/devtest/mods/testentities/pointable.lua +++ b/games/devtest/mods/testentities/pointable.lua @@ -3,7 +3,7 @@ -- Register wrapper for compactness local function register_pointable_testentity(name, pointable) local texture = "testnodes_"..name..".png" - minetest.register_entity("testentities:"..name, { + core.register_entity("testentities:"..name, { initial_properties = { visual = "cube", visual_size = {x = 0.6, y = 0.6, z = 0.6}, diff --git a/games/devtest/mods/testentities/selectionbox.lua b/games/devtest/mods/testentities/selectionbox.lua index a455fd459..8885a2a95 100644 --- a/games/devtest/mods/testentities/selectionbox.lua +++ b/games/devtest/mods/testentities/selectionbox.lua @@ -12,7 +12,7 @@ end local active_selectionbox_entities = 0 -- count active entities -minetest.register_entity("testentities:selectionbox", { +core.register_entity("testentities:selectionbox", { initial_properties = { visual = "cube", infotext = "Punch to randomize rotation, rightclick to toggle rotation" @@ -45,16 +45,16 @@ minetest.register_entity("testentities:selectionbox", { }) local hud_ids = {} -minetest.register_globalstep(function() +core.register_globalstep(function() if active_selectionbox_entities == 0 then return end - for _, player in pairs(minetest.get_connected_players()) do + for _, player in pairs(core.get_connected_players()) do local offset = player:get_eye_offset() offset.y = offset.y + player:get_properties().eye_height local pos1 = vector.add(player:get_pos(), offset) - local raycast = minetest.raycast(pos1, vector.add(pos1, vector.multiply(player:get_look_dir(), 10)), true, false) + local raycast = core.raycast(pos1, vector.add(pos1, vector.multiply(player:get_look_dir(), 10)), true, false) local pointed_thing = raycast() if pointed_thing.ref == player then pointed_thing = raycast() @@ -73,13 +73,13 @@ minetest.register_globalstep(function() alignment = {x=0, y=0}, }) local shade = math.random(0, 0xFF) - minetest.add_particle({ + core.add_particle({ -- Random shade of red for the intersection point texture = color(0x10000 * shade), pos = pointed_thing.intersection_point, size = 0.1 }) - minetest.add_particle({ + core.add_particle({ -- Same shade of green for the corresponding intersection normal texture = color(0x100 * shade), pos = vector.add(pointed_thing.intersection_point, pointed_thing.intersection_normal * 0.1), diff --git a/games/devtest/mods/testentities/visuals.lua b/games/devtest/mods/testentities/visuals.lua index 8e26a883e..b61b5e819 100644 --- a/games/devtest/mods/testentities/visuals.lua +++ b/games/devtest/mods/testentities/visuals.lua @@ -1,13 +1,13 @@ -- Minimal test entities to test visuals -minetest.register_entity("testentities:sprite", { +core.register_entity("testentities:sprite", { initial_properties = { visual = "sprite", textures = { "testentities_sprite.png" }, }, }) -minetest.register_entity("testentities:upright_sprite", { +core.register_entity("testentities:upright_sprite", { initial_properties = { visual = "upright_sprite", textures = { @@ -17,7 +17,7 @@ minetest.register_entity("testentities:upright_sprite", { }, }) -minetest.register_entity("testentities:cube", { +core.register_entity("testentities:cube", { initial_properties = { visual = "cube", textures = { @@ -31,21 +31,21 @@ minetest.register_entity("testentities:cube", { }, }) -minetest.register_entity("testentities:item", { +core.register_entity("testentities:item", { initial_properties = { visual = "item", wield_item = "testnodes:normal", }, }) -minetest.register_entity("testentities:wielditem", { +core.register_entity("testentities:wielditem", { initial_properties = { visual = "wielditem", wield_item = "testnodes:normal", }, }) -minetest.register_entity("testentities:mesh", { +core.register_entity("testentities:mesh", { initial_properties = { visual = "mesh", mesh = "testnodes_pyramid.obj", @@ -55,7 +55,7 @@ minetest.register_entity("testentities:mesh", { }, }) -minetest.register_entity("testentities:mesh_unshaded", { +core.register_entity("testentities:mesh_unshaded", { initial_properties = { visual = "mesh", mesh = "testnodes_pyramid.obj", @@ -66,7 +66,7 @@ minetest.register_entity("testentities:mesh_unshaded", { }, }) -minetest.register_entity("testentities:sam", { +core.register_entity("testentities:sam", { initial_properties = { visual = "mesh", mesh = "testentities_sam.b3d", @@ -82,7 +82,7 @@ minetest.register_entity("testentities:sam", { -- Advanced visual tests -- An entity for testing animated and yaw-modulated sprites -minetest.register_entity("testentities:yawsprite", { +core.register_entity("testentities:yawsprite", { initial_properties = { selectionbox = {-0.3, -0.5, -0.3, 0.3, 0.3, 0.3}, visual = "sprite", @@ -97,7 +97,7 @@ minetest.register_entity("testentities:yawsprite", { }) -- An entity for testing animated upright sprites -minetest.register_entity("testentities:upright_animated", { +core.register_entity("testentities:upright_animated", { initial_properties = { visual = "upright_sprite", textures = {"testnodes_anim.png"}, @@ -108,7 +108,7 @@ minetest.register_entity("testentities:upright_animated", { end, }) -minetest.register_entity("testentities:nametag", { +core.register_entity("testentities:nametag", { initial_properties = { visual = "sprite", textures = { "testentities_sprite.png" }, @@ -116,7 +116,7 @@ minetest.register_entity("testentities:nametag", { on_activate = function(self, staticdata) if staticdata ~= "" then - local data = minetest.deserialize(staticdata) + local data = core.deserialize(staticdata) self.color = data.color self.bgcolor = data.bgcolor else @@ -145,6 +145,6 @@ minetest.register_entity("testentities:nametag", { end, get_staticdata = function(self) - return minetest.serialize({ color = self.color, bgcolor = self.bgcolor }) + return core.serialize({ color = self.color, bgcolor = self.bgcolor }) end, }) diff --git a/games/devtest/mods/testfood/init.lua b/games/devtest/mods/testfood/init.lua index a8d93bb5d..0a264a3c5 100644 --- a/games/devtest/mods/testfood/init.lua +++ b/games/devtest/mods/testfood/init.lua @@ -1,35 +1,35 @@ -local S = minetest.get_translator("testfood") +local S = core.get_translator("testfood") -minetest.register_craftitem("testfood:good1", { +core.register_craftitem("testfood:good1", { description = S("Good Food (+1)").."\n".. S("Punch: Eat"), inventory_image = "testfood_good.png", - on_use = minetest.item_eat(1), + on_use = core.item_eat(1), }) -minetest.register_craftitem("testfood:good5", { +core.register_craftitem("testfood:good5", { description = S("Good Food (+5)").."\n".. S("Punch: Eat"), inventory_image = "testfood_good2.png", - on_use = minetest.item_eat(5), + on_use = core.item_eat(5), }) -minetest.register_craftitem("testfood:bad1", { +core.register_craftitem("testfood:bad1", { description = S("Bad Food (-1)").."\n".. S("Punch: Eat"), inventory_image = "testfood_bad.png", - on_use = minetest.item_eat(-1), + on_use = core.item_eat(-1), }) -minetest.register_craftitem("testfood:bad5", { +core.register_craftitem("testfood:bad5", { description = S("Bad Food (-5)").."\n".. S("Punch: Eat"), inventory_image = "testfood_bad2.png", - on_use = minetest.item_eat(-5), + on_use = core.item_eat(-5), }) -minetest.register_craftitem("testfood:replace1", { +core.register_craftitem("testfood:replace1", { description = S("Replacing Food (+1)").."\n".. S("Punch: Eat and replace with 'Good Food (+1)'"), inventory_image = "testfood_replace.png", - on_use = minetest.item_eat(1, "testfood:good1"), + on_use = core.item_eat(1, "testfood:good1"), }) diff --git a/games/devtest/mods/testformspec/callbacks.lua b/games/devtest/mods/testformspec/callbacks.lua index 559380580..a4df2321a 100644 --- a/games/devtest/mods/testformspec/callbacks.lua +++ b/games/devtest/mods/testformspec/callbacks.lua @@ -6,30 +6,30 @@ local out = function(player, formname, fields, number) snum = " "..number end local msg = "Formspec callback"..snum..": player="..player:get_player_name()..", formname=\""..tostring(formname).."\", fields="..dump(fields) - minetest.chat_send_player(player:get_player_name(), msg) - minetest.log("action", msg) + core.chat_send_player(player:get_player_name(), msg) + core.log("action", msg) end -minetest.register_on_player_receive_fields(function(player, formname, fields) +core.register_on_player_receive_fields(function(player, formname, fields) if callback_test == 1 then out(player, formname, fields) elseif callback_test == 2 then out(player, formname, fields, 1) end end) -minetest.register_on_player_receive_fields(function(player, formname, fields) +core.register_on_player_receive_fields(function(player, formname, fields) if callback_test == 2 then out(player, formname, fields, 2) return true -- Disable the first callback end end) -minetest.register_on_player_receive_fields(function(player, formname, fields) +core.register_on_player_receive_fields(function(player, formname, fields) if callback_test == 2 then out(player, formname, fields, 3) end end) -minetest.register_chatcommand("test_formspec_callbacks", { +core.register_chatcommand("test_formspec_callbacks", { params = "[ 0 | 1 | 2 ]", description = "Test: Change formspec callbacks testing mode", func = function(name, param) @@ -40,12 +40,12 @@ minetest.register_chatcommand("test_formspec_callbacks", { callback_test = mode end if callback_test == 1 then - minetest.chat_send_player(name, "Formspec callback test mode 1 enabled: Logging only") + core.chat_send_player(name, "Formspec callback test mode 1 enabled: Logging only") elseif callback_test == 2 then - minetest.chat_send_player(name, "Formspec callback test mode 2 enabled: Three callbacks, disable pre-registered callbacks") + core.chat_send_player(name, "Formspec callback test mode 2 enabled: Three callbacks, disable pre-registered callbacks") else callback_test = 0 - minetest.chat_send_player(name, "Formspec callback test disabled!") + core.chat_send_player(name, "Formspec callback test disabled!") end end }) diff --git a/games/devtest/mods/testformspec/dummy_items.lua b/games/devtest/mods/testformspec/dummy_items.lua index 2037ae9cf..50fb9898c 100644 --- a/games/devtest/mods/testformspec/dummy_items.lua +++ b/games/devtest/mods/testformspec/dummy_items.lua @@ -1,13 +1,13 @@ -- This code adds dummy items that are supposed to be used in formspecs -- for testing item_image formspec elements. -minetest.register_node("testformspec:node", { +core.register_node("testformspec:node", { description = "Formspec Test Node", tiles = { "testformspec_node.png" }, groups = { dig_immediate = 3, dummy = 1 }, }) -minetest.register_craftitem("testformspec:item", { +core.register_craftitem("testformspec:item", { description = "Formspec Test Item", inventory_image = "testformspec_item.png", groups = { dummy = 1 }, diff --git a/games/devtest/mods/testformspec/formspec.lua b/games/devtest/mods/testformspec/formspec.lua index f8f17798b..29014f1f2 100644 --- a/games/devtest/mods/testformspec/formspec.lua +++ b/games/devtest/mods/testformspec/formspec.lua @@ -1,7 +1,7 @@ -local color = minetest.colorize +local color = core.colorize -- \208\176 is a cyrillic small a -local unsafe_url = minetest.formspec_escape("https://u:p@wikipedi\208\176.org:1233/heIIoll?a=b#c") +local unsafe_url = core.formspec_escape("https://u:p@wikipedi\208\176.org:1233/heIIoll?a=b#c") local clip_fs = [[ style_type[label,button,image_button,item_image_button, @@ -178,8 +178,8 @@ This is a test of the global tag. The parameters are: background=gray margin=20 valign=bottom halign=right color=pink hovercolor=purple size=12 font=mono action]] -local hypertext_fs = "hypertext[0,0;11,9;hypertext;"..minetest.formspec_escape(hypertext_basic).."]".. - "hypertext[0,9.5;11,2.5;hypertext;"..minetest.formspec_escape(hypertext_global).."]" +local hypertext_fs = "hypertext[0,0;11,9;hypertext;"..core.formspec_escape(hypertext_basic).."]".. + "hypertext[0,9.5;11,2.5;hypertext;"..core.formspec_escape(hypertext_global).."]" local style_fs = [[ style[one_btn1;bgcolor=red;textcolor=yellow;bgcolor_hovered=orange; @@ -255,11 +255,11 @@ local style_fs = [[ style[one_f3;textcolor=yellow] textarea[0,7.025;2.5,0.8;one_f3;Label;]] .. - minetest.formspec_escape("Yellow Text\nLine two") .. [[ ] + core.formspec_escape("Yellow Text\nLine two") .. [[ ] style[one_f4;border=false;textcolor=cyan] textarea[0,8.324999999999999;2.5,0.8;one_f4;Label;]] .. - minetest.formspec_escape("Borderless Cyan Text\nLine two") .. [[ ] + core.formspec_escape("Borderless Cyan Text\nLine two") .. [[ ] container_end[] ]] @@ -529,10 +529,10 @@ local function show_test_formspec(pname) local fs = page .. "tabheader[0,0;11,0.65;maintabs;Real Coord,Styles,Noclip,Table,Hypertext,Tabs,Invs,Window,Anim,Model,ScrollC,Sound,Background,Unsized;" .. page_id .. ";false;false]" - minetest.show_formspec(pname, "testformspec:formspec", fs) + core.show_formspec(pname, "testformspec:formspec", fs) end -minetest.register_on_player_receive_fields(function(player, formname, fields) +core.register_on_player_receive_fields(function(player, formname, fields) if formname ~= "testformspec:formspec" then return false end @@ -544,15 +544,15 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end if fields.ani_img_1 and fields.ani_btn_1 then - minetest.chat_send_player(player:get_player_name(), "ani_img_1 = " .. tostring(fields.ani_img_1)) + core.chat_send_player(player:get_player_name(), "ani_img_1 = " .. tostring(fields.ani_img_1)) return true elseif fields.ani_img_2 and fields.ani_btn_2 then - minetest.chat_send_player(player:get_player_name(), "ani_img_2 = " .. tostring(fields.ani_img_2)) + core.chat_send_player(player:get_player_name(), "ani_img_2 = " .. tostring(fields.ani_img_2)) return true end if fields.hypertext then - minetest.chat_send_player(player:get_player_name(), "Hypertext action received: " .. tostring(fields.hypertext)) + core.chat_send_player(player:get_player_name(), "Hypertext action received: " .. tostring(fields.hypertext)) return true end @@ -577,11 +577,11 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end end) -minetest.register_chatcommand("test_formspec", { +core.register_chatcommand("test_formspec", { params = "", description = "Open the test formspec", func = function(name) - if not minetest.get_player_by_name(name) then + if not core.get_player_by_name(name) then return false, "You need to be online!" end diff --git a/games/devtest/mods/testformspec/init.lua b/games/devtest/mods/testformspec/init.lua index 23b565f08..ef1a8412f 100644 --- a/games/devtest/mods/testformspec/init.lua +++ b/games/devtest/mods/testformspec/init.lua @@ -1,3 +1,3 @@ -dofile(minetest.get_modpath("testformspec").."/dummy_items.lua") -dofile(minetest.get_modpath("testformspec").."/formspec.lua") -dofile(minetest.get_modpath("testformspec").."/callbacks.lua") +dofile(core.get_modpath("testformspec").."/dummy_items.lua") +dofile(core.get_modpath("testformspec").."/formspec.lua") +dofile(core.get_modpath("testformspec").."/callbacks.lua") diff --git a/games/devtest/mods/testfullscreenfs/init.lua b/games/devtest/mods/testfullscreenfs/init.lua index 7abc7f817..1b840332e 100644 --- a/games/devtest/mods/testfullscreenfs/init.lua +++ b/games/devtest/mods/testfullscreenfs/init.lua @@ -34,14 +34,14 @@ local function show_fullscreen_fs(name, window) ("label[%f,%f;%s]"):format(size.x / 2, size.y / 2 + 1, touch_text), } - minetest.show_formspec(name, "testfullscreenfs:fs", table.concat(fs)) - minetest.chat_send_player(name, ("Calculated size of %f, %f"):format(size.x, size.y)) + core.show_formspec(name, "testfullscreenfs:fs", table.concat(fs)) + core.chat_send_player(name, ("Calculated size of %f, %f"):format(size.x, size.y)) last_window_info[name] = window end -minetest.register_chatcommand("testfullscreenfs", { +core.register_chatcommand("testfullscreenfs", { func = function(name) - local window = minetest.get_player_window_information(name) + local window = core.get_player_window_information(name) if not window then return false, "Unable to get window info" end @@ -51,21 +51,21 @@ minetest.register_chatcommand("testfullscreenfs", { end, }) -minetest.register_globalstep(function() +core.register_globalstep(function() for name, last_window in pairs(last_window_info) do - local window = minetest.get_player_window_information(name) + local window = core.get_player_window_information(name) if window and not window_info_equal(last_window, window) then show_fullscreen_fs(name, window) end end end) -minetest.register_on_player_receive_fields(function(player, formname, fields) +core.register_on_player_receive_fields(function(player, formname, fields) if formname == "testfullscreenfs:fs" and fields.quit then last_window_info[player:get_player_name()] = nil end end) -minetest.register_on_leaveplayer(function(player) +core.register_on_leaveplayer(function(player) last_window_info[player:get_player_name()] = nil end) diff --git a/games/devtest/mods/testfullscreenfs/mod.conf b/games/devtest/mods/testfullscreenfs/mod.conf index 84dc87e95..68e7a10b0 100644 --- a/games/devtest/mods/testfullscreenfs/mod.conf +++ b/games/devtest/mods/testfullscreenfs/mod.conf @@ -1,2 +1,2 @@ name = testfullscreenfs -description = Test mod to use minetest.get_player_window_information() +description = Test mod to use core.get_player_window_information() diff --git a/games/devtest/mods/testhud/init.lua b/games/devtest/mods/testhud/init.lua index 4afece209..0512345f7 100644 --- a/games/devtest/mods/testhud/init.lua +++ b/games/devtest/mods/testhud/init.lua @@ -8,8 +8,8 @@ local font_states = { {4, "Monospace font"}, {5, "Bold and monospace font"}, {7, "ZOMG all the font styles"}, - {7, "Colors test! " .. minetest.colorize("green", "Green") .. - minetest.colorize("red", "\nRed") .. " END"}, + {7, "Colors test! " .. core.colorize("green", "Green") .. + core.colorize("red", "\nRed") .. " END"}, } @@ -33,13 +33,13 @@ end local font_etime = 0 local font_state = 0 -minetest.register_globalstep(function(dtime) +core.register_globalstep(function(dtime) font_etime = font_etime + dtime if font_etime < 1 then return end font_etime = 0 - for _, player in ipairs(minetest.get_connected_players()) do + for _, player in ipairs(core.get_connected_players()) do local huds = player_font_huds[player:get_player_name()] if huds then for i, hud_id in ipairs(huds) do @@ -52,11 +52,11 @@ minetest.register_globalstep(function(dtime) font_state = font_state + 1 end) -minetest.register_chatcommand("hudfonts", { +core.register_chatcommand("hudfonts", { params = "[]", description = "Show/Hide some text on the HUD with various font options", func = function(name, param) - local player = minetest.get_player_by_name(name) + local player = core.get_player_by_name(name) local param = tonumber(param) or 0 param = math.min(math.max(param, 1), #font_states) if player_font_huds[name] == nil then @@ -64,14 +64,14 @@ minetest.register_chatcommand("hudfonts", { for i = 1, param do table.insert(player_font_huds[name], add_font_hud(player, i)) end - minetest.chat_send_player(name, ("%d text HUD element(s) added."):format(param)) + core.chat_send_player(name, ("%d text HUD element(s) added."):format(param)) else local huds = player_font_huds[name] if huds then for _, hud_id in ipairs(huds) do player:hud_remove(hud_id) end - minetest.chat_send_player(name, "All text HUD elements removed.") + core.chat_send_player(name, "All text HUD elements removed.") end player_font_huds[name] = nil end @@ -82,11 +82,11 @@ minetest.register_chatcommand("hudfonts", { -- Testing waypoint capabilities local player_waypoints = {} -minetest.register_chatcommand("hudwaypoints", { +core.register_chatcommand("hudwaypoints", { params = "[ add | add_change | remove ]", description = "Create HUD waypoints at your position for testing (add: Add waypoints and change them after 0.5s (default). add_change: Add waypoints and change immediately. remove: Remove all waypoints)", func = function(name, params) - local player = minetest.get_player_by_name(name) + local player = core.get_player_by_name(name) if not player then return false, "No player." end @@ -142,13 +142,13 @@ minetest.register_chatcommand("hudwaypoints", { if hidden_distance then chplayer:hud_change(hidden_distance, "number", 0x0000FF) end - minetest.chat_send_player(chplayer:get_player_name(), "Waypoints changed.") + core.chat_send_player(chplayer:get_player_name(), "Waypoints changed.") end if params == "add_change" then -- change immediate change(player) else - minetest.after(0.5, change, player) + core.after(0.5, change, player) end local image_waypoint = player:hud_add { type = "image_waypoint", @@ -182,15 +182,15 @@ minetest.register_chatcommand("hudwaypoints", { end }) -minetest.register_on_joinplayer(function(player) +core.register_on_joinplayer(function(player) player:set_properties({zoom_fov = 15}) end) -minetest.register_chatcommand("zoomfov", { +core.register_chatcommand("zoomfov", { params = "[]", description = "Set or display your zoom_fov", func = function(name, param) - local player = minetest.get_player_by_name(name) + local player = core.get_player_by_name(name) if not player then return false, "No player." end @@ -241,12 +241,12 @@ local hud_hotbar_defs = { local player_hud_hotbars= {} -minetest.register_chatcommand("hudhotbars", { +core.register_chatcommand("hudhotbars", { description = "Shows some test Lua HUD elements of type hotbar. " .. "(add: Adds elements (default). remove: Removes elements)", params = "[ add | remove ]", func = function(name, params) - local player = minetest.get_player_by_name(name) + local player = core.get_player_by_name(name) if not player then return false, "No player." end @@ -310,11 +310,11 @@ local hud_inventory_defs = { } local player_hud_inventories= {} -minetest.register_chatcommand("hudinventories", { +core.register_chatcommand("hudinventories", { description = "Shows some test Lua HUD elements of type inventory. (add: Adds elements (default). remove: Removes elements)", params = "[ add | remove ]", func = function(name, params) - local player = minetest.get_player_by_name(name) + local player = core.get_player_by_name(name) if not player then return false, "No player." end @@ -341,7 +341,7 @@ minetest.register_chatcommand("hudinventories", { }) -minetest.register_on_leaveplayer(function(player) +core.register_on_leaveplayer(function(player) local playername = player:get_player_name() player_font_huds[playername] = nil player_waypoints[playername] = nil @@ -349,10 +349,10 @@ minetest.register_on_leaveplayer(function(player) player_hud_inventories[playername] = nil end) -minetest.register_chatcommand("hudprint", { +core.register_chatcommand("hudprint", { description = "Writes all used Lua HUD elements into chat.", func = function(name, params) - local player = minetest.get_player_by_name(name) + local player = core.get_player_by_name(name) if not player then return false, "No player." end @@ -372,11 +372,11 @@ minetest.register_chatcommand("hudprint", { local hud_flags = {"hotbar", "healthbar", "crosshair", "wielditem", "breathbar", "minimap", "minimap_radar", "basic_debug", "chat"} -minetest.register_chatcommand("hudtoggleflag", { +core.register_chatcommand("hudtoggleflag", { description = "Toggles a hud flag.", params = "[ ".. table.concat(hud_flags, " | ") .." ]", func = function(name, params) - local player = minetest.get_player_by_name(name) + local player = core.get_player_by_name(name) if not player then return false, "No player." end diff --git a/games/devtest/mods/testitems/init.lua b/games/devtest/mods/testitems/init.lua index bde9cc6d9..12da2ad1c 100644 --- a/games/devtest/mods/testitems/init.lua +++ b/games/devtest/mods/testitems/init.lua @@ -1,4 +1,4 @@ -local S = minetest.get_translator("testitems") +local S = core.get_translator("testitems") -- -- Texture overlays for items @@ -13,7 +13,7 @@ local overlay_on_use = function(itemstack, user, pointed_thing) local color = math.random(0x0, 0xFFFFFF) local colorstr = string.format("#%06x", color) meta:set_string("color", colorstr) - minetest.log("action", "[testitems] Color of "..itemstack:get_name().." changed to "..colorstr) + core.log("action", "[testitems] Color of "..itemstack:get_name().." changed to "..colorstr) return itemstack end -- Place handler to clear item metadata color @@ -23,7 +23,7 @@ local overlay_on_place = function(itemstack, user, pointed_thing) return itemstack end -minetest.register_craftitem("testitems:overlay_meta", { +core.register_craftitem("testitems:overlay_meta", { description = S("Texture Overlay Test Item, Meta Color") .. "\n" .. S("Image must be a square with rainbow cross (inventory and wield)") .. "\n" .. S("Item meta color must only change square color") .. "\n" .. @@ -41,7 +41,7 @@ minetest.register_craftitem("testitems:overlay_meta", { on_secondary_use = overlay_on_place, }) -minetest.register_craftitem("testitems:overlay_global", { +core.register_craftitem("testitems:overlay_global", { description = S("Texture Overlay Test Item, Global Color") .. "\n" .. S("Image must be an orange square with rainbow cross (inventory and wield)"), -- Base texture: A grayscale square (to be colorized) @@ -53,7 +53,7 @@ minetest.register_craftitem("testitems:overlay_global", { color = GLOBAL_COLOR_ARG, }) -minetest.register_craftitem("testitems:image_meta", { +core.register_craftitem("testitems:image_meta", { description = S("Image Override Meta Test Item"), inventory_image = "default_apple.png", wield_image = "basetools_icesword.png", @@ -63,7 +63,7 @@ minetest.register_craftitem("testitems:image_meta", { local state = meta:get_int("state") state = (state + 1) % 5 meta:set_int("state", state) - minetest.chat_send_player(player:get_player_name(), "State " .. state) + core.chat_send_player(player:get_player_name(), "State " .. state) if state == 0 then meta:set_string("inventory_image", "") @@ -91,7 +91,7 @@ minetest.register_craftitem("testitems:image_meta", { end, }) -minetest.register_craftitem("testitems:telescope_stick", { +core.register_craftitem("testitems:telescope_stick", { description = S("Telescope Stick (Increases range on use.)"), inventory_image = "testitems_telescope_stick.png", on_use = function(itemstack, player) @@ -101,7 +101,7 @@ minetest.register_craftitem("testitems:telescope_stick", { range = 0 end meta:set_float("range", range) - minetest.chat_send_player(player:get_player_name(), "Telescope Stick range set to "..range) + core.chat_send_player(player:get_player_name(), "Telescope Stick range set to "..range) return itemstack end, }) diff --git a/games/devtest/mods/testnodes/commands.lua b/games/devtest/mods/testnodes/commands.lua index b04a2c16d..946df5030 100644 --- a/games/devtest/mods/testnodes/commands.lua +++ b/games/devtest/mods/testnodes/commands.lua @@ -25,12 +25,12 @@ local function place_nodes(param) local pos = param.pos local start_pos = param.start_pos table.sort(nodes) - minetest.chat_send_player(name, "Placing nodes …") + core.chat_send_player(name, "Placing nodes …") local nodes_placed = 0 local aborted = false for n=1, #nodes do local itemstring = nodes[n] - local def = minetest.registered_nodes[itemstring] + local def = core.registered_nodes[itemstring] local p2_max = 0 if param.param ~= "no_param2" then -- Also test the param2 values of the nodes @@ -64,7 +64,7 @@ local function place_nodes(param) ((def.paramtype2 == "colorfacedir" or def.paramtype2 == "colordegrotate") and p2 % 32 > 23)) then - minetest.set_node(pos, { name = itemstring, param2 = p2 }) + core.set_node(pos, { name = itemstring, param2 = p2 }) nodes_placed = nodes_placed + 1 pos = advance_pos(pos, start_pos) if not pos then @@ -78,9 +78,9 @@ local function place_nodes(param) end end if aborted then - minetest.chat_send_player(name, "Not all nodes could be placed, please move further away from the world boundary. Nodes placed: "..nodes_placed) + core.chat_send_player(name, "Not all nodes could be placed, please move further away from the world boundary. Nodes placed: "..nodes_placed) end - minetest.chat_send_player(name, "Nodes placed: "..nodes_placed..".") + core.chat_send_player(name, "Nodes placed: "..nodes_placed..".") end local function after_emerge(blockpos, action, calls_remaining, param) @@ -89,11 +89,11 @@ local function after_emerge(blockpos, action, calls_remaining, param) end end -minetest.register_chatcommand("test_place_nodes", { +core.register_chatcommand("test_place_nodes", { params = "[ no_param2 ]", description = "Test: Place all nodes (except dummy and callback nodes) and optionally their permissible param2 variants", func = function(name, param) - local player = minetest.get_player_by_name(name) + local player = core.get_player_by_name(name) if not player then return false, "No player." end @@ -112,12 +112,12 @@ minetest.register_chatcommand("test_place_nodes", { local aborted = false local nodes = {} local emerge_estimate = 0 - for itemstring, def in pairs(minetest.registered_nodes) do + for itemstring, def in pairs(core.registered_nodes) do if itemstring ~= "ignore" and -- Skip callback test and dummy nodes -- to avoid clutter and chat spam - minetest.get_item_group(itemstring, "callback_test") == 0 and - minetest.get_item_group(itemstring, "dummy") == 0 then + core.get_item_group(itemstring, "callback_test") == 0 and + core.get_item_group(itemstring, "dummy") == 0 then table.insert(nodes, itemstring) if def.paramtype2 == 0 then emerge_estimate = emerge_estimate + 1 @@ -130,7 +130,7 @@ minetest.register_chatcommand("test_place_nodes", { -- Note we will emerge much more than we need to (overestimation), -- the estimation code could be improved performance-wise … local length = 16 + math.ceil(emerge_estimate / 24) * 2 - minetest.emerge_area(start_pos, + core.emerge_area(start_pos, { x = start_pos.x + 46, y = start_pos.y, z = start_pos.z + length }, after_emerge, { nodes = nodes, name = name, pos = pos, start_pos = start_pos, param = param }) return true, "Emerging area …" diff --git a/games/devtest/mods/testnodes/drawtypes.lua b/games/devtest/mods/testnodes/drawtypes.lua index 06bafbc24..95dae96dc 100644 --- a/games/devtest/mods/testnodes/drawtypes.lua +++ b/games/devtest/mods/testnodes/drawtypes.lua @@ -13,10 +13,10 @@ unrelated to the drawtype, stuff that is mostly there to make testing this node easier and more convenient. ]] -local S = minetest.get_translator("testnodes") +local S = core.get_translator("testnodes") -- A regular cube -minetest.register_node("testnodes:normal", { +core.register_node("testnodes:normal", { description = S("\"normal\" Drawtype Test Node").."\n".. S("Opaque texture"), drawtype = "normal", @@ -26,7 +26,7 @@ minetest.register_node("testnodes:normal", { }) -- Standard glasslike node -minetest.register_node("testnodes:glasslike", { +core.register_node("testnodes:glasslike", { description = S("\"glasslike\" Drawtype Test Node").."\n".. S("Transparent node with hidden backfaces"), drawtype = "glasslike", @@ -37,7 +37,7 @@ minetest.register_node("testnodes:glasslike", { }) -- Glasslike framed with the two textures (normal and "detail") -minetest.register_node("testnodes:glasslike_framed", { +core.register_node("testnodes:glasslike_framed", { description = S("\"glasslike_framed\" Drawtype Test Node").."\n".. S("Transparent node with hidden backfaces").."\n".. S("Frame connects to neighbors"), @@ -56,7 +56,7 @@ minetest.register_node("testnodes:glasslike_framed", { -- Like the one above, but without the "detail" texture (texture 2). -- This node was added to see how the engine behaves when the "detail" texture -- is missing. -minetest.register_node("testnodes:glasslike_framed_no_detail", { +core.register_node("testnodes:glasslike_framed_no_detail", { description = S("\"glasslike_framed\" Drawtype without Detail Test Node").."\n".. S("Transparent node with hidden backfaces").."\n".. S("Frame connects to neighbors, but the 'detail' tile is not used"), @@ -70,7 +70,7 @@ minetest.register_node("testnodes:glasslike_framed_no_detail", { }) -minetest.register_node("testnodes:glasslike_framed_optional", { +core.register_node("testnodes:glasslike_framed_optional", { description = S("\"glasslike_framed_optional\" Drawtype Test Node").."\n".. S("Transparent node with hidden backfaces").."\n".. S("Frame connects if 'connected_glass' setting is true"), @@ -88,7 +88,7 @@ minetest.register_node("testnodes:glasslike_framed_optional", { -minetest.register_node("testnodes:allfaces", { +core.register_node("testnodes:allfaces", { description = S("\"allfaces\" Drawtype Test Node").."\n".. S("Transparent node with visible internal backfaces"), drawtype = "allfaces", @@ -98,7 +98,7 @@ minetest.register_node("testnodes:allfaces", { groups = { dig_immediate = 3 }, }) -minetest.register_node("testnodes:allfaces_6", { +core.register_node("testnodes:allfaces_6", { description = S("\"allfaces 6 Textures\" Drawtype Test Node").."\n".. S("Transparent node with visible internal backfaces"), drawtype = "allfaces", @@ -121,7 +121,7 @@ local allfaces_optional_tooltip = "".. S("* 'simple': transparent with hidden backfaces").."\n".. S("* 'opaque': opaque") -minetest.register_node("testnodes:allfaces_optional", { +core.register_node("testnodes:allfaces_optional", { description = S("\"allfaces_optional\" Drawtype Test Node").."\n".. allfaces_optional_tooltip, drawtype = "allfaces_optional", @@ -131,7 +131,7 @@ minetest.register_node("testnodes:allfaces_optional", { groups = { dig_immediate = 3 }, }) -minetest.register_node("testnodes:allfaces_optional_waving", { +core.register_node("testnodes:allfaces_optional_waving", { description = S("Waving \"allfaces_optional\" Drawtype Test Node").."\n".. allfaces_optional_tooltip.."\n".. S("Waves if waving leaves are enabled by client"), @@ -143,7 +143,7 @@ minetest.register_node("testnodes:allfaces_optional_waving", { groups = { dig_immediate = 3 }, }) -minetest.register_node("testnodes:firelike", { +core.register_node("testnodes:firelike", { description = S("\"firelike\" Drawtype Test Node").."\n".. S("Changes shape based on neighbors"), drawtype = "firelike", @@ -155,7 +155,7 @@ minetest.register_node("testnodes:firelike", { groups = { dig_immediate = 3 }, }) -minetest.register_node("testnodes:fencelike", { +core.register_node("testnodes:fencelike", { description = S("\"fencelike\" Drawtype Test Node").."\n".. S("Connects to neighbors"), drawtype = "fencelike", @@ -165,7 +165,7 @@ minetest.register_node("testnodes:fencelike", { groups = { dig_immediate = 3 }, }) -minetest.register_node("testnodes:torchlike", { +core.register_node("testnodes:torchlike", { description = S("Floor \"torchlike\" Drawtype Test Node").."\n".. S("Always on floor"), drawtype = "torchlike", @@ -178,7 +178,7 @@ minetest.register_node("testnodes:torchlike", { groups = { dig_immediate = 3 }, }) -minetest.register_node("testnodes:torchlike_wallmounted", { +core.register_node("testnodes:torchlike_wallmounted", { description = S("Wallmounted \"torchlike\" Drawtype Test Node").."\n".. S("param2 = wallmounted rotation (0..7)"), drawtype = "torchlike", @@ -196,7 +196,7 @@ minetest.register_node("testnodes:torchlike_wallmounted", { groups = { dig_immediate = 3 }, }) -minetest.register_node("testnodes:torchlike_wallmounted_rot", { +core.register_node("testnodes:torchlike_wallmounted_rot", { description = S("Wallmounted Rotatable Torchlike Drawtype Test Node"), drawtype = "torchlike", paramtype = "light", @@ -214,7 +214,7 @@ minetest.register_node("testnodes:torchlike_wallmounted_rot", { groups = { dig_immediate = 3 }, }) -minetest.register_node("testnodes:signlike", { +core.register_node("testnodes:signlike", { description = S("Floor \"signlike\" Drawtype Test Node").."\n".. S("Always on floor"), drawtype = "signlike", @@ -226,7 +226,7 @@ minetest.register_node("testnodes:signlike", { groups = { dig_immediate = 3 }, }) -minetest.register_node("testnodes:signlike_wallmounted", { +core.register_node("testnodes:signlike_wallmounted", { description = S("Wallmounted \"signlike\" Drawtype Test Node").."\n".. S("param2 = wallmounted rotation (0..7)"), drawtype = "signlike", @@ -240,7 +240,7 @@ minetest.register_node("testnodes:signlike_wallmounted", { sunlight_propagates = true, }) -minetest.register_node("testnodes:signlike_rot", { +core.register_node("testnodes:signlike_rot", { description = S("Wallmounted Rotatable Signlike Drawtype Test Node"), drawtype = "signlike", paramtype = "light", @@ -256,7 +256,7 @@ minetest.register_node("testnodes:signlike_rot", { -minetest.register_node("testnodes:plantlike", { +core.register_node("testnodes:plantlike", { description = S("\"plantlike\" Drawtype Test Node"), drawtype = "plantlike", paramtype = "light", @@ -268,7 +268,7 @@ minetest.register_node("testnodes:plantlike", { groups = { dig_immediate = 3 }, }) -minetest.register_node("testnodes:plantlike_waving", { +core.register_node("testnodes:plantlike_waving", { description = S("Waving \"plantlike\" Drawtype Test Node").."\n".. S("Waves if waving plants are enabled by client"), drawtype = "plantlike", @@ -282,7 +282,7 @@ minetest.register_node("testnodes:plantlike_waving", { groups = { dig_immediate = 3 }, }) -minetest.register_node("testnodes:plantlike_wallmounted", { +core.register_node("testnodes:plantlike_wallmounted", { description = S("Wallmounted \"plantlike\" Drawtype Test Node").."\n".. S("param2 = wallmounted rotation (0..7)"), drawtype = "plantlike", @@ -300,7 +300,7 @@ minetest.register_node("testnodes:plantlike_wallmounted", { -- param2 will rotate local function rotate_on_rightclick(pos, node, clicker) - local def = minetest.registered_nodes[node.name] + local def = core.registered_nodes[node.name] local aux1 = clicker:get_player_control().aux1 local deg, deg_max @@ -318,12 +318,12 @@ local function rotate_on_rightclick(pos, node, clicker) deg = (deg + (aux1 and 10 or 1)) % deg_max node.param2 = color * color_mult + deg - minetest.swap_node(pos, node) - minetest.chat_send_player(clicker:get_player_name(), + core.swap_node(pos, node) + core.chat_send_player(clicker:get_player_name(), "Rotation is now " .. deg .. " / " .. deg_max) end -minetest.register_node("testnodes:plantlike_degrotate", { +core.register_node("testnodes:plantlike_degrotate", { description = S("Degrotate \"plantlike\" Drawtype Test Node").."\n".. S("param2 = horizontal rotation (0..239)"), drawtype = "plantlike", @@ -338,7 +338,7 @@ minetest.register_node("testnodes:plantlike_degrotate", { groups = { dig_immediate = 3 }, }) -minetest.register_node("testnodes:mesh_degrotate", { +core.register_node("testnodes:mesh_degrotate", { description = S("Degrotate \"mesh\" Drawtype Test Node").."\n".. S("param2 = horizontal rotation (0..239)"), drawtype = "mesh", @@ -353,7 +353,7 @@ minetest.register_node("testnodes:mesh_degrotate", { groups = { dig_immediate = 3 }, }) -minetest.register_node("testnodes:mesh_colordegrotate", { +core.register_node("testnodes:mesh_colordegrotate", { description = S("Colordegrotate \"mesh\" Drawtype Test Node").."\n".. S("param2 = color + horizontal rotation (0..23, 32..55, ...)"), drawtype = "mesh", @@ -371,7 +371,7 @@ minetest.register_node("testnodes:mesh_colordegrotate", { }) -- param2 will change height -minetest.register_node("testnodes:plantlike_leveled", { +core.register_node("testnodes:plantlike_leveled", { description = S("Leveled \"plantlike\" Drawtype Test Node").."\n".. S("param2 = height (0..255)"), drawtype = "plantlike", @@ -390,7 +390,7 @@ minetest.register_node("testnodes:plantlike_leveled", { }) -- param2 changes shape -minetest.register_node("testnodes:plantlike_meshoptions", { +core.register_node("testnodes:plantlike_meshoptions", { description = S("Meshoptions \"plantlike\" Drawtype Test Node").."\n".. S("param2 = plant shape"), drawtype = "plantlike", @@ -403,7 +403,7 @@ minetest.register_node("testnodes:plantlike_meshoptions", { groups = { dig_immediate = 3 }, }) -minetest.register_node("testnodes:plantlike_rooted", { +core.register_node("testnodes:plantlike_rooted", { description = S("\"rooted_plantlike\" Drawtype Test Node"), drawtype = "plantlike_rooted", paramtype = "light", @@ -413,7 +413,7 @@ minetest.register_node("testnodes:plantlike_rooted", { groups = { dig_immediate = 3 }, }) -minetest.register_node("testnodes:plantlike_rooted_wallmounted", { +core.register_node("testnodes:plantlike_rooted_wallmounted", { description = S("Wallmounted \"rooted_plantlike\" Drawtype Test Node").."\n".. S("param2 = wallmounted rotation (0..7)"), drawtype = "plantlike_rooted", @@ -428,7 +428,7 @@ minetest.register_node("testnodes:plantlike_rooted_wallmounted", { groups = { dig_immediate = 3 }, }) -minetest.register_node("testnodes:plantlike_rooted_waving", { +core.register_node("testnodes:plantlike_rooted_waving", { description = S("Waving \"rooted_plantlike\" Drawtype Test Node").."\n".. S("Waves if waving plants are enabled by client"), drawtype = "plantlike_rooted", @@ -445,7 +445,7 @@ minetest.register_node("testnodes:plantlike_rooted_waving", { }) -- param2 changes height -minetest.register_node("testnodes:plantlike_rooted_leveled", { +core.register_node("testnodes:plantlike_rooted_leveled", { description = S("Leveled \"rooted_plantlike\" Drawtype Test Node").."\n".. S("param2 = height (0..255)"), drawtype = "plantlike_rooted", @@ -467,7 +467,7 @@ minetest.register_node("testnodes:plantlike_rooted_leveled", { }) -- param2 changes shape -minetest.register_node("testnodes:plantlike_rooted_meshoptions", { +core.register_node("testnodes:plantlike_rooted_meshoptions", { description = S("Meshoptions \"rooted_plantlike\" Drawtype Test Node").."\n".. S("param2 = plant shape"), drawtype = "plantlike_rooted", @@ -486,7 +486,7 @@ minetest.register_node("testnodes:plantlike_rooted_meshoptions", { }) -- param2 changes rotation -minetest.register_node("testnodes:plantlike_rooted_degrotate", { +core.register_node("testnodes:plantlike_rooted_degrotate", { description = S("Degrotate \"rooted_plantlike\" Drawtype Test Node").."\n".. S("param2 = horizontal rotation (0..239)"), drawtype = "plantlike_rooted", @@ -508,7 +508,7 @@ minetest.register_node("testnodes:plantlike_rooted_degrotate", { -- DRAWTYPE ONLY, NO LIQUID PHYSICS! -- Liquid ranges 0 to 8 for r = 0, 8 do - minetest.register_node("testnodes:liquid_"..r, { + core.register_node("testnodes:liquid_"..r, { description = S("\"liquid\" Drawtype Test Node, Range @1", r).."\n".. S("Drawtype only; all liquid physics are disabled"), drawtype = "liquid", @@ -530,7 +530,7 @@ for r = 0, 8 do liquid_alternative_source = "testnodes:liquid_"..r, groups = { dig_immediate = 3 }, }) - minetest.register_node("testnodes:liquid_flowing_"..r, { + core.register_node("testnodes:liquid_flowing_"..r, { description = S("\"flowingliquid\" Drawtype Test Node, Range @1", r).."\n".. S("Drawtype only; all liquid physics are disabled").."\n".. S("param2 = flowing liquid level"), @@ -558,7 +558,7 @@ for r = 0, 8 do end -- Waving liquid test (drawtype only) -minetest.register_node("testnodes:liquid_waving", { +core.register_node("testnodes:liquid_waving", { description = S("Waving \"liquid\" Drawtype Test Node").."\n".. S("Drawtype only; all liquid physics are disabled").."\n".. S("Waves if waving liquids are enabled by client"), @@ -582,7 +582,7 @@ minetest.register_node("testnodes:liquid_waving", { liquid_alternative_source = "testnodes:liquid_waving", groups = { dig_immediate = 3 }, }) -minetest.register_node("testnodes:liquid_flowing_waving", { +core.register_node("testnodes:liquid_flowing_waving", { description = S("Waving \"flowingliquid\" Drawtype Test Node").."\n".. S("Drawtype only; all liquid physics are disabled").."\n".. S("param2 = flowing liquid level").."\n".. @@ -610,7 +610,7 @@ minetest.register_node("testnodes:liquid_flowing_waving", { }) -- Invisible node -minetest.register_node("testnodes:airlike", { +core.register_node("testnodes:airlike", { description = S("\"airlike\" Drawtype Test Node").."\n".. S("Invisible node").."\n".. S("Inventory/wield image = no_texture_airlike.png"), @@ -626,7 +626,7 @@ minetest.register_node("testnodes:airlike", { }) -- param2 changes liquid height -minetest.register_node("testnodes:glassliquid", { +core.register_node("testnodes:glassliquid", { description = S("\"glasslike_framed\" Drawtype with Liquid Test Node").."\n".. S("param2 = liquid level (0..63)"), drawtype = "glasslike_framed", @@ -661,14 +661,14 @@ for r=1, #rails do local tt = rails[r][3] local raillike_group if id ~= "groupless" then - raillike_group = minetest.raillike_group(id) + raillike_group = core.raillike_group(id) end for c=1, #colors do local color if colors[c] ~= "" then color = colors[c] end - minetest.register_node("testnodes:raillike_"..id..c, { + core.register_node("testnodes:raillike_"..id..c, { description = S("\"raillike\" Drawtype Test Node: @1 @2", id, c).."\n".. tt, drawtype = "raillike", @@ -693,7 +693,7 @@ end -- Add visual_scale variants of previous nodes for half and double size local scale = function(subname, append) local original = "testnodes:"..subname - local def = table.copy(minetest.registered_items[original]) + local def = table.copy(core.registered_items[original]) local orig_desc if append and type(append) == "string" then orig_desc = ItemStack(original):get_short_description() @@ -705,11 +705,11 @@ local scale = function(subname, append) end def.visual_scale = 2.0 def.description = S("Double-sized @1", orig_desc) - minetest.register_node("testnodes:"..subname.."_double", def) - def = table.copy(minetest.registered_items[original]) + core.register_node("testnodes:"..subname.."_double", def) + def = table.copy(core.registered_items[original]) def.visual_scale = 0.5 def.description = S("Half-sized @1", orig_desc) - minetest.register_node("testnodes:"..subname.."_half", def) + core.register_node("testnodes:"..subname.."_half", def) end local allfaces_newsize_tt = "".. diff --git a/games/devtest/mods/testnodes/init.lua b/games/devtest/mods/testnodes/init.lua index 786485936..49a45e08c 100644 --- a/games/devtest/mods/testnodes/init.lua +++ b/games/devtest/mods/testnodes/init.lua @@ -1,4 +1,4 @@ -local path = minetest.get_modpath(minetest.get_current_modname()) +local path = core.get_modpath(core.get_current_modname()) dofile(path.."/drawtypes.lua") dofile(path.."/meshes.lua") diff --git a/games/devtest/mods/testnodes/light.lua b/games/devtest/mods/testnodes/light.lua index 48fb9a893..0f1ccb732 100644 --- a/games/devtest/mods/testnodes/light.lua +++ b/games/devtest/mods/testnodes/light.lua @@ -1,10 +1,10 @@ -- Test Nodes: Light test -local S = minetest.get_translator("testnodes") +local S = core.get_translator("testnodes") -- All possible light levels -for i=1, minetest.LIGHT_MAX do - minetest.register_node("testnodes:light"..string.format("%02d", i), { +for i=1, core.LIGHT_MAX do + core.register_node("testnodes:light"..string.format("%02d", i), { description = S("Light Source (@1)", i), paramtype = "light", light_source = i, @@ -21,7 +21,7 @@ end -- Lets light through, but not sunlight, leading to a -- reduction in light level when light passes through -minetest.register_node("testnodes:sunlight_filter", { +core.register_node("testnodes:sunlight_filter", { description = S("Sunlight Filter") .."\n".. S("Lets light through, but weakens sunlight"), paramtype = "light", @@ -35,7 +35,7 @@ minetest.register_node("testnodes:sunlight_filter", { }) -- Lets light and sunlight through without obstruction -minetest.register_node("testnodes:sunlight_propagator", { +core.register_node("testnodes:sunlight_propagator", { description = S("Sunlight Propagator") .."\n".. S("Lets all light through"), paramtype = "light", diff --git a/games/devtest/mods/testnodes/liquids.lua b/games/devtest/mods/testnodes/liquids.lua index 334b16dff..130b2a7b7 100644 --- a/games/devtest/mods/testnodes/liquids.lua +++ b/games/devtest/mods/testnodes/liquids.lua @@ -7,7 +7,7 @@ for d=0, 8 do else tt_normal = "\n".."Swimmable, spreading, renewable liquid" end - minetest.register_node("testnodes:rliquid_"..d, { + core.register_node("testnodes:rliquid_"..d, { description = "Test Liquid Source, Range "..d.. tt_normal .. "\n" .. "(falling & floating node)", drawtype = "liquid", @@ -29,7 +29,7 @@ for d=0, 8 do groups = {float = 1, falling_node = 1}, }) - minetest.register_node("testnodes:rliquid_flowing_"..d, { + core.register_node("testnodes:rliquid_flowing_"..d, { description = "Flowing Test Liquid, Range "..d.. tt_normal, drawtype = "flowingliquid", @@ -58,7 +58,7 @@ for d=0, 8 do end local mod = "^[colorize:#000000:127" - minetest.register_node("testnodes:vliquid_"..d, { + core.register_node("testnodes:vliquid_"..d, { description = "Test Liquid Source, Viscosity/Resistance "..d.."\n".. "Swimmable, spreading, renewable liquid".. tt_reduced, @@ -79,7 +79,7 @@ for d=0, 8 do liquid_viscosity = d, }) - minetest.register_node("testnodes:vliquid_flowing_"..d, { + core.register_node("testnodes:vliquid_flowing_"..d, { description = "Flowing Test Liquid, Viscosity/Resistance "..d.."\n".. "Swimmable, spreading, renewable liquid".. tt_reduced, @@ -103,7 +103,7 @@ for d=0, 8 do mod = "^[colorize:#000000:192" local v = 4 - minetest.register_node("testnodes:vrliquid_"..d, { + core.register_node("testnodes:vrliquid_"..d, { description = "Test Liquid Source, Viscosity "..v..", Resistance "..d.."\n".. "Swimmable, spreading, renewable liquid".. tt_reduced, @@ -127,7 +127,7 @@ for d=0, 8 do move_resistance = d, }) - minetest.register_node("testnodes:vrliquid_flowing_"..d, { + core.register_node("testnodes:vrliquid_flowing_"..d, { description = "Flowing Test Liquid, Viscosity "..v..", Resistance "..d.."\n".. "Swimmable, spreading, renewable liquid".. tt_reduced, diff --git a/games/devtest/mods/testnodes/meshes.lua b/games/devtest/mods/testnodes/meshes.lua index 88a59ad22..4fafa8ab7 100644 --- a/games/devtest/mods/testnodes/meshes.lua +++ b/games/devtest/mods/testnodes/meshes.lua @@ -1,6 +1,6 @@ -- Meshes -local S = minetest.get_translator("testnodes") +local S = core.get_translator("testnodes") local ocorner_cbox = { type = "fixed", @@ -23,7 +23,7 @@ local tall_pyr_cbox = { } -- Normal mesh -minetest.register_node("testnodes:mesh", { +core.register_node("testnodes:mesh", { description = S("Mesh Test Node"), drawtype = "mesh", mesh = "testnodes_pyramid.obj", @@ -35,7 +35,7 @@ minetest.register_node("testnodes:mesh", { }) -- Facedir mesh: outer corner slope -minetest.register_node("testnodes:mesh_facedir", { +core.register_node("testnodes:mesh_facedir", { description = S("Facedir Mesh Test Node").."\n".. S("param2 = facedir rotation (0..23)"), drawtype = "mesh", @@ -48,7 +48,7 @@ minetest.register_node("testnodes:mesh_facedir", { groups = {dig_immediate=3}, }) -minetest.register_node("testnodes:mesh_colorfacedir", { +core.register_node("testnodes:mesh_colorfacedir", { description = S("Color Facedir Mesh Test Node").."\n".. S("param2 = color + facedir rotation (0..23, 32..55, ...)"), drawtype = "mesh", @@ -62,7 +62,7 @@ minetest.register_node("testnodes:mesh_colorfacedir", { groups = {dig_immediate=3}, }) -minetest.register_node("testnodes:mesh_4dir", { +core.register_node("testnodes:mesh_4dir", { description = S("4dir Mesh Test Node").."\n".. S("param2 = 4dir rotation (0..3)"), drawtype = "mesh", @@ -75,7 +75,7 @@ minetest.register_node("testnodes:mesh_4dir", { groups = {dig_immediate=3}, }) -minetest.register_node("testnodes:mesh_color4dir", { +core.register_node("testnodes:mesh_color4dir", { description = S("Color 4dir Mesh Test Node").."\n".. S("param2 = color + 4dir rotation (0..255)"), drawtype = "mesh", @@ -90,7 +90,7 @@ minetest.register_node("testnodes:mesh_color4dir", { }) -- Wallmounted mesh: pyramid -minetest.register_node("testnodes:mesh_wallmounted", { +core.register_node("testnodes:mesh_wallmounted", { description = S("Wallmounted Mesh Test Node").."\n".. S("param2 = wallmounted rotation (0..7)"), drawtype = "mesh", @@ -103,7 +103,7 @@ minetest.register_node("testnodes:mesh_wallmounted", { groups = {dig_immediate=3}, }) -minetest.register_node("testnodes:mesh_colorwallmounted", { +core.register_node("testnodes:mesh_colorwallmounted", { description = S("Color Wallmounted Mesh Test Node").."\n".. S("param2 = color + wallmounted rotation (0..7, 8..15, ...)"), drawtype = "mesh", @@ -118,7 +118,7 @@ minetest.register_node("testnodes:mesh_colorwallmounted", { }) -minetest.register_node("testnodes:mesh_double", { +core.register_node("testnodes:mesh_double", { description = S("Double-sized Mesh Test Node"), drawtype = "mesh", mesh = "testnodes_pyramid.obj", @@ -129,7 +129,7 @@ minetest.register_node("testnodes:mesh_double", { groups = {dig_immediate=3}, }) -minetest.register_node("testnodes:mesh_half", { +core.register_node("testnodes:mesh_half", { description = S("Half-sized Mesh Test Node"), drawtype = "mesh", mesh = "testnodes_pyramid.obj", @@ -141,7 +141,7 @@ minetest.register_node("testnodes:mesh_half", { groups = {dig_immediate=3}, }) -minetest.register_node("testnodes:mesh_waving1", { +core.register_node("testnodes:mesh_waving1", { description = S("Plantlike-waving Mesh Test Node").."\n".. S("Waves if waving plants are enabled by client"), drawtype = "mesh", @@ -153,7 +153,7 @@ minetest.register_node("testnodes:mesh_waving1", { groups = {dig_immediate=3}, }) -minetest.register_node("testnodes:mesh_waving2", { +core.register_node("testnodes:mesh_waving2", { description = S("Leaflike-waving Mesh Test Node").."\n".. S("Waves if waving leaves are enabled by client"), drawtype = "mesh", @@ -165,7 +165,7 @@ minetest.register_node("testnodes:mesh_waving2", { groups = {dig_immediate=3}, }) -minetest.register_node("testnodes:mesh_waving3", { +core.register_node("testnodes:mesh_waving3", { description = S("Liquidlike-waving Mesh Test Node").."\n".. S("Waves if waving liquids are enabled by client"), drawtype = "mesh", diff --git a/games/devtest/mods/testnodes/nodeboxes.lua b/games/devtest/mods/testnodes/nodeboxes.lua index 99623bdda..0025ee0cb 100644 --- a/games/devtest/mods/testnodes/nodeboxes.lua +++ b/games/devtest/mods/testnodes/nodeboxes.lua @@ -1,9 +1,9 @@ -local S = minetest.get_translator("testnodes") +local S = core.get_translator("testnodes") -- Nodebox examples and tests. -- An simple example nodebox with one centered box -minetest.register_node("testnodes:nodebox_fixed", { +core.register_node("testnodes:nodebox_fixed", { description = S("Fixed Nodebox Test Node").."\n".. S("Nodebox is always the same"), tiles = {"testnodes_nodebox.png"}, @@ -18,7 +18,7 @@ minetest.register_node("testnodes:nodebox_fixed", { }) -- 50% higher than a regular node -minetest.register_node("testnodes:nodebox_overhigh", { +core.register_node("testnodes:nodebox_overhigh", { description = S("+50% high Nodebox Test Node"), tiles = {"testnodes_nodebox.png"}, drawtype = "nodebox", @@ -32,7 +32,7 @@ minetest.register_node("testnodes:nodebox_overhigh", { }) -- 95% higher than a regular node -minetest.register_node("testnodes:nodebox_overhigh2", { +core.register_node("testnodes:nodebox_overhigh2", { description = S("+95% high Nodebox Test Node"), tiles = {"testnodes_nodebox.png"}, drawtype = "nodebox", @@ -47,7 +47,7 @@ minetest.register_node("testnodes:nodebox_overhigh2", { }) -- Height of nodebox changes with its param2 value -minetest.register_node("testnodes:nodebox_leveled", { +core.register_node("testnodes:nodebox_leveled", { description = S("Leveled Nodebox Test Node").."\n".. S("param2 = height (0..127)"), tiles = {"testnodes_nodebox.png^[colorize:#0F0:32"}, @@ -93,7 +93,7 @@ local nodebox_wall_thick = { } -- Wall-like nodebox that connects to 4 neighbors -minetest.register_node("testnodes:nodebox_connected", { +core.register_node("testnodes:nodebox_connected", { description = S("Connected Nodebox Test Node (4 Side Wall)").."\n".. S("Connects to 4 neighbors sideways"), tiles = {"testnodes_nodebox.png^[colorize:#F00:32"}, @@ -106,7 +106,7 @@ minetest.register_node("testnodes:nodebox_connected", { }) -- Cable-like nodebox that connects to 6 neighbors -minetest.register_node("testnodes:nodebox_connected_6side", { +core.register_node("testnodes:nodebox_connected_6side", { description = S("Connected Nodebox Test Node (6 Side Cable)").."\n".. S("Connects to 6 neighbors"), tiles = {"testnodes_nodebox.png^[colorize:#F00:32"}, @@ -119,7 +119,7 @@ minetest.register_node("testnodes:nodebox_connected_6side", { }) -- More walls -minetest.register_node("testnodes:nodebox_connected_facedir", { +core.register_node("testnodes:nodebox_connected_facedir", { description = S("Facedir Connected Nodebox Test Node (4 Side Wall)").."\n".. S("Connects to neighbors").."\n".. S("param2 = facedir rotation of textures (not of the nodebox!)"), @@ -140,7 +140,7 @@ minetest.register_node("testnodes:nodebox_connected_facedir", { node_box = nodebox_wall_thick, }) -minetest.register_node("testnodes:nodebox_connected_4dir", { +core.register_node("testnodes:nodebox_connected_4dir", { description = S("4Dir Connected Nodebox Test Node").."\n".. S("Connects to neighbors").."\n".. S("param2 = 4dir rotation of textures (not of the nodebox!)"), @@ -162,7 +162,7 @@ minetest.register_node("testnodes:nodebox_connected_4dir", { }) -- Doesn't connect, but lets other nodes connect -minetest.register_node("testnodes:facedir_to_connect_to", { +core.register_node("testnodes:facedir_to_connect_to", { description = S("Facedir Node that connected Nodeboxes connect to").."\n".. S("Neighbors connect only to left (blue 4) and top (yellow 1) face").."\n".. S("(Currently broken for param2 >= 4, see FIXME in nodedef.cpp)").."\n".. @@ -184,7 +184,7 @@ minetest.register_node("testnodes:facedir_to_connect_to", { -- 3D sign and button: -- These are example nodes for more realistic example uses -- of wallmounted_rotate_vertical -minetest.register_node("testnodes:sign3d", { +core.register_node("testnodes:sign3d", { description = S("Nodebox Sign, Nodebox Type \"fixed\""), drawtype = "nodebox", paramtype = "light", @@ -202,7 +202,7 @@ minetest.register_node("testnodes:sign3d", { }, }) -minetest.register_node("testnodes:sign3d_wallmounted", { +core.register_node("testnodes:sign3d_wallmounted", { description = S("Nodebox Sign, Nodebox Type \"wallmounted\""), drawtype = "nodebox", paramtype = "light", @@ -222,7 +222,7 @@ minetest.register_node("testnodes:sign3d_wallmounted", { }, }) -minetest.register_node("testnodes:button", { +core.register_node("testnodes:button", { description = S("Button Nodebox Test Node"), drawtype = "nodebox", paramtype = "light", diff --git a/games/devtest/mods/testnodes/overlays.lua b/games/devtest/mods/testnodes/overlays.lua index 294e06a16..7f7a1cd72 100644 --- a/games/devtest/mods/testnodes/overlays.lua +++ b/games/devtest/mods/testnodes/overlays.lua @@ -1,13 +1,13 @@ -local S = minetest.get_translator("testnodes") +local S = core.get_translator("testnodes") -minetest.register_node("testnodes:overlay", { +core.register_node("testnodes:overlay", { description = S("Texture Overlay Test Node") .. "\n" .. S("Uncolorized"), tiles = {{name = "testnodes_overlayable.png"}}, overlay_tiles = {{name = "testnodes_overlay.png"}}, groups = { dig_immediate = 2 }, }) -minetest.register_node("testnodes:overlay_color_all", { +core.register_node("testnodes:overlay_color_all", { description = S("Texture Overlay Test Node, Colorized") .. "\n" .. S("param2 changes color"), tiles = {{name = "testnodes_overlayable.png"}}, @@ -18,7 +18,7 @@ minetest.register_node("testnodes:overlay_color_all", { groups = { dig_immediate = 2 }, }) -minetest.register_node("testnodes:overlay_color_overlay", { +core.register_node("testnodes:overlay_color_overlay", { description = S("Texture Overlay Test Node, Colorized Overlay") .. "\n" .. S("param2 changes color of overlay"), tiles = {{name = "testnodes_overlayable.png", color="white"}}, @@ -29,7 +29,7 @@ minetest.register_node("testnodes:overlay_color_overlay", { groups = { dig_immediate = 2 }, }) -minetest.register_node("testnodes:overlay_color_overlayed", { +core.register_node("testnodes:overlay_color_overlayed", { description = S("Texture Overlay Test Node, Colorized Base") .. "\n" .. S("param2 changes color of base texture"), tiles = {{name = "testnodes_overlayable.png"}}, @@ -42,7 +42,7 @@ minetest.register_node("testnodes:overlay_color_overlayed", { }) local global_overlay_color = "#FF2000" -minetest.register_node("testnodes:overlay_global", { +core.register_node("testnodes:overlay_global", { description = S("Texture Overlay Test Node, Global Color") .. "\n" .. S("Global color = @1", global_overlay_color), tiles = {{name = "testnodes_overlayable.png"}}, @@ -52,7 +52,7 @@ minetest.register_node("testnodes:overlay_global", { groups = { dig_immediate = 2 }, }) -minetest.register_node("testnodes:overlay_global_color_all", { +core.register_node("testnodes:overlay_global_color_all", { description = S("Texture Overlay Test Node, Global Color + Colorized") .. "\n" .. S("Global color = @1", global_overlay_color) .. "\n" .. S("param2 changes color"), @@ -65,7 +65,7 @@ minetest.register_node("testnodes:overlay_global_color_all", { groups = { dig_immediate = 2 }, }) -minetest.register_node("testnodes:overlay_global_color_overlay", { +core.register_node("testnodes:overlay_global_color_overlay", { description = S("Texture Overlay Test Node, Global Color + Colorized Overlay") .. "\n" .. S("Global color = @1", global_overlay_color) .. "\n" .. S("param2 changes color of overlay"), @@ -78,7 +78,7 @@ minetest.register_node("testnodes:overlay_global_color_overlay", { groups = { dig_immediate = 2 }, }) -minetest.register_node("testnodes:overlay_global_color_overlayed", { +core.register_node("testnodes:overlay_global_color_overlayed", { description = S("Texture Overlay Test Node, Global Color + Colorized Base") .. "\n" .. S("Global color = @1", global_overlay_color) .. "\n" .. S("param2 changes color of base texture"), diff --git a/games/devtest/mods/testnodes/param2.lua b/games/devtest/mods/testnodes/param2.lua index 6063ce2a3..aec1fd482 100644 --- a/games/devtest/mods/testnodes/param2.lua +++ b/games/devtest/mods/testnodes/param2.lua @@ -1,8 +1,8 @@ -- This file is for misc. param2 tests that aren't covered in drawtypes.lua already. -local S = minetest.get_translator("testnodes") +local S = core.get_translator("testnodes") -minetest.register_node("testnodes:facedir", { +core.register_node("testnodes:facedir", { description = S("Facedir Test Node").."\n".. S("param2 = facedir rotation (0..23)"), paramtype2 = "facedir", @@ -18,7 +18,7 @@ minetest.register_node("testnodes:facedir", { groups = { dig_immediate = 3 }, }) -minetest.register_node("testnodes:4dir", { +core.register_node("testnodes:4dir", { description = S("4dir Test Node").."\n".. S("param2 = 4dir rotation (0..3)"), paramtype2 = "4dir", @@ -34,7 +34,7 @@ minetest.register_node("testnodes:4dir", { groups = { dig_immediate = 3 }, }) -minetest.register_node("testnodes:facedir_nodebox", { +core.register_node("testnodes:facedir_nodebox", { description = S("Facedir Nodebox Test Node").."\n".. S("param2 = facedir rotation (0..23)"), tiles = { @@ -56,7 +56,7 @@ minetest.register_node("testnodes:facedir_nodebox", { groups = {dig_immediate=3}, }) -minetest.register_node("testnodes:4dir_nodebox", { +core.register_node("testnodes:4dir_nodebox", { description = S("4dir Nodebox Test Node").."\n".. S("param2 = 4dir rotation (0..3)"), tiles = { @@ -78,7 +78,7 @@ minetest.register_node("testnodes:4dir_nodebox", { groups = {dig_immediate=3}, }) -minetest.register_node("testnodes:4dir_nodebox_stair", { +core.register_node("testnodes:4dir_nodebox_stair", { description = S("4dir Nodebox Stair Test Node").."\n".. S("param2 = 4dir rotation (0..3)"), tiles = { @@ -104,7 +104,7 @@ minetest.register_node("testnodes:4dir_nodebox_stair", { }) -minetest.register_node("testnodes:wallmounted", { +core.register_node("testnodes:wallmounted", { description = S("Wallmounted Test Node").."\n".. S("param2 = wallmounted rotation (0..7)"), paramtype2 = "wallmounted", @@ -120,7 +120,7 @@ minetest.register_node("testnodes:wallmounted", { groups = { dig_immediate = 3 }, }) -minetest.register_node("testnodes:wallmounted_rot", { +core.register_node("testnodes:wallmounted_rot", { description = S("Wallmounted Rotatable Test Node"), paramtype2 = "wallmounted", wallmounted_rotate_vertical = true, @@ -136,7 +136,7 @@ minetest.register_node("testnodes:wallmounted_rot", { groups = { dig_immediate = 3 }, }) -minetest.register_node("testnodes:wallmounted_nodebox", { +core.register_node("testnodes:wallmounted_nodebox", { description = S("Wallmounted Nodebox Test Node").."\n".. S("param2 = wallmounted rotation (0..7)"), paramtype2 = "wallmounted", @@ -160,7 +160,7 @@ minetest.register_node("testnodes:wallmounted_nodebox", { groups = { dig_immediate = 3 }, }) -minetest.register_node("testnodes:wallmounted_nodebox_rot", { +core.register_node("testnodes:wallmounted_nodebox_rot", { description = S("Wallmounted Rotatable Nodebox Test Node"), paramtype2 = "wallmounted", wallmounted_rotate_vertical = true, @@ -184,7 +184,7 @@ minetest.register_node("testnodes:wallmounted_nodebox_rot", { groups = { dig_immediate = 3 }, }) -minetest.register_node("testnodes:color", { +core.register_node("testnodes:color", { description = S("Color Test Node").."\n".. S("param2 = color (0..255)"), paramtype2 = "color", @@ -196,7 +196,7 @@ minetest.register_node("testnodes:color", { groups = { dig_immediate = 3 }, }) -minetest.register_node("testnodes:colorfacedir", { +core.register_node("testnodes:colorfacedir", { description = S("Color Facedir Test Node").."\n".. S("param2 = color + facedir rotation (0..23, 32..55, ...)"), paramtype2 = "colorfacedir", @@ -213,7 +213,7 @@ minetest.register_node("testnodes:colorfacedir", { groups = { dig_immediate = 3 }, }) -minetest.register_node("testnodes:colorfacedir_nodebox", { +core.register_node("testnodes:colorfacedir_nodebox", { description = S("Color Facedir Nodebox Test Node").."\n".. S("param2 = color + facedir rotation (0..23, 32..55, ...)"), tiles = { @@ -236,7 +236,7 @@ minetest.register_node("testnodes:colorfacedir_nodebox", { groups = {dig_immediate=3}, }) -minetest.register_node("testnodes:color4dir", { +core.register_node("testnodes:color4dir", { description = S("Color 4dir Test Node").."\n".. S("param2 = color + 4dir rotation (0..255)"), paramtype2 = "color4dir", @@ -253,7 +253,7 @@ minetest.register_node("testnodes:color4dir", { groups = { dig_immediate = 3 }, }) -minetest.register_node("testnodes:color4dir_nodebox", { +core.register_node("testnodes:color4dir_nodebox", { description = S("Color 4dir Nodebox Test Node").."\n".. S("param2 = color + 4dir rotation (0..255)"), tiles = { @@ -276,7 +276,7 @@ minetest.register_node("testnodes:color4dir_nodebox", { groups = {dig_immediate=3}, }) -minetest.register_node("testnodes:colorwallmounted", { +core.register_node("testnodes:colorwallmounted", { description = S("Color Wallmounted Test Node").."\n".. S("param2 = color + wallmounted rotation (0..7, 8..15, ...)"), paramtype2 = "colorwallmounted", @@ -294,7 +294,7 @@ minetest.register_node("testnodes:colorwallmounted", { groups = { dig_immediate = 3 }, }) -minetest.register_node("testnodes:colorwallmounted_nodebox", { +core.register_node("testnodes:colorwallmounted_nodebox", { description = S("Color Wallmounted Nodebox Test Node").."\n".. S("param2 = color + wallmounted rotation (0..7, 8..15, ...)"), paramtype2 = "colorwallmounted", diff --git a/games/devtest/mods/testnodes/performance_test_nodes.lua b/games/devtest/mods/testnodes/performance_test_nodes.lua index 3eaed614b..fc22db34a 100644 --- a/games/devtest/mods/testnodes/performance_test_nodes.lua +++ b/games/devtest/mods/testnodes/performance_test_nodes.lua @@ -1,9 +1,9 @@ -- Performance test mesh nodes -local S = minetest.get_translator("testnodes") +local S = core.get_translator("testnodes") -- Complex mesh -minetest.register_node("testnodes:performance_mesh_clip", { +core.register_node("testnodes:performance_mesh_clip", { description = S("Performance Test Node") .. "\n" .. S("Marble with 'clip' transparency"), drawtype = "mesh", mesh = "testnodes_marble_glass.obj", @@ -15,7 +15,7 @@ minetest.register_node("testnodes:performance_mesh_clip", { }) -- Complex mesh, alpha blending -minetest.register_node("testnodes:performance_mesh_blend", { +core.register_node("testnodes:performance_mesh_blend", { description = S("Performance Test Node") .. "\n" .. S("Marble with 'blend' transparency"), drawtype = "mesh", mesh = "testnodes_marble_glass.obj", @@ -27,7 +27,7 @@ minetest.register_node("testnodes:performance_mesh_blend", { }) -- Overlay -minetest.register_node("testnodes:performance_overlay_clip", { +core.register_node("testnodes:performance_overlay_clip", { description = S("Performance Test Node") .. "\n" .. S("Marble with overlay with 'clip' transparency") .. "\n" .. S("Palette for demonstration"), drawtype = "mesh", mesh = "testnodes_marble_metal.obj", @@ -43,7 +43,7 @@ minetest.register_node("testnodes:performance_overlay_clip", { }) -- Overlay -minetest.register_node("testnodes:performance_overlay_blend", { +core.register_node("testnodes:performance_overlay_blend", { description = S("Performance Test Node") .. "\n" .. S("Marble with overlay with 'blend' transparency") .. "\n" .. S("Palette for demonstration"), drawtype = "mesh", mesh = "testnodes_marble_metal.obj", diff --git a/games/devtest/mods/testnodes/properties.lua b/games/devtest/mods/testnodes/properties.lua index a688d3814..29dc14a25 100644 --- a/games/devtest/mods/testnodes/properties.lua +++ b/games/devtest/mods/testnodes/properties.lua @@ -1,9 +1,9 @@ -- Test Nodes: Node property tests -local S = minetest.get_translator("testnodes") +local S = core.get_translator("testnodes") -- Is supposed to fall when it doesn't rest on solid ground -minetest.register_node("testnodes:falling", { +core.register_node("testnodes:falling", { description = S("Falling Node").."\n".. S("Falls down if no node below"), tiles = { @@ -14,7 +14,7 @@ minetest.register_node("testnodes:falling", { groups = { falling_node = 1, dig_immediate = 3 }, }) -minetest.register_node("testnodes:falling_facedir", { +core.register_node("testnodes:falling_facedir", { description = S("Falling Facedir Node").."\n".. S("Falls down if no node below").."\n".. S("param2 = facedir rotation"), @@ -31,7 +31,7 @@ minetest.register_node("testnodes:falling_facedir", { }) -- Same as falling node, but will stop falling on top of liquids -minetest.register_node("testnodes:falling_float", { +core.register_node("testnodes:falling_float", { description = S("Falling+Floating Node").."\n".. S("Falls down if no node below, floats on liquids (liquidtype ~= \"none\")"), groups = { falling_node = 1, float = 1, dig_immediate = 3 }, @@ -47,7 +47,7 @@ minetest.register_node("testnodes:falling_float", { -- This node attaches to the floor and drops as item -- when the floor is gone. -minetest.register_node("testnodes:attached", { +core.register_node("testnodes:attached", { description = S("Floor-Attached Node").."\n".. S("Drops as item if no solid node below"), tiles = { @@ -59,7 +59,7 @@ minetest.register_node("testnodes:attached", { }) -- This node attaches to the side of a node and drops as item -- when the node it attaches to is gone. -minetest.register_node("testnodes:attached_wallmounted", { +core.register_node("testnodes:attached_wallmounted", { description = S("Wallmounted Attached Node").."\n".. S("Attaches to solid node it was placed on; drops as item if neighbor node is gone").."\n".. S("param2 = wallmounted rotation (0..7)"), @@ -75,7 +75,7 @@ minetest.register_node("testnodes:attached_wallmounted", { -- This node attaches to the side of a node and drops as item -- when the node it attaches to is gone. -- Also adds vertical 90° rotation variants. -minetest.register_node("testnodes:attached_wallmounted_rot", { +core.register_node("testnodes:attached_wallmounted_rot", { description = S("Rotatable Wallmounted Attached Node").."\n".. S("Attaches to solid node it was placed on; drops as item if neighbor node is gone").."\n".. S("param2 = wallmounted rotation (0..7)").."\n".. @@ -91,7 +91,7 @@ minetest.register_node("testnodes:attached_wallmounted_rot", { }) -- Wallmounted node that always attaches to the floor -minetest.register_node("testnodes:attached_wallmounted_floor", { +core.register_node("testnodes:attached_wallmounted_floor", { description = S("Floor-Attached Wallmounted Node").."\n".. S("Drops as item if no solid node below (regardless of rotation)").."\n".. S("param2 = wallmounted rotation (visual only) (0..7)"), @@ -107,7 +107,7 @@ minetest.register_node("testnodes:attached_wallmounted_floor", { -- Wallmounted node that always attaches to the floor. -- Also adds 90° rotation variants. -minetest.register_node("testnodes:attached_wallmounted_floor_rot", { +core.register_node("testnodes:attached_wallmounted_floor_rot", { description = S("Rotatable Floor-Attached Wallmounted Node").."\n".. S("Drops as item if no solid node below (regardless of rotation)").."\n".. S("param2 = wallmounted rotation (visual only) (0..7)").."\n".. @@ -124,7 +124,7 @@ minetest.register_node("testnodes:attached_wallmounted_floor_rot", { -- This node attaches to the ceiling and drops as item -- when the ceiling is gone. -minetest.register_node("testnodes:attached_top", { +core.register_node("testnodes:attached_top", { description = S("Ceiling-Attached Node").."\n".. S("Drops as item if no solid node above"), tiles = { @@ -136,7 +136,7 @@ minetest.register_node("testnodes:attached_top", { }) -- Same as wallmounted attached, but for facedir -minetest.register_node("testnodes:attached_facedir", { +core.register_node("testnodes:attached_facedir", { description = S("Facedir Attached Node").."\n".. S("Attaches to a neighboring solid node; drops as item if that node is gone").."\n".. S("param2 = facedir rotation (0..23)"), @@ -153,7 +153,7 @@ minetest.register_node("testnodes:attached_facedir", { }) -- Same as facedir attached, but for 4dir -minetest.register_node("testnodes:attached_4dir", { +core.register_node("testnodes:attached_4dir", { description = S("4dir Attached Node").."\n".. S("Attaches to the side of a solid node; drops as item if that node is gone").."\n".. S("param2 = 4dir rotation (0..3)"), @@ -170,7 +170,7 @@ minetest.register_node("testnodes:attached_4dir", { }) -- Jump disabled -minetest.register_node("testnodes:nojump", { +core.register_node("testnodes:nojump", { description = S("Non-jumping Node").."\n".. S("You can't jump on it"), groups = {disable_jump=1, dig_immediate=3}, @@ -178,7 +178,7 @@ minetest.register_node("testnodes:nojump", { }) -- Jump disabled plant -minetest.register_node("testnodes:nojump_walkable", { +core.register_node("testnodes:nojump_walkable", { description = S("Non-jumping Plant Node").."\n".. S("You can't jump while your feet are in it"), drawtype = "plantlike", @@ -192,7 +192,7 @@ local climbable_nodebox = { } -- Climbable up and down with jump and sneak keys -minetest.register_node("testnodes:climbable", { +core.register_node("testnodes:climbable", { description = S("Climbable Node").."\n".. S("You can climb up and down"), climbable = true, @@ -210,7 +210,7 @@ minetest.register_node("testnodes:climbable", { }) -- Climbable only downwards with sneak key -minetest.register_node("testnodes:climbable_nojump", { +core.register_node("testnodes:climbable_nojump", { description = S("Downwards-climbable Node").."\n".. S("You can climb only downwards"), climbable = true, @@ -226,7 +226,7 @@ minetest.register_node("testnodes:climbable_nojump", { }) -minetest.register_node("testnodes:climbable_nodescend", { +core.register_node("testnodes:climbable_nodescend", { description = S("Upwards-climbable Node"), climbable = true, walkable = false, @@ -240,7 +240,7 @@ minetest.register_node("testnodes:climbable_nodescend", { sunlight_propagates = true, }) -minetest.register_node("testnodes:climbable_nodescend_nojump", { +core.register_node("testnodes:climbable_nodescend_nojump", { description = S("Horizontal-only Climbable Node"), climbable = true, walkable = false, @@ -255,7 +255,7 @@ minetest.register_node("testnodes:climbable_nodescend_nojump", { }) -- A liquid in which you can't rise -minetest.register_node("testnodes:liquid_nojump", { +core.register_node("testnodes:liquid_nojump", { description = S("Non-jumping Liquid Source Node").."\n".. S("Swimmable liquid, but you can't swim upwards"), liquidtype = "source", @@ -282,7 +282,7 @@ minetest.register_node("testnodes:liquid_nojump", { }) -- A liquid in which you can't rise (flowing variant) -minetest.register_node("testnodes:liquidflowing_nojump", { +core.register_node("testnodes:liquidflowing_nojump", { description = S("Non-jumping Flowing Liquid Node").."\n".. S("Swimmable liquid, but you can't swim upwards"), liquidtype = "flowing", @@ -311,7 +311,7 @@ minetest.register_node("testnodes:liquidflowing_nojump", { }) -- A liquid which doesn't have liquid movement physics (source variant) -minetest.register_node("testnodes:liquid_noswim", { +core.register_node("testnodes:liquid_noswim", { description = S("No-swim Liquid Source Node").."\n".. S("Liquid node, but swimming is disabled"), liquidtype = "source", @@ -340,7 +340,7 @@ minetest.register_node("testnodes:liquid_noswim", { }) -- A liquid which doen't have liquid movement physics (flowing variant) -minetest.register_node("testnodes:liquidflowing_noswim", { +core.register_node("testnodes:liquidflowing_noswim", { description = S("No-swim Flowing Liquid Node").."\n".. S("Liquid node, but swimming is disabled"), liquidtype = "flowing", @@ -372,7 +372,7 @@ minetest.register_node("testnodes:liquidflowing_noswim", { -- A liquid in which you can't actively descend. -- Note: You'll still descend slowly by doing nothing. -minetest.register_node("testnodes:liquid_nodescend", { +core.register_node("testnodes:liquid_nodescend", { description = S("No-descending Liquid Source Node"), liquidtype = "source", liquid_range = 0, @@ -398,7 +398,7 @@ minetest.register_node("testnodes:liquid_nodescend", { }) -- A liquid in which you can't actively descend (flowing variant) -minetest.register_node("testnodes:liquidflowing_nodescend", { +core.register_node("testnodes:liquidflowing_nodescend", { description = S("No-descending Flowing Liquid Node"), liquidtype = "flowing", liquid_range = 1, @@ -452,7 +452,7 @@ for i=-100, 100, 25 do end desc = S("Fall Damage Node (-@1%)", math.abs(i)) end - minetest.register_node("testnodes:damage"..subname, { + core.register_node("testnodes:damage"..subname, { description = desc, groups = {fall_damage_add_percent=i, dig_immediate=3}, @@ -483,7 +483,7 @@ for i=-MAX_BOUNCE_NONJUMPY, MAX_BOUNCE_JUMPY, 20 do color = { r=val2, g=255, b=val2, a=255 } num = "NEG"..num end - minetest.register_node("testnodes:bouncy"..num, { + core.register_node("testnodes:bouncy"..num, { description = desc, groups = {bouncy=i, dig_immediate=3}, @@ -497,7 +497,7 @@ end -- Slippery nodes (various slippery levels) for i=1, 5 do - minetest.register_node("testnodes:slippery"..i, { + core.register_node("testnodes:slippery"..i, { description = S("Slippery Node (@1)", i), tiles ={"testnodes_slippery.png"}, is_ground_content = false, @@ -509,7 +509,7 @@ end -- Move resistance nodes (various resistance levels) for r=0, 7 do if r > 0 then - minetest.register_node("testnodes:move_resistance"..r, { + core.register_node("testnodes:move_resistance"..r, { description = S("Move-resistant Node (@1)", r).."\n".. S("Reduces movement speed"), walkable = false, @@ -537,7 +537,7 @@ for r=0, 7 do end - minetest.register_node("testnodes:move_resistance_liquidlike"..r, { + core.register_node("testnodes:move_resistance_liquidlike"..r, { description = mdesc, walkable = false, move_resistance = r, @@ -553,7 +553,7 @@ for r=0, 7 do }) end -minetest.register_node("testnodes:climbable_move_resistance_4", { +core.register_node("testnodes:climbable_move_resistance_4", { description = S("Climbable Move-resistant Node (4)").."\n".. S("You can climb up and down; reduced movement speed"), walkable = false, @@ -570,7 +570,7 @@ minetest.register_node("testnodes:climbable_move_resistance_4", { }) -- By placing something on the node, the node itself will be replaced -minetest.register_node("testnodes:buildable_to", { +core.register_node("testnodes:buildable_to", { description = S("\"buildable_to\" Node").."\n".. S("Placing a node on it will replace it"), buildable_to = true, @@ -598,7 +598,7 @@ for d=-3,3 do elseif math.abs(d) == 3 then tile = tile .. "^[colorize:#000000:140" end - minetest.register_node("testnodes:damage_"..sub, { + core.register_node("testnodes:damage_"..sub, { description = desc, damage_per_second = d, @@ -615,7 +615,7 @@ for d=-3,3 do end -- Causes drowning damage -minetest.register_node("testnodes:drowning_1", { +core.register_node("testnodes:drowning_1", { description = S("Drowning Node (@1 damage)", 1).."\n".. S("You'll drown inside it"), drowning = 1, @@ -632,7 +632,7 @@ minetest.register_node("testnodes:drowning_1", { -- post_effect_color_shaded -minetest.register_node("testnodes:post_effect_color_shaded_false", { +core.register_node("testnodes:post_effect_color_shaded_false", { description = S("\"post_effect_color_shaded = false\" Node"), drawtype = "allfaces", @@ -648,7 +648,7 @@ minetest.register_node("testnodes:post_effect_color_shaded_false", { groups = {dig_immediate=3}, }) -minetest.register_node("testnodes:post_effect_color_shaded_true", { +core.register_node("testnodes:post_effect_color_shaded_true", { description = S("\"post_effect_color_shaded = true\" Node"), drawtype = "allfaces", @@ -669,7 +669,7 @@ minetest.register_node("testnodes:post_effect_color_shaded_true", { -- Register wrapper for compactness local function register_pointable_test_node(name, description, pointable) local texture = "testnodes_"..name..".png" - minetest.register_node("testnodes:"..name, { + core.register_node("testnodes:"..name, { description = S(description), tiles = {texture}, drawtype = "glasslike_framed", diff --git a/games/devtest/mods/testnodes/textures.lua b/games/devtest/mods/testnodes/textures.lua index c0eefcf3c..0d4194753 100644 --- a/games/devtest/mods/testnodes/textures.lua +++ b/games/devtest/mods/testnodes/textures.lua @@ -1,8 +1,8 @@ -- Node texture tests -local S = minetest.get_translator("testnodes") +local S = core.get_translator("testnodes") -minetest.register_node("testnodes:6sides", { +core.register_node("testnodes:6sides", { description = S("Six Textures Test Node").."\n".. S("Has 1 texture per face"), tiles = { @@ -17,7 +17,7 @@ minetest.register_node("testnodes:6sides", { groups = { dig_immediate = 2 }, }) -minetest.register_node("testnodes:anim", { +core.register_node("testnodes:anim", { description = S("Animated Test Node").."\n".. S("Tiles animate from A to D in 4s cycle"), tiles = { @@ -33,7 +33,7 @@ minetest.register_node("testnodes:anim", { groups = { dig_immediate = 2 }, }) -minetest.register_node("testnodes:fill_positioning", { +core.register_node("testnodes:fill_positioning", { description = S("Fill Modifier Test Node") .. "\n" .. S("The node should have the same look as " .. "testnodes:fill_positioning_reference."), @@ -44,7 +44,7 @@ minetest.register_node("testnodes:fill_positioning", { groups = {dig_immediate = 3}, }) -minetest.register_node("testnodes:fill_positioning_reference", { +core.register_node("testnodes:fill_positioning_reference", { description = S("Fill Modifier Test Node Reference"), drawtype = "glasslike", paramtype = "light", @@ -52,7 +52,7 @@ minetest.register_node("testnodes:fill_positioning_reference", { groups = {dig_immediate = 3}, }) -minetest.register_node("testnodes:modifier_mask", { +core.register_node("testnodes:modifier_mask", { description = S("[mask Modifier Test Node"), tiles = {"testnodes_128x128_rgb.png^[mask:testnodes_mask_WRGBKW.png"}, groups = {dig_immediate = 3}, @@ -66,7 +66,7 @@ for a=1,#alphas do local alpha = alphas[a] -- Transparency taken from texture - minetest.register_node("testnodes:alpha_texture_"..alpha, { + core.register_node("testnodes:alpha_texture_"..alpha, { description = S("Texture Alpha Test Node (@1)", alpha).."\n".. S("Semi-transparent"), drawtype = "glasslike", @@ -80,7 +80,7 @@ for a=1,#alphas do }) -- Transparency set via texture modifier - minetest.register_node("testnodes:alpha_"..alpha, { + core.register_node("testnodes:alpha_"..alpha, { description = S("Alpha Test Node (@1)", alpha).."\n".. S("Semi-transparent"), drawtype = "glasslike", @@ -94,7 +94,7 @@ for a=1,#alphas do }) end -minetest.register_node("testnodes:alpha_compositing", { +core.register_node("testnodes:alpha_compositing", { description = S("Texture Overlay Test Node") .. "\n" .. S("A regular grid should be visible where each cell contains two " .. "texels with the same color.") .. "\n" .. @@ -204,23 +204,23 @@ core.dynamic_add_media({ filedata = png_ck, }) -minetest.register_node("testnodes:generated_png_mb", { +core.register_node("testnodes:generated_png_mb", { description = S("Generated Mandelbrot PNG Test Node"), tiles = { "testnodes_generated_mb.png" }, groups = { dig_immediate = 2 }, }) -minetest.register_node("testnodes:generated_png_ck", { +core.register_node("testnodes:generated_png_ck", { description = S("Generated Checker PNG Test Node"), tiles = { "testnodes_generated_ck.png" }, groups = { dig_immediate = 2 }, }) -local png_emb = "[png:" .. minetest.encode_base64( +local png_emb = "[png:" .. core.encode_base64( encode_and_check(64, 64, "rgba", data_emb)) -minetest.register_node("testnodes:generated_png_emb", { +core.register_node("testnodes:generated_png_emb", { description = S("Generated In-Band Mandelbrot PNG Test Node"), tiles = { png_emb }, @@ -229,7 +229,7 @@ minetest.register_node("testnodes:generated_png_emb", { paramtype = "light", groups = { dig_immediate = 2 }, }) -minetest.register_node("testnodes:generated_png_src_emb", { +core.register_node("testnodes:generated_png_src_emb", { description = S("Generated In-Band Source Blit Mandelbrot PNG Test Node"), tiles = { png_emb .. "^testnodes_damage_neg.png" }, @@ -238,7 +238,7 @@ minetest.register_node("testnodes:generated_png_src_emb", { paramtype = "light", groups = { dig_immediate = 2 }, }) -minetest.register_node("testnodes:generated_png_dst_emb", { +core.register_node("testnodes:generated_png_dst_emb", { description = S("Generated In-Band Dest Blit Mandelbrot PNG Test Node"), tiles = { "testnodes_generated_ck.png^" .. png_emb }, @@ -270,7 +270,7 @@ then the string “TRUEVISION-XFILE.”, then another null byte. ]]-- -minetest.register_node("testnodes:tga_type1_24bpp_bt", { +core.register_node("testnodes:tga_type1_24bpp_bt", { description = S("TGA Type 1 (color-mapped RGB) 24bpp bottom-top Test Node"), drawtype = "glasslike", paramtype = "light", @@ -279,7 +279,7 @@ minetest.register_node("testnodes:tga_type1_24bpp_bt", { groups = { dig_immediate = 2 }, }) -minetest.register_node("testnodes:tga_type1_24bpp_tb", { +core.register_node("testnodes:tga_type1_24bpp_tb", { description = S("TGA Type 1 (color-mapped RGB) 24bpp top-bottom Test Node"), drawtype = "glasslike", paramtype = "light", @@ -288,7 +288,7 @@ minetest.register_node("testnodes:tga_type1_24bpp_tb", { groups = { dig_immediate = 2 }, }) -minetest.register_node("testnodes:tga_type2_16bpp_bt", { +core.register_node("testnodes:tga_type2_16bpp_bt", { description = S("TGA Type 2 (uncompressed RGB) 16bpp bottom-top Test Node"), drawtype = "glasslike", paramtype = "light", @@ -298,7 +298,7 @@ minetest.register_node("testnodes:tga_type2_16bpp_bt", { groups = { dig_immediate = 2 }, }) -minetest.register_node("testnodes:tga_type2_16bpp_tb", { +core.register_node("testnodes:tga_type2_16bpp_tb", { description = S("TGA Type 2 (uncompressed RGB) 16bpp top-bottom Test Node"), drawtype = "glasslike", paramtype = "light", @@ -308,7 +308,7 @@ minetest.register_node("testnodes:tga_type2_16bpp_tb", { groups = { dig_immediate = 2 }, }) -minetest.register_node("testnodes:tga_type2_32bpp_bt", { +core.register_node("testnodes:tga_type2_32bpp_bt", { description = S("TGA Type 2 (uncompressed RGB) 32bpp bottom-top Test Node"), drawtype = "glasslike", paramtype = "light", @@ -318,7 +318,7 @@ minetest.register_node("testnodes:tga_type2_32bpp_bt", { groups = { dig_immediate = 2 }, }) -minetest.register_node("testnodes:tga_type2_32bpp_tb", { +core.register_node("testnodes:tga_type2_32bpp_tb", { description = S("TGA Type 2 (uncompressed RGB) 32bpp top-bottom Test Node"), drawtype = "glasslike", paramtype = "light", @@ -328,7 +328,7 @@ minetest.register_node("testnodes:tga_type2_32bpp_tb", { groups = { dig_immediate = 2 }, }) -minetest.register_node("testnodes:tga_type3_16bpp_bt", { +core.register_node("testnodes:tga_type3_16bpp_bt", { description = S("TGA Type 3 (uncompressed grayscale) 16bpp bottom-top Test Node"), drawtype = "glasslike", paramtype = "light", @@ -338,7 +338,7 @@ minetest.register_node("testnodes:tga_type3_16bpp_bt", { groups = { dig_immediate = 2 }, }) -minetest.register_node("testnodes:tga_type3_16bpp_tb", { +core.register_node("testnodes:tga_type3_16bpp_tb", { description = S("TGA Type 3 (uncompressed grayscale) 16bpp top-bottom Test Node"), drawtype = "glasslike", paramtype = "light", @@ -348,7 +348,7 @@ minetest.register_node("testnodes:tga_type3_16bpp_tb", { groups = { dig_immediate = 2 }, }) -minetest.register_node("testnodes:tga_type10_32bpp_bt", { +core.register_node("testnodes:tga_type10_32bpp_bt", { description = S("TGA Type 10 (RLE-compressed RGB) 32bpp bottom-top Test Node"), tiles = { "testnodes_tga_type10_32bpp_bt.tga" }, drawtype = "glasslike", @@ -358,7 +358,7 @@ minetest.register_node("testnodes:tga_type10_32bpp_bt", { groups = { dig_immediate = 2 }, }) -minetest.register_node("testnodes:tga_type10_32bpp_tb", { +core.register_node("testnodes:tga_type10_32bpp_tb", { description = S("TGA Type 10 (RLE-compressed RGB) 32bpp top-bottom Test Node"), drawtype = "glasslike", paramtype = "light", diff --git a/games/devtest/mods/testpathfinder/init.lua b/games/devtest/mods/testpathfinder/init.lua index 67748afca..a0f99f8a8 100644 --- a/games/devtest/mods/testpathfinder/init.lua +++ b/games/devtest/mods/testpathfinder/init.lua @@ -1,4 +1,4 @@ -local S = minetest.get_translator("testpathfinder") +local S = core.get_translator("testpathfinder") -- Config parameters @@ -37,26 +37,26 @@ local function find_path_for_player(player, itemstack) local pos1 = vector.round(player:get_pos()) -- Don't bother calling pathfinder for high distance to avoid freezing if (not IGNORE_MAX_DISTANCE_SAFEGUARD) and (vector.distance(pos1, pos2) > MAX_DIRECT_DISTANCE) then - minetest.chat_send_player(player:get_player_name(), S("Destination too far away! Set a destination (via placing) within a distance of @1 and try again!", MAX_DIRECT_DISTANCE)) + core.chat_send_player(player:get_player_name(), S("Destination too far away! Set a destination (via placing) within a distance of @1 and try again!", MAX_DIRECT_DISTANCE)) return end local str = S("Path from @1 to @2:", - minetest.pos_to_string(pos1), - minetest.pos_to_string(pos2)) + core.pos_to_string(pos1), + core.pos_to_string(pos2)) - minetest.chat_send_player(player:get_player_name(), str) - local time_start = minetest.get_us_time() - local path = minetest.find_path(pos1, pos2, MAX_SEARCH_DISTANCE, MAX_JUMP, MAX_DROP, algo) - local time_end = minetest.get_us_time() + core.chat_send_player(player:get_player_name(), str) + local time_start = core.get_us_time() + local path = core.find_path(pos1, pos2, MAX_SEARCH_DISTANCE, MAX_JUMP, MAX_DROP, algo) + local time_end = core.get_us_time() local time_diff = time_end - time_start str = "" if not path then - minetest.chat_send_player(player:get_player_name(), S("No path!")) - minetest.chat_send_player(player:get_player_name(), S("Time: @1 ms", time_diff/1000)) + core.chat_send_player(player:get_player_name(), S("No path!")) + core.chat_send_player(player:get_player_name(), S("Time: @1 ms", time_diff/1000)) return end for s=1, #path do - str = str .. minetest.pos_to_string(path[s]) .. "\n" + str = str .. core.pos_to_string(path[s]) .. "\n" local t if s == #path then t = "testpathfinder_waypoint_end.png" @@ -66,18 +66,18 @@ local function find_path_for_player(player, itemstack) local c = math.floor(((#path-s)/#path)*255) t = string.format("testpathfinder_waypoint.png^[multiply:#%02x%02x00", 0xFF-c, c) end - minetest.add_particle({ + core.add_particle({ pos = path[s], expirationtime = 5 + 0.2 * s, playername = player:get_player_name(), - glow = minetest.LIGHT_MAX, + glow = core.LIGHT_MAX, texture = t, size = 3, }) end - minetest.chat_send_player(player:get_player_name(), str) - minetest.chat_send_player(player:get_player_name(), S("Path length: @1", #path)) - minetest.chat_send_player(player:get_player_name(), S("Time: @1 ms", time_diff/1000)) + core.chat_send_player(player:get_player_name(), str) + core.chat_send_player(player:get_player_name(), S("Path length: @1", #path)) + core.chat_send_player(player:get_player_name(), S("Time: @1 ms", time_diff/1000)) end end @@ -93,7 +93,7 @@ local function set_destination(itemstack, user, pointed_thing) meta:set_int("pos_x", pos.x) meta:set_int("pos_y", pos.y) meta:set_int("pos_z", pos.z) - minetest.chat_send_player(user:get_player_name(), S("Destination set to @1", minetest.pos_to_string(pos))) + core.chat_send_player(user:get_player_name(), S("Destination set to @1", core.pos_to_string(pos))) return itemstack end end @@ -112,7 +112,7 @@ local function find_path_or_set_algorithm(itemstack, user, pointed_thing) local algo = meta:get_int("algorithm") algo = (algo + 1) % #algorithms meta:set_int("algorithm", algo) - minetest.chat_send_player(user:get_player_name(), S("Algorithm: @1", algorithms[algo+1])) + core.chat_send_player(user:get_player_name(), S("Algorithm: @1", algorithms[algo+1])) return itemstack end end @@ -120,7 +120,7 @@ end -- Punch: Find path -- Sneak+punch: Select pathfinding algorithm -- Place: Select destination node -minetest.register_tool("testpathfinder:testpathfinder", { +core.register_tool("testpathfinder:testpathfinder", { description = S("Pathfinder Tester") .."\n".. S("Finds path between 2 points") .."\n".. S("Place on node: Select destination") .."\n".. diff --git a/games/devtest/mods/testtools/init.lua b/games/devtest/mods/testtools/init.lua index 2378cf982..6586d87a2 100644 --- a/games/devtest/mods/testtools/init.lua +++ b/games/devtest/mods/testtools/init.lua @@ -1,12 +1,12 @@ -local S = minetest.get_translator("testtools") -local F = minetest.formspec_escape +local S = core.get_translator("testtools") +local F = core.formspec_escape testtools = {} -dofile(minetest.get_modpath("testtools") .. "/light.lua") -dofile(minetest.get_modpath("testtools") .. "/privatizer.lua") -dofile(minetest.get_modpath("testtools") .. "/particles.lua") -dofile(minetest.get_modpath("testtools") .. "/node_box_visualizer.lua") +dofile(core.get_modpath("testtools") .. "/light.lua") +dofile(core.get_modpath("testtools") .. "/privatizer.lua") +dofile(core.get_modpath("testtools") .. "/particles.lua") +dofile(core.get_modpath("testtools") .. "/node_box_visualizer.lua") local pointabilities_nodes = { nodes = { @@ -22,7 +22,7 @@ local pointabilities_objects = { }, } -minetest.register_tool("testtools:param2tool", { +core.register_tool("testtools:param2tool", { description = S("Param2 Tool") .."\n".. S("Modify param2 value of nodes") .."\n".. S("Punch: +1") .."\n".. @@ -33,7 +33,7 @@ minetest.register_tool("testtools:param2tool", { groups = { testtool = 1, disable_repair = 1 }, pointabilities = pointabilities_nodes, on_use = function(itemstack, user, pointed_thing) - local pos = minetest.get_pointed_thing_position(pointed_thing) + local pos = core.get_pointed_thing_position(pointed_thing) if pointed_thing.type ~= "node" or (not pos) then return end @@ -44,12 +44,12 @@ minetest.register_tool("testtools:param2tool", { add = 8 end end - local node = minetest.get_node(pos) + local node = core.get_node(pos) node.param2 = node.param2 + add - minetest.swap_node(pos, node) + core.swap_node(pos, node) end, on_place = function(itemstack, user, pointed_thing) - local pos = minetest.get_pointed_thing_position(pointed_thing) + local pos = core.get_pointed_thing_position(pointed_thing) if pointed_thing.type ~= "node" or (not pos) then return end @@ -60,13 +60,13 @@ minetest.register_tool("testtools:param2tool", { add = -8 end end - local node = minetest.get_node(pos) + local node = core.get_node(pos) node.param2 = node.param2 + add - minetest.swap_node(pos, node) + core.swap_node(pos, node) end, }) -minetest.register_tool("testtools:node_setter", { +core.register_tool("testtools:node_setter", { description = S("Node Setter") .."\n".. S("Replace pointed node with something else") .."\n".. S("Punch: Select pointed node") .."\n".. @@ -76,24 +76,24 @@ minetest.register_tool("testtools:node_setter", { groups = { testtool = 1, disable_repair = 1 }, pointabilities = pointabilities_nodes, on_use = function(itemstack, user, pointed_thing) - local pos = minetest.get_pointed_thing_position(pointed_thing) + local pos = core.get_pointed_thing_position(pointed_thing) if pointed_thing.type == "nothing" then local meta = itemstack:get_meta() meta:set_string("node", "air") meta:set_int("node_param2", 0) if user and user:is_player() then - minetest.chat_send_player(user:get_player_name(), S("Now placing: @1 (param2=@2)", "air", 0)) + core.chat_send_player(user:get_player_name(), S("Now placing: @1 (param2=@2)", "air", 0)) end return itemstack elseif pointed_thing.type ~= "node" or (not pos) then return end - local node = minetest.get_node(pos) + local node = core.get_node(pos) local meta = itemstack:get_meta() meta:set_string("node", node.name) meta:set_int("node_param2", node.param2) if user and user:is_player() then - minetest.chat_send_player(user:get_player_name(), S("Now placing: @1 (param2=@2)", node.name, node.param2)) + core.chat_send_player(user:get_player_name(), S("Now placing: @1 (param2=@2)", node.name, node.param2)) end return itemstack end, @@ -102,7 +102,7 @@ minetest.register_tool("testtools:node_setter", { local nodename = meta:get_string("node") or "" local param2 = meta:get_int("node_param2") or 0 - minetest.show_formspec(user:get_player_name(), "testtools:node_setter", + core.show_formspec(user:get_player_name(), "testtools:node_setter", "size[4,4]".. "field[0.5,1;3,1;nodename;"..F(S("Node name (itemstring):"))..";"..F(nodename).."]".. "field[0.5,2;3,1;param2;"..F(S("param2:"))..";"..F(tostring(param2)).."]".. @@ -110,11 +110,11 @@ minetest.register_tool("testtools:node_setter", { ) end, on_place = function(itemstack, user, pointed_thing) - local pos = minetest.get_pointed_thing_position(pointed_thing) + local pos = core.get_pointed_thing_position(pointed_thing) local meta = itemstack:get_meta() local nodename = meta:get_string("node") if nodename == "" and user and user:is_player() then - minetest.chat_send_player(user:get_player_name(), S("Punch a node first!")) + core.chat_send_player(user:get_player_name(), S("Punch a node first!")) return end local param2 = meta:get_int("node_param2") @@ -122,15 +122,15 @@ minetest.register_tool("testtools:node_setter", { param2 = 0 end local node = { name = nodename, param2 = param2 } - if not minetest.registered_nodes[nodename] then - minetest.chat_send_player(user:get_player_name(), S("Cannot set unknown node: @1", nodename)) + if not core.registered_nodes[nodename] then + core.chat_send_player(user:get_player_name(), S("Cannot set unknown node: @1", nodename)) return end - minetest.set_node(pos, node) + core.set_node(pos, node) end, }) -minetest.register_tool("testtools:remover", { +core.register_tool("testtools:remover", { description = S("Remover") .."\n".. S("Punch: Remove pointed node or object"), inventory_image = "testtools_remover.png", @@ -140,21 +140,21 @@ minetest.register_tool("testtools:remover", { objects = pointabilities_objects.objects, }, on_use = function(itemstack, user, pointed_thing) - local pos = minetest.get_pointed_thing_position(pointed_thing) + local pos = core.get_pointed_thing_position(pointed_thing) if pointed_thing.type == "node" and pos ~= nil then - minetest.remove_node(pos) + core.remove_node(pos) elseif pointed_thing.type == "object" then local obj = pointed_thing.ref if not obj:is_player() then obj:remove() else - minetest.chat_send_player(user:get_player_name(), S("Can't remove players!")) + core.chat_send_player(user:get_player_name(), S("Can't remove players!")) end end end, }) -minetest.register_tool("testtools:falling_node_tool", { +core.register_tool("testtools:falling_node_tool", { description = S("Falling Node Tool") .."\n".. S("Punch: Make pointed node fall") .."\n".. S("Place: Move pointed node 2 units upwards, then make it fall"), @@ -163,7 +163,7 @@ minetest.register_tool("testtools:falling_node_tool", { pointabilities = pointabilities_nodes, on_place = function(itemstack, user, pointed_thing) -- Teleport node 1-2 units upwards (if possible) and make it fall - local pos = minetest.get_pointed_thing_position(pointed_thing) + local pos = core.get_pointed_thing_position(pointed_thing) if pointed_thing.type ~= "node" or (not pos) then return end @@ -171,8 +171,8 @@ minetest.register_tool("testtools:falling_node_tool", { local highest for i=1,2 do local above = {x=pos.x,y=pos.y+i,z=pos.z} - local n2 = minetest.get_node(above) - local def2 = minetest.registered_nodes[n2.name] + local n2 = core.get_node(above) + local def2 = core.registered_nodes[n2.name] if def2 and (not def2.walkable) then highest = above else @@ -180,33 +180,33 @@ minetest.register_tool("testtools:falling_node_tool", { end end if highest then - local node = minetest.get_node(pos) - local metatable = minetest.get_meta(pos):to_table() - minetest.remove_node(pos) - minetest.set_node(highest, node) - local meta_highest = minetest.get_meta(highest) + local node = core.get_node(pos) + local metatable = core.get_meta(pos):to_table() + core.remove_node(pos) + core.set_node(highest, node) + local meta_highest = core.get_meta(highest) meta_highest:from_table(metatable) - ok = minetest.spawn_falling_node(highest) + ok = core.spawn_falling_node(highest) else - ok = minetest.spawn_falling_node(pos) + ok = core.spawn_falling_node(pos) end if not ok and user and user:is_player() then - minetest.chat_send_player(user:get_player_name(), S("Falling node could not be spawned!")) + core.chat_send_player(user:get_player_name(), S("Falling node could not be spawned!")) end end, on_use = function(itemstack, user, pointed_thing) - local pos = minetest.get_pointed_thing_position(pointed_thing) + local pos = core.get_pointed_thing_position(pointed_thing) if pointed_thing.type ~= "node" or (not pos) then return end - local ok = minetest.spawn_falling_node(pos) + local ok = core.spawn_falling_node(pos) if not ok and user and user:is_player() then - minetest.chat_send_player(user:get_player_name(), S("Falling node could not be spawned!")) + core.chat_send_player(user:get_player_name(), S("Falling node could not be spawned!")) end end, }) -minetest.register_tool("testtools:rotator", { +core.register_tool("testtools:rotator", { description = S("Entity Rotator") .. "\n" .. S("Rotate pointed entity") .."\n".. S("Punch: Yaw") .."\n".. @@ -260,11 +260,11 @@ local mover_config = function(itemstack, user, pointed_thing) dist = dist + 1 end meta:set_int("distance", dist) - minetest.chat_send_player(user:get_player_name(), S("distance=@1/10", dist*2)) + core.chat_send_player(user:get_player_name(), S("distance=@1/10", dist*2)) return itemstack end -minetest.register_tool("testtools:object_mover", { +core.register_tool("testtools:object_mover", { description = S("Object Mover") .."\n".. S("Move pointed object towards or away from you") .."\n".. S("Punch: Move by distance").."\n".. @@ -285,7 +285,7 @@ minetest.register_tool("testtools:object_mover", { return end local yaw = user:get_look_horizontal() - local dir = minetest.yaw_to_dir(yaw) + local dir = core.yaw_to_dir(yaw) local pos = obj:get_pos() local pitch = user:get_look_vertical() if pitch > 0.25 * math.pi then @@ -313,7 +313,7 @@ minetest.register_tool("testtools:object_mover", { -minetest.register_tool("testtools:entity_scaler", { +core.register_tool("testtools:entity_scaler", { description = S("Entity Visual Scaler") .."\n".. S("Scale visual size of entities") .."\n".. S("Punch: Increase size") .."\n".. @@ -364,14 +364,14 @@ local next_brand_num = 1 function testtools.get_branded_object(name) if name:sub(1, 7) == "player:" then - return minetest.get_player_by_name(name:sub(8)) + return core.get_player_by_name(name:sub(8)) elseif name:sub(1, 4) == "obj:" then return branded_objects[tonumber(name:sub(5)) or 0] end return nil end -minetest.register_tool("testtools:branding_iron", { +core.register_tool("testtools:branding_iron", { description = S("Branding Iron") .."\n".. S("Give an object a temporary name.") .."\n".. S("Punch object: Brand the object") .."\n".. @@ -398,7 +398,7 @@ minetest.register_tool("testtools:branding_iron", { next_brand_num = next_brand_num + 1 branded_objects[brand_num] = obj - minetest.chat_send_player(user:get_player_name(), S(msg, "obj:"..brand_num)) + core.chat_send_player(user:get_player_name(), S(msg, "obj:"..brand_num)) end, }) @@ -409,7 +409,7 @@ local function get_entity_list() if entity_list then return entity_list end - local ents = minetest.registered_entities + local ents = core.registered_entities local list = {} for k,_ in pairs(ents) do table.insert(list, k) @@ -418,7 +418,7 @@ local function get_entity_list() entity_list = list return entity_list end -minetest.register_tool("testtools:entity_spawner", { +core.register_tool("testtools:entity_spawner", { description = S("Entity Spawner") .."\n".. S("Spawns entities") .."\n".. S("Punch: Select entity to spawn") .."\n".. @@ -430,9 +430,9 @@ minetest.register_tool("testtools:entity_spawner", { if pointed_thing.type == "node" then if selections[name] then local pos = pointed_thing.above - minetest.add_entity(pos, get_entity_list()[selections[name]]) + core.add_entity(pos, get_entity_list()[selections[name]]) else - minetest.chat_send_player(name, S("Select an entity first (with punch key)!")) + core.chat_send_player(name, S("Select an entity first (with punch key)!")) end end end, @@ -444,7 +444,7 @@ minetest.register_tool("testtools:entity_spawner", { local list = table.concat(get_entity_list(), ",") local name = user:get_player_name() local sel = selections[name] or "" - minetest.show_formspec(name, "testtools:entity_list", + core.show_formspec(name, "testtools:entity_list", "size[9,9]".. "textlist[0,0;9,8;entity_list;"..list..";"..sel..";false]".. "button[0,8;4,1;spawn;Spawn entity]" @@ -508,7 +508,7 @@ local editor_formspec = function(playername, obj, value, sel) local ent = obj:get_luaentity() title = S("Object properties of @1", ent.name) end - minetest.show_formspec(playername, "testtools:object_editor", + core.show_formspec(playername, "testtools:object_editor", "size[9,9]".. "label[0,0;"..F(title).."]".. "textlist[0,0.5;9,7.5;object_props;"..list..";"..sel..";false]".. @@ -518,7 +518,7 @@ local editor_formspec = function(playername, obj, value, sel) ) end -minetest.register_tool("testtools:object_editor", { +core.register_tool("testtools:object_editor", { description = S("Object Property Editor") .."\n".. S("Edit properties of objects") .."\n".. S("Punch object: Edit object") .."\n".. @@ -582,7 +582,7 @@ local attacher_config = function(itemstack, user, pointed_thing) elseif rot_x < 0 then rot_x = math.pi * (15/8) end - minetest.chat_send_player(name, S("rotation=@1", minetest.pos_to_string({x=rot_x,y=0,z=0}))) + core.chat_send_player(name, S("rotation=@1", core.pos_to_string({x=rot_x,y=0,z=0}))) meta:set_float("rot_x", rot_x) else local pos_y @@ -596,13 +596,13 @@ local attacher_config = function(itemstack, user, pointed_thing) else pos_y = pos_y + 1 end - minetest.chat_send_player(name, S("position=@1", minetest.pos_to_string({x=0,y=pos_y,z=0}))) + core.chat_send_player(name, S("position=@1", core.pos_to_string({x=0,y=pos_y,z=0}))) meta:set_int("pos_y", pos_y) end return itemstack end -minetest.register_tool("testtools:object_attacher", { +core.register_tool("testtools:object_attacher", { description = S("Object Attacher") .."\n".. S("Attach object to another") .."\n".. S("Punch objects to first select parent object, then the child object to attach") .."\n".. @@ -631,9 +631,9 @@ minetest.register_tool("testtools:object_attacher", { if ctrl.sneak then if selected_object:get_attach() then selected_object:set_detach() - minetest.chat_send_player(name, S("Object detached!")) + core.chat_send_player(name, S("Object detached!")) else - minetest.chat_send_player(name, S("Object is not attached!")) + core.chat_send_player(name, S("Object is not attached!")) end return end @@ -654,13 +654,13 @@ minetest.register_tool("testtools:object_attacher", { ename = selected_object:get_player_name() end if selected_object == parent then - minetest.chat_send_player(name, S("Parent object selected: @1", ename)) + core.chat_send_player(name, S("Parent object selected: @1", ename)) elseif selected_object == child then - minetest.chat_send_player(name, S("Child object selected: @1", ename)) + core.chat_send_player(name, S("Child object selected: @1", ename)) end if parent and child then if parent == child then - minetest.chat_send_player(name, S("Can't attach an object to itself!")) + core.chat_send_player(name, S("Can't attach an object to itself!")) ent_parent[name] = nil ent_child[name] = nil return @@ -678,10 +678,10 @@ minetest.register_tool("testtools:object_attacher", { child:set_attach(parent, "", offset, angle) local check_parent = child:get_attach() if check_parent then - minetest.chat_send_player(name, S("Object attached! position=@1, rotation=@2", - minetest.pos_to_string(offset), minetest.pos_to_string(angle))) + core.chat_send_player(name, S("Object attached! position=@1, rotation=@2", + core.pos_to_string(offset), core.pos_to_string(angle))) else - minetest.chat_send_player(name, S("Attachment failed!")) + core.chat_send_player(name, S("Attachment failed!")) end ent_parent[name] = nil ent_child[name] = nil @@ -700,7 +700,7 @@ local function print_object(obj) end end -minetest.register_tool("testtools:children_getter", { +core.register_tool("testtools:children_getter", { description = S("Children Getter") .."\n".. S("Shows list of objects attached to object") .."\n".. S("Punch object to show its 'children'") .."\n".. @@ -734,7 +734,7 @@ minetest.register_tool("testtools:children_getter", { else ret = S("Children of @1:", self_name) .. "\n" .. ret end - minetest.chat_send_player(user:get_player_name(), ret) + core.chat_send_player(user:get_player_name(), ret) end end, }) @@ -743,7 +743,7 @@ minetest.register_tool("testtools:children_getter", { local function use_loadstring(param, player) -- For security reasons, require 'server' priv, just in case -- someone is actually crazy enough to run this on a public server. - local privs = minetest.get_player_privs(player:get_player_name()) + local privs = core.get_player_privs(player:get_player_name()) if not privs.server then return false, "You need 'server' privilege to change object properties!" end @@ -794,14 +794,14 @@ local function show_meta_formspec(user, metatype, pos_or_item, key, value, keyli local formname if metatype == "node" then formname = "testtools:node_meta_editor" - extra_label = S("pos = @1", minetest.pos_to_string(pos_or_item)) + extra_label = S("pos = @1", core.pos_to_string(pos_or_item)) else formname = "testtools:item_meta_editor" extra_label = S("item = @1", pos_or_item:get_name()) end form = form .. "label[0,7.2;"..F(extra_label).."]" - minetest.show_formspec(user:get_player_name(), formname, form) + core.show_formspec(user:get_player_name(), formname, form) end local function get_meta_keylist(meta, playername, escaped) @@ -822,7 +822,7 @@ local function get_meta_keylist(meta, playername, escaped) return table.concat(ekeys, ",") end -minetest.register_tool("testtools:node_meta_editor", { +core.register_tool("testtools:node_meta_editor", { description = S("Node Meta Editor") .. "\n" .. S("Place: Edit node metadata"), inventory_image = "testtools_node_meta_editor.png", @@ -836,7 +836,7 @@ minetest.register_tool("testtools:node_meta_editor", { end local pos = pointed_thing.under node_meta_posses[user:get_player_name()] = pos - local meta = minetest.get_meta(pos) + local meta = core.get_meta(pos) local inv = meta:get_inventory() show_meta_formspec(user, "node", pos, "", "", get_meta_keylist(meta, user:get_player_name(), true)) return itemstack @@ -861,7 +861,7 @@ local function use_item_meta_editor(itemstack, user, pointed_thing) end local item_to_edit = get_item_next_to_wielded_item(user) if item_to_edit:is_empty() then - minetest.chat_send_player(user:get_player_name(), S("Place an item next to the Item Meta Editor in your inventory first!")) + core.chat_send_player(user:get_player_name(), S("Place an item next to the Item Meta Editor in your inventory first!")) return itemstack end local meta = item_to_edit:get_meta() @@ -869,7 +869,7 @@ local function use_item_meta_editor(itemstack, user, pointed_thing) return itemstack end -minetest.register_tool("testtools:item_meta_editor", { +core.register_tool("testtools:item_meta_editor", { description = S("Item Meta Editor") .. "\n" .. S("Punch/Place: Edit item metadata of item in the next inventory slot"), inventory_image = "testtools_item_meta_editor.png", @@ -879,18 +879,18 @@ minetest.register_tool("testtools:item_meta_editor", { on_place = use_item_meta_editor, }) -minetest.register_on_player_receive_fields(function(player, formname, fields) +core.register_on_player_receive_fields(function(player, formname, fields) if not (player and player:is_player()) then return end if formname == "testtools:entity_list" then local name = player:get_player_name() if fields.entity_list then - local expl = minetest.explode_textlist_event(fields.entity_list) + local expl = core.explode_textlist_event(fields.entity_list) if expl.type == "DCL" then local pos = vector.add(player:get_pos(), {x=0,y=1,z=0}) selections[name] = expl.index - minetest.add_entity(pos, get_entity_list()[expl.index]) + core.add_entity(pos, get_entity_list()[expl.index]) return elseif expl.type == "CHG" then selections[name] = expl.index @@ -898,13 +898,13 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end elseif fields.spawn and selections[name] then local pos = vector.add(player:get_pos(), {x=0,y=1,z=0}) - minetest.add_entity(pos, get_entity_list()[selections[name]]) + core.add_entity(pos, get_entity_list()[selections[name]]) return end elseif formname == "testtools:object_editor" then local name = player:get_player_name() if fields.object_props then - local expl = minetest.explode_textlist_event(fields.object_props) + local expl = core.explode_textlist_event(fields.object_props) if expl.type == "DCL" or expl.type == "CHG" then property_formspec_index[name] = expl.index @@ -933,7 +933,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) if success then props[key] = str else - minetest.chat_send_player(name, str) + core.chat_send_player(name, str) return end selected_objects[name]:set_properties(props) @@ -968,7 +968,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) pos_or_item = get_item_next_to_wielded_item(player) end if fields.keylist then - local evnt = minetest.explode_textlist_event(fields.keylist) + local evnt = core.explode_textlist_event(fields.keylist) if evnt.type == "DCL" or evnt.type == "CHG" then local keylist_table = meta_latest_keylist[name] if metatype == "node" and not pos_or_item then @@ -976,7 +976,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end local meta if metatype == "node" then - meta = minetest.get_meta(pos_or_item) + meta = core.get_meta(pos_or_item) else meta = pos_or_item:get_meta() end @@ -1002,7 +1002,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end local meta if metatype == "node" then - meta = minetest.get_meta(pos_or_item) + meta = core.get_meta(pos_or_item) elseif metatype == "item" then if pos_or_item:is_empty() then return @@ -1022,7 +1022,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end end) -minetest.register_on_leaveplayer(function(player) +core.register_on_leaveplayer(function(player) local name = player:get_player_name() meta_latest_keylist[name] = nil node_meta_posses[name] = nil @@ -1030,7 +1030,7 @@ end) -- Pointing Staffs -minetest.register_tool("testtools:blocked_pointing_staff", { +core.register_tool("testtools:blocked_pointing_staff", { description = S("Blocked Pointing Staff").."\n".. S("Can point the Blocking Pointable Node/Object and ".. "the Pointable Node/Object is point blocking."), @@ -1047,7 +1047,7 @@ minetest.register_tool("testtools:blocked_pointing_staff", { } }) -minetest.register_tool("testtools:ultimate_pointing_staff", { +core.register_tool("testtools:ultimate_pointing_staff", { description = S("Ultimate Pointing Staff").."\n".. S("Can point all pointable test nodes, objects and liquids."), inventory_image = "testtools_ultimate_pointing_staff.png", diff --git a/games/devtest/mods/testtools/light.lua b/games/devtest/mods/testtools/light.lua index afca9a489..861a3587c 100644 --- a/games/devtest/mods/testtools/light.lua +++ b/games/devtest/mods/testtools/light.lua @@ -1,5 +1,5 @@ -local S = minetest.get_translator("testtools") +local S = core.get_translator("testtools") local function get_func(is_place) return function(itemstack, user, pointed_thing) @@ -13,19 +13,19 @@ local function get_func(is_place) return end - local node = minetest.get_node(pos) - local pstr = minetest.pos_to_string(pos) - local time = minetest.get_timeofday() - local sunlight = minetest.get_natural_light(pos) - local artificial = minetest.get_artificial_light(node.param1) + local node = core.get_node(pos) + local pstr = core.pos_to_string(pos) + local time = core.get_timeofday() + local sunlight = core.get_natural_light(pos) + local artificial = core.get_artificial_light(node.param1) local message = ("pos=%s | param1=0x%02x | " .. "sunlight=%d | artificial=%d | timeofday=%.5f" ) :format(pstr, node.param1, sunlight, artificial, time) - minetest.chat_send_player(user:get_player_name(), message) + core.chat_send_player(user:get_player_name(), message) end end -minetest.register_tool("testtools:lighttool", { +core.register_tool("testtools:lighttool", { description = S("Light Tool") .. "\n" .. S("Show light values of node") .. "\n" .. S("Punch: Light of node above touched node") .. "\n" .. diff --git a/games/devtest/mods/testtools/node_box_visualizer.lua b/games/devtest/mods/testtools/node_box_visualizer.lua index 60ec8a518..444f939b4 100644 --- a/games/devtest/mods/testtools/node_box_visualizer.lua +++ b/games/devtest/mods/testtools/node_box_visualizer.lua @@ -1,6 +1,6 @@ -local S = minetest.get_translator("testtools") +local S = core.get_translator("testtools") -minetest.register_entity("testtools:visual_box", { +core.register_entity("testtools:visual_box", { initial_properties = { visual = "cube", textures = { @@ -14,11 +14,11 @@ minetest.register_entity("testtools:visual_box", { }, on_activate = function(self) - self.timestamp = minetest.get_us_time() + 5000000 + self.timestamp = core.get_us_time() + 5000000 end, on_step = function(self) - if minetest.get_us_time() >= self.timestamp then + if core.get_us_time() >= self.timestamp then self.object:remove() end end, @@ -35,14 +35,14 @@ local function visualizer_on_use(itemstack, user, pointed_thing) local meta = itemstack:get_meta() local box_type = meta:get("box_type") or DEFAULT_BOX_TYPE - local result = minetest.get_node_boxes(box_type, pointed_thing.under) + local result = core.get_node_boxes(box_type, pointed_thing.under) local t = "testtools_visual_" .. box_type .. ".png" for _, box in ipairs(result) do local box_min = pointed_thing.under + vector.new(box[1], box[2], box[3]) local box_max = pointed_thing.under + vector.new(box[4], box[5], box[6]) local box_center = (box_min + box_max) / 2 - local obj = minetest.add_entity(box_center, "testtools:visual_box") + local obj = core.add_entity(box_center, "testtools:visual_box") if not obj then break end @@ -62,12 +62,12 @@ local function visualizer_on_place(itemstack, placer, pointed_thing) local new_value = BOX_TYPES[(prev_index % #BOX_TYPES) + 1] meta:set_string("box_type", new_value) - minetest.chat_send_player(placer:get_player_name(), S("[Node Box Visualizer] box_type = @1", new_value)) + core.chat_send_player(placer:get_player_name(), S("[Node Box Visualizer] box_type = @1", new_value)) return itemstack end -minetest.register_tool("testtools:node_box_visualizer", { +core.register_tool("testtools:node_box_visualizer", { description = S("Node Box Visualizer") .. "\n" .. S("Punch: Show node/collision/selection boxes of the pointed node") .. "\n" .. S("Place: Change selected box type (default: selection box)"), diff --git a/games/devtest/mods/testtools/particles.lua b/games/devtest/mods/testtools/particles.lua index 18efe2572..17f4f5c80 100644 --- a/games/devtest/mods/testtools/particles.lua +++ b/games/devtest/mods/testtools/particles.lua @@ -1,10 +1,10 @@ -minetest.register_tool("testtools:particle_spawner", { +core.register_tool("testtools:particle_spawner", { description = "Particle Spawner".."\n".. "Punch: Spawn random test particle", inventory_image = "testtools_particle_spawner.png", groups = { testtool = 1, disable_repair = 1 }, on_use = function(itemstack, user, pointed_thing) - local pos = minetest.get_pointed_thing_position(pointed_thing, true) + local pos = core.get_pointed_thing_position(pointed_thing, true) if pos == nil then if user then pos = user:get_pos() @@ -20,7 +20,7 @@ minetest.register_tool("testtools:particle_spawner", { anim = {type="vertical_frames", aspect_w=16, aspect_h=16, length=3.3} end - minetest.add_particle({ + core.add_particle({ pos = pos, velocity = {x=0, y=0, z=0}, acceleration = {x=0, y=0.04, z=0}, diff --git a/games/devtest/mods/testtools/privatizer.lua b/games/devtest/mods/testtools/privatizer.lua index f4654eb70..54c350830 100644 --- a/games/devtest/mods/testtools/privatizer.lua +++ b/games/devtest/mods/testtools/privatizer.lua @@ -1,28 +1,28 @@ -minetest.register_tool("testtools:privatizer", { +core.register_tool("testtools:privatizer", { description = "Node Meta Privatizer".."\n".. "Punch: Marks 'infotext' and 'formspec' meta fields of chest as private", inventory_image = "testtools_privatizer.png", groups = { testtool = 1, disable_repair = 1 }, on_use = function(itemstack, user, pointed_thing) if pointed_thing.type == "node" then - local node = minetest.get_node(pointed_thing.under) - if minetest.get_item_group(node.name, "meta_is_privatizable") == 1 then + local node = core.get_node(pointed_thing.under) + if core.get_item_group(node.name, "meta_is_privatizable") == 1 then local p = pointed_thing.under - minetest.log("action", "[testtools] Privatizer used at "..minetest.pos_to_string(p)) - minetest.get_meta(p):mark_as_private({"infotext", "formspec"}) + core.log("action", "[testtools] Privatizer used at "..core.pos_to_string(p)) + core.get_meta(p):mark_as_private({"infotext", "formspec"}) if user and user:is_player() then - minetest.chat_send_player(user:get_player_name(), "Node metadata (infotext, formspec) set private!") + core.chat_send_player(user:get_player_name(), "Node metadata (infotext, formspec) set private!") end return elseif node.name == "chest_of_everything:chest" then if user and user:is_player() then - minetest.chat_send_player(user:get_player_name(), "Privatizer can't be used on the Chest of Everything. Use it on a normal chest.") + core.chat_send_player(user:get_player_name(), "Privatizer can't be used on the Chest of Everything. Use it on a normal chest.") end return end end if user and user:is_player() then - minetest.chat_send_player(user:get_player_name(), "Privatizer can only be used on chest!") + core.chat_send_player(user:get_player_name(), "Privatizer can only be used on chest!") end end, }) diff --git a/games/devtest/mods/testtranslations/init.lua b/games/devtest/mods/testtranslations/init.lua index bb3696e7e..a2de998a2 100644 --- a/games/devtest/mods/testtranslations/init.lua +++ b/games/devtest/mods/testtranslations/init.lua @@ -1,11 +1,11 @@ -local S, NS = minetest.get_translator("testtranslations") +local S, NS = core.get_translator("testtranslations") local function send_compare(name, text) core.chat_send_player(name, ("%s | %s | %s"):format( core.get_translated_string("", text), text, core.get_translated_string("fr", text))) end -minetest.register_chatcommand("testtranslations", { +core.register_chatcommand("testtranslations", { params = "", description = "Test translations", privs = {}, diff --git a/games/devtest/mods/tiled/init.lua b/games/devtest/mods/tiled/init.lua index 7e2bdba1a..51e1fda21 100644 --- a/games/devtest/mods/tiled/init.lua +++ b/games/devtest/mods/tiled/init.lua @@ -1,7 +1,7 @@ local align_help = "Texture spans over a space of 8×8 nodes" local align_help_n = "Tiles looks the same for every node" -minetest.register_node("tiled:tiled", { +core.register_node("tiled:tiled", { description = "Tiled Node (world-aligned)".."\n"..align_help, tiles = {{ name = "tiled_tiled.png", @@ -11,7 +11,7 @@ minetest.register_node("tiled:tiled", { groups = {cracky=3}, }) -minetest.register_node("tiled:tiled_rooted", { +core.register_node("tiled:tiled_rooted", { description = "Tiled 'plantlike_rooted' Node (world-aligned)".."\n".. "Base node texture spans over a space of 8×8 nodes".."\n".. "A plantlike thing grows on top", @@ -26,7 +26,7 @@ minetest.register_node("tiled:tiled_rooted", { groups = {cracky=3}, }) -minetest.register_node("tiled:tiled_n", { +core.register_node("tiled:tiled_n", { description = "Tiled Node (node-aligned)".."\n"..align_help_n, tiles = {{ name = "tiled_tiled_node.png", diff --git a/games/devtest/mods/unittests/crafting.lua b/games/devtest/mods/unittests/crafting.lua index d5ffc2e1f..38b1202e3 100644 --- a/games/devtest/mods/unittests/crafting.lua +++ b/games/devtest/mods/unittests/crafting.lua @@ -1,31 +1,31 @@ dofile(core.get_modpath(core.get_current_modname()) .. "/crafting_prepare.lua") --- Test minetest.clear_craft function +-- Test core.clear_craft function local function test_clear_craft() -- Clearing by output - minetest.register_craft({ + core.register_craft({ output = "foo", recipe = {{"bar"}} }) - minetest.register_craft({ + core.register_craft({ output = "foo 4", recipe = {{"foo", "bar"}} }) - assert(#minetest.get_all_craft_recipes("foo") == 2) - minetest.clear_craft({output="foo"}) - assert(minetest.get_all_craft_recipes("foo") == nil) + assert(#core.get_all_craft_recipes("foo") == 2) + core.clear_craft({output="foo"}) + assert(core.get_all_craft_recipes("foo") == nil) -- Clearing by input - minetest.register_craft({ + core.register_craft({ output = "foo 4", recipe = {{"foo", "bar"}} }) - assert(#minetest.get_all_craft_recipes("foo") == 1) - minetest.clear_craft({recipe={{"foo", "bar"}}}) - assert(minetest.get_all_craft_recipes("foo") == nil) + assert(#core.get_all_craft_recipes("foo") == 1) + core.clear_craft({recipe={{"foo", "bar"}}}) + assert(core.get_all_craft_recipes("foo") == nil) end unittests.register("test_clear_craft", test_clear_craft) --- Test minetest.get_craft_result function +-- Test core.get_craft_result function local function test_get_craft_result() -- normal local input = { @@ -33,12 +33,12 @@ local function test_get_craft_result() width = 2, items = {"", "unittests:coal_lump", "", "unittests:stick"} } - minetest.log("info", "[unittests] torch crafting input: "..dump(input)) - local output, decremented_input = minetest.get_craft_result(input) - minetest.log("info", "[unittests] torch crafting output: "..dump(output)) - minetest.log("info", "[unittests] torch crafting decremented input: "..dump(decremented_input)) + core.log("info", "[unittests] torch crafting input: "..dump(input)) + local output, decremented_input = core.get_craft_result(input) + core.log("info", "[unittests] torch crafting output: "..dump(output)) + core.log("info", "[unittests] torch crafting decremented input: "..dump(decremented_input)) assert(output.item) - minetest.log("info", "[unittests] torch crafting output.item:to_table(): "..dump(output.item:to_table())) + core.log("info", "[unittests] torch crafting output.item:to_table(): "..dump(output.item:to_table())) assert(output.item:get_name() == "unittests:torch") assert(output.item:get_count() == 4) @@ -48,10 +48,10 @@ local function test_get_craft_result() width = 1, items = {"unittests:coal_lump"} } - minetest.log("info", "[unittests] coal fuel input: "..dump(input)) - output, decremented_input = minetest.get_craft_result(input) - minetest.log("info", "[unittests] coal fuel output: "..dump(output)) - minetest.log("info", "[unittests] coal fuel decremented input: "..dump(decremented_input)) + core.log("info", "[unittests] coal fuel input: "..dump(input)) + output, decremented_input = core.get_craft_result(input) + core.log("info", "[unittests] coal fuel output: "..dump(output)) + core.log("info", "[unittests] coal fuel decremented input: "..dump(decremented_input)) assert(output.time) assert(output.time > 0) @@ -61,14 +61,14 @@ local function test_get_craft_result() width = 1, items = {"unittests:iron_lump"} } - minetest.log("info", "[unittests] iron lump cooking input: "..dump(output)) - output, decremented_input = minetest.get_craft_result(input) - minetest.log("info", "[unittests] iron lump cooking output: "..dump(output)) - minetest.log("info", "[unittests] iron lump cooking decremented input: "..dump(decremented_input)) + core.log("info", "[unittests] iron lump cooking input: "..dump(output)) + output, decremented_input = core.get_craft_result(input) + core.log("info", "[unittests] iron lump cooking output: "..dump(output)) + core.log("info", "[unittests] iron lump cooking decremented input: "..dump(decremented_input)) assert(output.time) assert(output.time > 0) assert(output.item) - minetest.log("info", "[unittests] iron lump cooking output.item:to_table(): "..dump(output.item:to_table())) + core.log("info", "[unittests] iron lump cooking output.item:to_table(): "..dump(output.item:to_table())) assert(output.item:get_name() == "unittests:steel_ingot") assert(output.item:get_count() == 1) @@ -79,12 +79,12 @@ local function test_get_craft_result() -- Using a wear of 60000 items = {"unittests:repairable_tool 1 60000", "unittests:repairable_tool 1 60000"} } - minetest.log("info", "[unittests] repairable tool crafting input: "..dump(input)) - output, decremented_input = minetest.get_craft_result(input) - minetest.log("info", "[unittests] repairable tool crafting output: "..dump(output)) - minetest.log("info", "[unittests] repairable tool crafting decremented input: "..dump(decremented_input)) + core.log("info", "[unittests] repairable tool crafting input: "..dump(input)) + output, decremented_input = core.get_craft_result(input) + core.log("info", "[unittests] repairable tool crafting output: "..dump(output)) + core.log("info", "[unittests] repairable tool crafting decremented input: "..dump(decremented_input)) assert(output.item) - minetest.log("info", "[unittests] repairable tool crafting output.item:to_table(): "..dump(output.item:to_table())) + core.log("info", "[unittests] repairable tool crafting output.item:to_table(): "..dump(output.item:to_table())) assert(output.item:get_name() == "unittests:repairable_tool") -- Test the wear value. -- See src/craftdef.cpp in Luanti source code for the formula. The formula to calculate @@ -100,12 +100,12 @@ local function test_get_craft_result() width = 2, items = {"unittests:unrepairable_tool 1 60000", "unittests:unrepairable_tool 1 60000"} } - minetest.log("info", "[unittests] unrepairable tool crafting input: "..dump(input)) - output, decremented_input = minetest.get_craft_result(input) - minetest.log("info", "[unittests] unrepairable tool crafting output: "..dump(output)) - minetest.log("info", "[unittests] unrepairable tool crafting decremented input: "..dump(decremented_input)) + core.log("info", "[unittests] unrepairable tool crafting input: "..dump(input)) + output, decremented_input = core.get_craft_result(input) + core.log("info", "[unittests] unrepairable tool crafting output: "..dump(output)) + core.log("info", "[unittests] unrepairable tool crafting decremented input: "..dump(decremented_input)) assert(output.item) - minetest.log("info", "[unittests] unrepairable tool crafting output.item:to_table(): "..dump(output.item:to_table())) + core.log("info", "[unittests] unrepairable tool crafting output.item:to_table(): "..dump(output.item:to_table())) -- unrepairable tool must not yield any output assert(output.item:is_empty()) end diff --git a/games/devtest/mods/unittests/crafting_prepare.lua b/games/devtest/mods/unittests/crafting_prepare.lua index 5cf5775e0..63ad0a55b 100644 --- a/games/devtest/mods/unittests/crafting_prepare.lua +++ b/games/devtest/mods/unittests/crafting_prepare.lua @@ -1,30 +1,30 @@ -- Registering some dummy items and recipes for the crafting tests -minetest.register_craftitem("unittests:torch", { +core.register_craftitem("unittests:torch", { description = "Crafting Test Item: Torch", inventory_image = "unittests_torch.png", groups = { dummy = 1 }, }) -minetest.register_craftitem("unittests:coal_lump", { +core.register_craftitem("unittests:coal_lump", { description = "Crafting Test Item: Coal Lump", inventory_image = "unittests_coal_lump.png", groups = { dummy = 1 }, }) -minetest.register_craftitem("unittests:stick", { +core.register_craftitem("unittests:stick", { description = "Crafting Test Item: Stick", inventory_image = "unittests_stick.png", groups = { dummy = 1 }, }) -minetest.register_craftitem("unittests:iron_lump", { +core.register_craftitem("unittests:iron_lump", { description = "Crafting Test Item: Iron Lump", inventory_image = "unittests_iron_lump.png", groups = { dummy = 1 }, }) -minetest.register_craftitem("unittests:steel_ingot", { +core.register_craftitem("unittests:steel_ingot", { description = "Crafting Test Item: Steel Ingot", inventory_image = "unittests_steel_ingot.png", @@ -33,13 +33,13 @@ minetest.register_craftitem("unittests:steel_ingot", { -- Use aliases in recipes for more complete testing -minetest.register_alias("unittests:steel_ingot_alias", "unittests:steel_ingot") -minetest.register_alias("unittests:coal_lump_alias", "unittests:coal_lump") -minetest.register_alias("unittests:iron_lump_alias", "unittests:iron_lump") +core.register_alias("unittests:steel_ingot_alias", "unittests:steel_ingot") +core.register_alias("unittests:coal_lump_alias", "unittests:coal_lump") +core.register_alias("unittests:iron_lump_alias", "unittests:iron_lump") -- Recipes for tests: Normal crafting, cooking and fuel -minetest.register_craft({ +core.register_craft({ output = 'unittests:torch 4', recipe = { {'unittests:coal_lump_alias'}, @@ -47,26 +47,26 @@ minetest.register_craft({ } }) -minetest.register_craft({ +core.register_craft({ type = "cooking", output = "unittests:steel_ingot_alias", recipe = "unittests:iron_lump_alias", }) -minetest.register_craft({ +core.register_craft({ type = "fuel", recipe = "unittests:coal_lump_alias", burntime = 40, }) -- Test tool repair -minetest.register_craft({ +core.register_craft({ type = "toolrepair", additional_wear = -0.05, }) -- Test the disable_repair=1 group -minetest.register_tool("unittests:unrepairable_tool", { +core.register_tool("unittests:unrepairable_tool", { description = "Crafting Test Item: Unrepairable Tool", inventory_image = "unittests_unrepairable_tool.png", tool_capabilities = { @@ -79,7 +79,7 @@ minetest.register_tool("unittests:unrepairable_tool", { groups = { disable_repair = 1, dummy = 1 } }) -minetest.register_tool("unittests:repairable_tool", { +core.register_tool("unittests:repairable_tool", { description = "Crafting Test Item: Repairable Tool", inventory_image = "unittests_repairable_tool.png", tool_capabilities = { diff --git a/games/devtest/mods/unittests/init.lua b/games/devtest/mods/unittests/init.lua index a967a986f..724334326 100644 --- a/games/devtest/mods/unittests/init.lua +++ b/games/devtest/mods/unittests/init.lua @@ -193,7 +193,7 @@ dofile(modpath .. "/color.lua") local function send_results(name, ok) core.chat_send_player(name, - minetest.colorize(ok and "green" or "red", + core.colorize(ok and "green" or "red", (ok and "All devtest unit tests passed." or "There were devtest unit test failures.") .. " Check the console for detailed output.")) @@ -206,7 +206,7 @@ if core.settings:get_bool("devtest_unittests_autostart", false) then -- to write status information to the filesystem local old_on_finished = unittests.on_finished unittests.on_finished = function(ok) - for _, player in ipairs(minetest.get_connected_players()) do + for _, player in ipairs(core.get_connected_players()) do send_results(player:get_player_name(), ok) end test_results = ok @@ -214,7 +214,7 @@ if core.settings:get_bool("devtest_unittests_autostart", false) then end coroutine.wrap(unittests.run_all)() end) - minetest.register_on_joinplayer(function(player) + core.register_on_joinplayer(function(player) if test_results == nil then return -- tests haven't completed yet end diff --git a/games/devtest/mods/unittests/inventory.lua b/games/devtest/mods/unittests/inventory.lua index 8e1e16b3b..cffcba490 100644 --- a/games/devtest/mods/unittests/inventory.lua +++ b/games/devtest/mods/unittests/inventory.lua @@ -20,7 +20,7 @@ local function compare_lists(a, b) end local function test_inventory() - local inv = minetest.create_detached_inventory("test") + local inv = core.create_detached_inventory("test") inv:set_lists({test = {""}}) assert(inv:get_list("test")) @@ -66,8 +66,8 @@ local function test_inventory() assert(compare_lists(before, after)) local location = inv:get_location() - assert(minetest.remove_detached_inventory("test")) - assert(not minetest.get_inventory(location)) + assert(core.remove_detached_inventory("test")) + assert(not core.get_inventory(location)) end unittests.register("test_inventory", test_inventory) diff --git a/games/devtest/mods/unittests/itemdescription.lua b/games/devtest/mods/unittests/itemdescription.lua index 537b370a6..730248dec 100644 --- a/games/devtest/mods/unittests/itemdescription.lua +++ b/games/devtest/mods/unittests/itemdescription.lua @@ -1,15 +1,15 @@ local full_description = "Description Test Item\nFor testing item decription" -minetest.register_tool("unittests:description_test", { +core.register_tool("unittests:description_test", { description = full_description, inventory_image = "unittests_description_test.png", groups = { dummy = 1 }, }) -minetest.register_chatcommand("item_description", { +core.register_chatcommand("item_description", { param = "", description = "Show the short and full description of the wielded item.", func = function(name) - local player = minetest.get_player_by_name(name) + local player = core.get_player_by_name(name) local item = player:get_wielded_item() return true, string.format("short_description: %s\ndescription: %s", item:get_short_description(), item:get_description()) @@ -24,9 +24,9 @@ local function test_short_desc() local stack = ItemStack("unittests:description_test") assert(stack:get_short_description() == "Description Test Item") assert(get_short_description("unittests:description_test") == "Description Test Item") - assert(minetest.registered_items["unittests:description_test"].short_description == nil) + assert(core.registered_items["unittests:description_test"].short_description == nil) assert(stack:get_description() == full_description) - assert(stack:get_description() == minetest.registered_items["unittests:description_test"].description) + assert(stack:get_description() == core.registered_items["unittests:description_test"].description) stack:get_meta():set_string("description", "Hello World") assert(stack:get_short_description() == "Hello World") diff --git a/games/devtest/mods/unittests/load_time.lua b/games/devtest/mods/unittests/load_time.lua index d437fba06..12f1a3848 100644 --- a/games/devtest/mods/unittests/load_time.lua +++ b/games/devtest/mods/unittests/load_time.lua @@ -1,13 +1,13 @@ -- Test item (un)registration and overriding do local itemname = "unittests:test_override_item" - minetest.register_craftitem(":" .. itemname, {description = "foo"}) - assert(assert(minetest.registered_items[itemname]).description == "foo") - minetest.override_item(itemname, {description = "bar"}) - assert(assert(minetest.registered_items[itemname]).description == "bar") - minetest.override_item(itemname, {}, {"description"}) + core.register_craftitem(":" .. itemname, {description = "foo"}) + assert(assert(core.registered_items[itemname]).description == "foo") + core.override_item(itemname, {description = "bar"}) + assert(assert(core.registered_items[itemname]).description == "bar") + core.override_item(itemname, {}, {"description"}) -- description has the empty string as a default - assert(assert(minetest.registered_items[itemname]).description == "") - minetest.unregister_item("unittests:test_override_item") - assert(minetest.registered_items["unittests:test_override_item"] == nil) + assert(assert(core.registered_items[itemname]).description == "") + core.unregister_item("unittests:test_override_item") + assert(core.registered_items["unittests:test_override_item"] == nil) end diff --git a/games/devtest/mods/unittests/metadata.lua b/games/devtest/mods/unittests/metadata.lua index defd81dd3..bdd51c3f3 100644 --- a/games/devtest/mods/unittests/metadata.lua +++ b/games/devtest/mods/unittests/metadata.lua @@ -116,6 +116,6 @@ end unittests.register("test_item_metadata", test_item_metadata) local function test_node_metadata(player, pos) - test_metadata(minetest.get_meta(pos)) + test_metadata(core.get_meta(pos)) end unittests.register("test_node_metadata", test_node_metadata, {map=true}) diff --git a/games/devtest/mods/unittests/misc.lua b/games/devtest/mods/unittests/misc.lua index b26ec753f..d01eed17d 100644 --- a/games/devtest/mods/unittests/misc.lua +++ b/games/devtest/mods/unittests/misc.lua @@ -73,8 +73,8 @@ end unittests.register("test_v3f_metatable", test_v3f_metatable, {player=true}) local function test_v3s16_metatable(player, pos) - local node = minetest.get_node(pos) - local found_pos = minetest.find_node_near(pos, 0, node.name, true) + local node = core.get_node(pos) + local found_pos = core.find_node_near(pos, 0, node.name, true) assert(vector.check(found_pos)) end unittests.register("test_v3s16_metatable", test_v3s16_metatable, {map=true}) @@ -181,7 +181,7 @@ local function test_write_json() for i = 1, 1000 do data = {data} end - local roundtripped = minetest.parse_json(minetest.write_json(data)) + local roundtripped = core.parse_json(core.write_json(data)) for i = 1, 1000 do roundtripped = roundtripped[1] end @@ -190,7 +190,7 @@ end unittests.register("test_write_json", test_write_json) local function test_game_info() - local info = minetest.get_game_info() + local info = core.get_game_info() local game_conf = Settings(info.path .. "/game.conf") assert(info.id == "devtest") assert(info.title == game_conf:get("title")) @@ -199,27 +199,27 @@ unittests.register("test_game_info", test_game_info) local function test_mapgen_edges(cb) -- Test that the map can extend to the expected edges and no further. - local min_edge, max_edge = minetest.get_mapgen_edges() + local min_edge, max_edge = core.get_mapgen_edges() local min_finished = {} local max_finished = {} local function finish() if #min_finished ~= 1 then return cb("Expected 1 block to emerge around mapgen minimum edge") end - if min_finished[1] ~= (min_edge / minetest.MAP_BLOCKSIZE):floor() then + if min_finished[1] ~= (min_edge / core.MAP_BLOCKSIZE):floor() then return cb("Expected block within minimum edge to emerge") end if #max_finished ~= 1 then return cb("Expected 1 block to emerge around mapgen maximum edge") end - if max_finished[1] ~= (max_edge / minetest.MAP_BLOCKSIZE):floor() then + if max_finished[1] ~= (max_edge / core.MAP_BLOCKSIZE):floor() then return cb("Expected block within maximum edge to emerge") end return cb() end local emerges_left = 2 local function emerge_block(blockpos, action, blocks_left, finished) - if action ~= minetest.EMERGE_CANCELLED then + if action ~= core.EMERGE_CANCELLED then table.insert(finished, blockpos) end if blocks_left == 0 then @@ -229,34 +229,34 @@ local function test_mapgen_edges(cb) end end end - minetest.emerge_area(min_edge:subtract(1), min_edge, emerge_block, min_finished) - minetest.emerge_area(max_edge, max_edge:add(1), emerge_block, max_finished) + core.emerge_area(min_edge:subtract(1), min_edge, emerge_block, min_finished) + core.emerge_area(max_edge, max_edge:add(1), emerge_block, max_finished) end unittests.register("test_mapgen_edges", test_mapgen_edges, {map=true, async=true}) local finish_test_on_mapblocks_changed -minetest.register_on_mapblocks_changed(function(modified_blocks, modified_block_count) +core.register_on_mapblocks_changed(function(modified_blocks, modified_block_count) if finish_test_on_mapblocks_changed then finish_test_on_mapblocks_changed(modified_blocks, modified_block_count) finish_test_on_mapblocks_changed = nil end end) local function test_on_mapblocks_changed(cb, player, pos) - local bp1 = (pos / minetest.MAP_BLOCKSIZE):floor() + local bp1 = (pos / core.MAP_BLOCKSIZE):floor() local bp2 = bp1:add(1) for _, bp in ipairs({bp1, bp2}) do -- Make a modification in the block. - local p = bp * minetest.MAP_BLOCKSIZE - minetest.load_area(p) - local meta = minetest.get_meta(p) + local p = bp * core.MAP_BLOCKSIZE + core.load_area(p) + local meta = core.get_meta(p) meta:set_int("test_on_mapblocks_changed", meta:get_int("test_on_mapblocks_changed") + 1) end finish_test_on_mapblocks_changed = function(modified_blocks, modified_block_count) if modified_block_count < 2 then return cb("Expected at least two mapblocks to be recorded as modified") end - if not modified_blocks[minetest.hash_node_position(bp1)] or - not modified_blocks[minetest.hash_node_position(bp2)] then + if not modified_blocks[core.hash_node_position(bp1)] or + not modified_blocks[core.hash_node_position(bp2)] then return cb("The expected mapblocks were not recorded as modified") end cb() diff --git a/games/devtest/mods/util_commands/init.lua b/games/devtest/mods/util_commands/init.lua index 6285d4754..8341901a8 100644 --- a/games/devtest/mods/util_commands/init.lua +++ b/games/devtest/mods/util_commands/init.lua @@ -1,8 +1,8 @@ -minetest.register_chatcommand("hotbar", { +core.register_chatcommand("hotbar", { params = "", description = "Set hotbar size", func = function(name, param) - local player = minetest.get_player_by_name(name) + local player = core.get_player_by_name(name) if not player then return false, "No player." end @@ -19,16 +19,16 @@ minetest.register_chatcommand("hotbar", { end, }) -minetest.register_chatcommand("hp", { +core.register_chatcommand("hp", { params = "", description = "Set your health", func = function(name, param) - local player = minetest.get_player_by_name(name) + local player = core.get_player_by_name(name) if not player then return false, "No player." end local hp = tonumber(param) - if not hp or minetest.is_nan(hp) or hp < 0 or hp > 65535 then + if not hp or core.is_nan(hp) or hp < 0 or hp > 65535 then return false, "Missing or incorrect hp parameter!" end player:set_hp(hp) @@ -36,32 +36,32 @@ minetest.register_chatcommand("hp", { end, }) -local s_infplace = minetest.settings:get("devtest_infplace") +local s_infplace = core.settings:get("devtest_infplace") if s_infplace == "true" then infplace = true elseif s_infplace == "false" then infplace = false else - infplace = minetest.is_creative_enabled("") + infplace = core.is_creative_enabled("") end -minetest.register_chatcommand("infplace", { +core.register_chatcommand("infplace", { params = "", description = "Toggle infinite node placement", func = function(name, param) infplace = not infplace if infplace then - minetest.chat_send_all("Infinite node placement enabled!") - minetest.log("action", "Infinite node placement enabled") + core.chat_send_all("Infinite node placement enabled!") + core.log("action", "Infinite node placement enabled") else - minetest.chat_send_all("Infinite node placement disabled!") - minetest.log("action", "Infinite node placement disabled") + core.chat_send_all("Infinite node placement disabled!") + core.log("action", "Infinite node placement disabled") end return true end, }) -minetest.register_chatcommand("detach", { +core.register_chatcommand("detach", { params = "[]", description = "Detach all objects nearby", func = function(name, param) @@ -72,11 +72,11 @@ minetest.register_chatcommand("detach", { if radius < 1 then radius = 1 end - local player = minetest.get_player_by_name(name) + local player = core.get_player_by_name(name) if not player then return false, "No player." end - local objs = minetest.get_objects_inside_radius(player:get_pos(), radius) + local objs = core.get_objects_inside_radius(player:get_pos(), radius) local num = 0 for o=1, #objs do if objs[o]:get_attach() then @@ -88,11 +88,11 @@ minetest.register_chatcommand("detach", { end, }) -minetest.register_chatcommand("use_tool", { +core.register_chatcommand("use_tool", { params = "(dig ) | (hit ) []", description = "Apply tool wear a number of times, as if it were used for digging", func = function(name, param) - local player = minetest.get_player_by_name(name) + local player = core.get_player_by_name(name) if not player then return false, "No player." end @@ -117,9 +117,9 @@ minetest.register_chatcommand("use_tool", { local wear = tool:get_wear() local dp if mode == "dig" then - dp = minetest.get_dig_params({[group]=3, level=level}, caps, wear) + dp = core.get_dig_params({[group]=3, level=level}, caps, wear) else - dp = minetest.get_hit_params({[group]=100}, caps, level, wear) + dp = core.get_hit_params({[group]=100}, caps, level, wear) end tool:add_wear(dp.wear) actual_uses = actual_uses + 1 @@ -141,15 +141,15 @@ minetest.register_chatcommand("use_tool", { -- Unlimited node placement -minetest.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack) +core.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack) if placer and placer:is_player() then return infplace end end) -- Don't pick up if the item is already in the inventory -local old_handle_node_drops = minetest.handle_node_drops -function minetest.handle_node_drops(pos, drops, digger) +local old_handle_node_drops = core.handle_node_drops +function core.handle_node_drops(pos, drops, digger) if not digger or not digger:is_player() or not infplace then return old_handle_node_drops(pos, drops, digger) end @@ -163,11 +163,11 @@ function minetest.handle_node_drops(pos, drops, digger) end end -minetest.register_chatcommand("set_displayed_itemcount", { +core.register_chatcommand("set_displayed_itemcount", { params = "(-s \"\" [-c ]) | -a ", description = "Set the displayed itemcount of the wielded item", func = function(name, param) - local player = minetest.get_player_by_name(name) + local player = core.get_player_by_name(name) local item = player:get_wielded_item() local meta = item:get_meta() local flag1 = param:sub(1, 2) @@ -181,7 +181,7 @@ minetest.register_chatcommand("set_displayed_itemcount", { end local s = param:sub(5, se - 1) if param:sub(se + 1, se + 4) == " -c " then - s = minetest.colorize(param:sub(se + 5), s) + s = core.colorize(param:sub(se + 5), s) end meta:set_string("count_meta", s) elseif flag1 == "-a" then @@ -198,11 +198,11 @@ minetest.register_chatcommand("set_displayed_itemcount", { end, }) -minetest.register_chatcommand("dump_item", { +core.register_chatcommand("dump_item", { params = "", description = "Prints a dump of the wielded item in table form", func = function(name, param) - local player = minetest.get_player_by_name(name) + local player = core.get_player_by_name(name) local item = player:get_wielded_item() local str = dump(item:to_table()) print(str) @@ -210,22 +210,22 @@ minetest.register_chatcommand("dump_item", { end, }) -minetest.register_chatcommand("dump_itemdef", { +core.register_chatcommand("dump_itemdef", { params = "", description = "Prints a dump of the wielded item's definition in table form", func = function(name, param) - local player = minetest.get_player_by_name(name) + local player = core.get_player_by_name(name) local str = dump(player:get_wielded_item():get_definition()) print(str) return true, str end, }) -minetest.register_chatcommand("dump_wear_bar", { +core.register_chatcommand("dump_wear_bar", { params = "", description = "Prints a dump of the wielded item's wear bar parameters in table form", func = function(name, param) - local player = minetest.get_player_by_name(name) + local player = core.get_player_by_name(name) local item = player:get_wielded_item() local str = dump(item:get_wear_bar_params()) print(str) @@ -238,6 +238,6 @@ core.register_chatcommand("set_saturation", { description = "Set the saturation for current player.", func = function(player_name, param) local saturation = tonumber(param) - minetest.get_player_by_name(player_name):set_lighting({saturation = saturation }) + core.get_player_by_name(player_name):set_lighting({saturation = saturation }) end }) From d60189915c4e2585051a33bbb0ea5de760da830f Mon Sep 17 00:00:00 2001 From: sfan5 Date: Sun, 27 Oct 2024 19:34:26 +0100 Subject: [PATCH 050/178] Remove 'mesetint' gameid rewriting kludge --- src/content/subgames.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/content/subgames.cpp b/src/content/subgames.cpp index 65d1699be..3de18f45f 100644 --- a/src/content/subgames.cpp +++ b/src/content/subgames.cpp @@ -16,6 +16,9 @@ // The maximum number of identical world names allowed #define MAX_WORLD_NAMES 100 +// gameid to assume for worlds that are missing world.mt +#define LEGACY_GAMEID "minetest" + namespace { @@ -231,10 +234,9 @@ std::vector getAvailableGames() return specs; } -#define LEGACY_GAMEID "minetest" - bool getWorldExists(const std::string &world_path) { + // Note: very old worlds are valid without a world.mt return (fs::PathExists(world_path + DIR_DELIM + "map_meta.txt") || fs::PathExists(world_path + DIR_DELIM + "world.mt")); } @@ -261,7 +263,7 @@ std::string getWorldGameId(const std::string &world_path, bool can_be_legacy) bool succeeded = conf.readConfigFile(conf_path.c_str()); if (!succeeded) { if (can_be_legacy) { - // If map_meta.txt exists, it is probably an old minetest world + // If map_meta.txt exists, it is probably a very old world if (fs::PathExists(world_path + DIR_DELIM + "map_meta.txt")) return LEGACY_GAMEID; } @@ -269,9 +271,6 @@ std::string getWorldGameId(const std::string &world_path, bool can_be_legacy) } if (!conf.exists("gameid")) return ""; - // The "mesetint" gameid has been discarded - if (conf.get("gameid") == "mesetint") - return "minetest"; return conf.get("gameid"); } From 8d648364c04ef60a2d0dfc3c41819efb9a1b26cd Mon Sep 17 00:00:00 2001 From: sfan5 Date: Sun, 27 Oct 2024 19:54:30 +0100 Subject: [PATCH 051/178] Remove handling of MT_LOGCOLOR env variable --- src/main.cpp | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index b61386ead..b58ab441a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -62,7 +62,6 @@ extern "C" { #define DEBUGFILE "debug.txt" #define DEFAULT_SERVER_PORT 30000 -#define ENV_MT_LOGCOLOR "MT_LOGCOLOR" #define ENV_NO_COLOR "NO_COLOR" #define ENV_CLICOLOR "CLICOLOR" #define ENV_CLICOLOR_FORCE "CLICOLOR_FORCE" @@ -284,13 +283,6 @@ int main(int argc, char *argv[]) static void get_env_opts(Settings &args) { -#if !defined(_WIN32) - const char *mt_logcolor = std::getenv(ENV_MT_LOGCOLOR); - if (mt_logcolor) { - args.set("color", mt_logcolor); - } -#endif - // CLICOLOR is a de-facto standard option for colors // CLICOLOR != 0: ANSI colors are supported (auto-detection, this is the default) // CLICOLOR == 0: ANSI colors are NOT supported From 721e06451e5a87eb9ccf0dbf62b399f275762637 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Sun, 27 Oct 2024 20:02:37 +0100 Subject: [PATCH 052/178] Minor improvements to startup logging and related code --- src/content/subgames.cpp | 3 +- src/main.cpp | 110 ++++++++++++++++++++++----------------- 2 files changed, 65 insertions(+), 48 deletions(-) diff --git a/src/content/subgames.cpp b/src/content/subgames.cpp index 3de18f45f..d0644248e 100644 --- a/src/content/subgames.cpp +++ b/src/content/subgames.cpp @@ -24,6 +24,7 @@ namespace bool getGameMinetestConfig(const std::string &game_path, Settings &conf) { + // TODO: rename this std::string conf_path = game_path + DIR_DELIM + "minetest.conf"; return conf.readConfigFile(conf_path.c_str()); } @@ -388,7 +389,7 @@ void loadGameConfAndInitWorld(const std::string &path, const std::string &name, conf.set("blocksize", std::to_string(MAP_BLOCKSIZE)); if (!conf.updateConfigFile(worldmt_path.c_str())) { - throw BaseException("Failed to update the config file"); + throw BaseException("Failed to update world.mt"); } } diff --git a/src/main.cpp b/src/main.cpp index b58ab441a..97ba63033 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -59,6 +59,8 @@ extern "C" { #error ================================== #endif +// TODO: luanti.conf with migration +#define CONFIGFILE "minetest.conf" #define DEBUGFILE "debug.txt" #define DEFAULT_SERVER_PORT 30000 @@ -114,7 +116,7 @@ static bool recompress_map_database(const GameParams &game_params, const Setting /**********************************************************************/ -FileLogOutput file_log_output; +static FileLogOutput file_log_output; static OptionList allowed_options; @@ -313,8 +315,17 @@ static bool get_cmdline_opts(int argc, char *argv[], Settings *cmd_args) static void set_allowed_options(OptionList *allowed_options) { + assert(allowed_options); allowed_options->clear(); +#if CHECK_CLIENT_BUILD() +#define SERVER_ONLY " (requires --server flag)" +#define LOCAL_GAME " (implies local game if used with option --go)" +#else +#define SERVER_ONLY "" +#define LOCAL_GAME "" +#endif + allowed_options->insert(std::make_pair("help", ValueSpec(VALUETYPE_FLAG, _("Show allowed options")))); allowed_options->insert(std::make_pair("version", ValueSpec(VALUETYPE_FLAG, @@ -324,25 +335,24 @@ static void set_allowed_options(OptionList *allowed_options) allowed_options->insert(std::make_pair("port", ValueSpec(VALUETYPE_STRING, _("Set network port (UDP)")))); allowed_options->insert(std::make_pair("run-unittests", ValueSpec(VALUETYPE_FLAG, - _("Run the unit tests and exit")))); + _("Run unit tests and exit")))); allowed_options->insert(std::make_pair("run-benchmarks", ValueSpec(VALUETYPE_FLAG, - _("Run the benchmarks and exit")))); + _("Run benchmarks and exit")))); allowed_options->insert(std::make_pair("test-module", ValueSpec(VALUETYPE_STRING, _("Only run the specified test module or benchmark")))); allowed_options->insert(std::make_pair("map-dir", ValueSpec(VALUETYPE_STRING, _("Same as --world (deprecated)")))); allowed_options->insert(std::make_pair("world", ValueSpec(VALUETYPE_STRING, - _("Set world path (implies local game if used with option --go)")))); + _("Set world path" LOCAL_GAME)))); allowed_options->insert(std::make_pair("worldname", ValueSpec(VALUETYPE_STRING, - _("Set world by name (implies local game if used with option --go)")))); + _("Set world by name" LOCAL_GAME)))); allowed_options->insert(std::make_pair("worldlist", ValueSpec(VALUETYPE_STRING, _("Get list of worlds ('path' lists paths, " "'name' lists names, 'both' lists both)")))); allowed_options->insert(std::make_pair("quiet", ValueSpec(VALUETYPE_FLAG, - _("Print to console errors only")))); + _("Print only errors to console")))); allowed_options->insert(std::make_pair("color", ValueSpec(VALUETYPE_STRING, - _("Coloured logs ('always', 'never' or 'auto'), defaults to 'auto'" - )))); + _("Coloured logs ('always', 'never' or 'auto'), defaults to 'auto'")))); allowed_options->insert(std::make_pair("info", ValueSpec(VALUETYPE_FLAG, _("Print more information to console")))); allowed_options->insert(std::make_pair("verbose", ValueSpec(VALUETYPE_FLAG, @@ -352,28 +362,28 @@ static void set_allowed_options(OptionList *allowed_options) allowed_options->insert(std::make_pair("debugger", ValueSpec(VALUETYPE_FLAG, _("Try to automatically attach a debugger before starting (convenience option)")))); allowed_options->insert(std::make_pair("logfile", ValueSpec(VALUETYPE_STRING, - _("Set logfile path ('' = no logging)")))); + _("Set log file path ('' = no logging)")))); allowed_options->insert(std::make_pair("gameid", ValueSpec(VALUETYPE_STRING, _("Set gameid (\"--gameid list\" prints available ones)")))); allowed_options->insert(std::make_pair("migrate", ValueSpec(VALUETYPE_STRING, - _("Migrate from current map backend to another (Only works when using " PROJECT_NAME "server or with --server)")))); + _("Migrate from current map backend to another" SERVER_ONLY)))); allowed_options->insert(std::make_pair("migrate-players", ValueSpec(VALUETYPE_STRING, - _("Migrate from current players backend to another (Only works when using " PROJECT_NAME "server or with --server)")))); + _("Migrate from current players backend to another" SERVER_ONLY)))); allowed_options->insert(std::make_pair("migrate-auth", ValueSpec(VALUETYPE_STRING, - _("Migrate from current auth backend to another (Only works when using " PROJECT_NAME "server or with --server)")))); + _("Migrate from current auth backend to another" SERVER_ONLY)))); allowed_options->insert(std::make_pair("migrate-mod-storage", ValueSpec(VALUETYPE_STRING, - _("Migrate from current mod storage backend to another (Only works when using " PROJECT_NAME "server or with --server)")))); + _("Migrate from current mod storage backend to another" SERVER_ONLY)))); allowed_options->insert(std::make_pair("terminal", ValueSpec(VALUETYPE_FLAG, - _("Feature an interactive terminal (Only works when using " PROJECT_NAME "server or with --server)")))); + _("Enable ncurses interactive terminal" SERVER_ONLY)))); allowed_options->insert(std::make_pair("recompress", ValueSpec(VALUETYPE_FLAG, - _("Recompress the blocks of the given map database.")))); + _("Recompress the blocks of the given map database" SERVER_ONLY)))); #if CHECK_CLIENT_BUILD() allowed_options->insert(std::make_pair("address", ValueSpec(VALUETYPE_STRING, - _("Address to connect to. ('' = local game)")))); + _("Address to connect to ('' = local game)")))); allowed_options->insert(std::make_pair("random-input", ValueSpec(VALUETYPE_FLAG, - _("Enable random user input, for testing")))); + _("Enable random user input (for testing)")))); allowed_options->insert(std::make_pair("server", ValueSpec(VALUETYPE_FLAG, - _("Run dedicated server")))); + _("Behave as dedicated server")))); allowed_options->insert(std::make_pair("name", ValueSpec(VALUETYPE_STRING, _("Set player name")))); allowed_options->insert(std::make_pair("password", ValueSpec(VALUETYPE_STRING, @@ -381,11 +391,13 @@ static void set_allowed_options(OptionList *allowed_options) allowed_options->insert(std::make_pair("password-file", ValueSpec(VALUETYPE_STRING, _("Set password from contents of file")))); allowed_options->insert(std::make_pair("go", ValueSpec(VALUETYPE_FLAG, - _("Disable main menu")))); + _("Skip main menu, go directly in-game")))); allowed_options->insert(std::make_pair("console", ValueSpec(VALUETYPE_FLAG, - _("Starts with the console (Windows only)")))); + _("Start with the console open (Windows only)")))); #endif +#undef SERVER_ONLY +#undef LOCAL_GAME } static void print_help(const OptionList &allowed_options) @@ -441,7 +453,7 @@ static void list_game_ids() { std::set gameids = getAvailableGameIds(); for (const std::string &gameid : gameids) - std::cout << gameid < &worldspecs, std::ostream &os, bool print_name, bool print_path) { for (const WorldSpec &worldspec : worldspecs) { - std::string name = worldspec.name; - std::string path = worldspec.path; + const auto &name = worldspec.name; + const auto &path = worldspec.path; if (print_name && print_path) { os << "\t" << name << "\t\t" << path << std::endl; } else if (print_name) { @@ -738,16 +750,16 @@ static bool read_config_file(const Settings &cmd_args) g_settings_path = cmd_args.get("config"); } else { std::vector filenames; - filenames.push_back(porting::path_user + DIR_DELIM + "minetest.conf"); + filenames.push_back(porting::path_user + DIR_DELIM + CONFIGFILE); // Legacy configuration file location filenames.push_back(porting::path_user + - DIR_DELIM + ".." + DIR_DELIM + "minetest.conf"); + DIR_DELIM + ".." + DIR_DELIM + CONFIGFILE); #if RUN_IN_PLACE // Try also from a lower level (to aid having the same configuration // for many RUN_IN_PLACE installs) filenames.push_back(porting::path_user + - DIR_DELIM + ".." + DIR_DELIM + ".." + DIR_DELIM + "minetest.conf"); + DIR_DELIM + ".." + DIR_DELIM + ".." + DIR_DELIM + CONFIGFILE); #endif for (const std::string &filename : filenames) { @@ -762,6 +774,7 @@ static bool read_config_file(const Settings &cmd_args) if (g_settings_path.empty()) g_settings_path = filenames[0]; } + infostream << "Global configuration file: " << g_settings_path << std::endl; return true; } @@ -776,6 +789,9 @@ static void init_log_streams(const Settings &cmd_args) g_logger.removeOutput(&file_log_output); std::string conf_loglev = g_settings->get("debug_log_level"); + if (log_filename.empty() || conf_loglev.empty()) // No logging + return; + // Old integer format if (std::isdigit(conf_loglev[0])) { warningstream << "Deprecated use of debug_log_level with an " @@ -791,15 +807,14 @@ static void init_log_streams(const Settings &cmd_args) conf_loglev = lev_name[lev_i]; } - if (log_filename.empty() || conf_loglev.empty()) // No logging - return; - LogLevel log_level = Logger::stringToLevel(conf_loglev); if (log_level == LL_MAX) { warningstream << "Supplied unrecognized debug_log_level; " "using maximum." << std::endl; } + infostream << "Logging to " << log_filename << std::endl; + file_log_output.setFile(log_filename, g_settings->getU64("debug_log_size_max") * 1000000); g_logger.addOutputMaxLevel(&file_log_output, log_level); @@ -862,16 +877,16 @@ static bool get_world_from_cmdline(GameParams *game_params, const Settings &cmd_ for (const WorldSpec &worldspec : worldspecs) { std::string name = worldspec.name; if (name == commanded_worldname) { - dstream << _("Using world specified by --worldname on the " - "command line") << std::endl; + dstream << "Using world specified by --worldname on the " + "command line" << std::endl; commanded_world = worldspec.path; found = true; break; } } if (!found) { - dstream << _("World") << " '" << commanded_worldname - << _("' not available. Available worlds:") << std::endl; + dstream << "World '" << commanded_worldname + << "' not available. Available worlds:" << std::endl; print_worldspecs(worldspecs, dstream); return false; } @@ -915,14 +930,14 @@ static bool auto_select_world(GameParams *game_params) // If there is only a single world, use it if (worldspecs.size() == 1) { world_path = worldspecs[0].path; - dstream <<_("Automatically selecting world at") << " [" + dstream << "Automatically selecting world at [" << world_path << "]" << std::endl; // If there are multiple worlds, list them } else if (worldspecs.size() > 1 && game_params->is_dedicated_server) { - std::cerr << _("Multiple worlds are available.") << std::endl; - std::cerr << _("Please select one using --worldname " - " or --world ") << std::endl; - print_worldspecs(worldspecs, std::cerr); + rawstream << "Multiple worlds are available.\n" + << "Please select one using --worldname or --world " + << std::endl; + print_worldspecs(worldspecs, rawstream); return false; // If there are no worlds, automatically create a new one } else { @@ -1090,8 +1105,8 @@ static bool run_dedicated_server(const GameParams &game_params, const Settings & if (!is_valid_player_name(admin_nick)) { if (admin_nick.empty()) { errorstream << "No name given for admin. " - << "Please check your minetest.conf that it " - << "contains a 'name = ' to your main admin account." + << "Please check your configuration that it " + << "contains a 'name = ...' for your main admin account." << std::endl; } else { errorstream << "Name for admin '" @@ -1191,7 +1206,7 @@ static bool migrate_map_database(const GameParams &game_params, const Settings & *new_db = ServerMap::createDatabase(migrate_to, game_params.world_path, world_mt); u32 count = 0; - time_t last_update_time = 0; + u64 last_update_time = 0; bool &kill = *porting::signal_handler_killstatus(); std::vector blocks; @@ -1204,15 +1219,16 @@ static bool migrate_map_database(const GameParams &game_params, const Settings & old_db->loadBlock(*it, &data); if (!data.empty()) { new_db->saveBlock(*it, data); + count++; } else { errorstream << "Failed to load block " << *it << ", skipping it." << std::endl; } - if (++count % 0xFF == 0 && time(NULL) - last_update_time >= 1) { + if (porting::getTimeS() - last_update_time >= 1) { std::cerr << " Migrated " << count << " blocks, " - << (100.0 * count / blocks.size()) << "% completed.\r"; + << (100.0 * count / blocks.size()) << "% completed.\r" << std::flush; new_db->endSave(); new_db->beginSave(); - last_update_time = time(NULL); + last_update_time = porting::getTimeS(); } } std::cerr << std::endl; @@ -1278,11 +1294,11 @@ static bool recompress_map_database(const GameParams &game_params, const Setting } db->saveBlock(*it, oss.str()); - count++; - if (count % 0xFF == 0 && porting::getTimeS() - last_update_time >= 1) { + + if (porting::getTimeS() - last_update_time >= 1) { std::cerr << " Recompressed " << count << " blocks, " - << (100.0f * count / blocks.size()) << "% completed.\r"; + << (100.0f * count / blocks.size()) << "% completed.\r" << std::flush; db->endSave(); db->beginSave(); last_update_time = porting::getTimeS(); From 38f4d11d53ec6f0c370ba5f0db00a55c7963e751 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Sun, 27 Oct 2024 20:41:25 +0100 Subject: [PATCH 053/178] Avoid VLA usage and prohibit it by compiler flag --- src/CMakeLists.txt | 3 +-- src/gui/modalMenu.cpp | 6 +++--- src/porting_android.cpp | 2 +- src/porting_android.h | 2 +- 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 4005fc14b..2275a2075 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -855,8 +855,7 @@ if(MSVC) endif() else() # GCC or compatible compilers such as Clang - set(WARNING_FLAGS "-Wall -Wextra") - set(WARNING_FLAGS "${WARNING_FLAGS} -Wno-unused-parameter") + set(WARNING_FLAGS "-Wall -Wextra -Wno-unused-parameter -Werror=vla") if(WARN_ALL) set(RELEASE_WARNING_FLAGS "${WARNING_FLAGS}") else() diff --git a/src/gui/modalMenu.cpp b/src/gui/modalMenu.cpp index f2ce5a5bf..0a130e905 100644 --- a/src/gui/modalMenu.cpp +++ b/src/gui/modalMenu.cpp @@ -291,13 +291,13 @@ bool GUIModalMenu::preprocessEvent(const SEvent &event) s32 selected_idx = dropdown->getSelected(); s32 option_size = dropdown->getItemCount(); - std::string list_of_options[option_size]; + std::vector list_of_options; for (s32 i = 0; i < option_size; i++) { - list_of_options[i] = wide_to_utf8(dropdown->getItem(i)); + list_of_options.push_back(wide_to_utf8(dropdown->getItem(i))); } - porting::showComboBoxDialog(list_of_options, option_size, selected_idx); + porting::showComboBoxDialog(list_of_options.data(), option_size, selected_idx); return true; // Prevent the Irrlicht dropdown from opening. } } diff --git a/src/porting_android.cpp b/src/porting_android.cpp index 47d8d3c1f..620d9d224 100644 --- a/src/porting_android.cpp +++ b/src/porting_android.cpp @@ -142,7 +142,7 @@ void showTextInputDialog(const std::string &hint, const std::string ¤t, in jhint, jcurrent, jeditType); } -void showComboBoxDialog(const std::string optionList[], s32 listSize, s32 selectedIdx) +void showComboBoxDialog(const std::string *optionList, s32 listSize, s32 selectedIdx) { jmethodID showdialog = jnienv->GetMethodID(activityClass, "showSelectionInputDialog", "([Ljava/lang/String;I)V"); diff --git a/src/porting_android.h b/src/porting_android.h index 64cf82ca8..86601f450 100644 --- a/src/porting_android.h +++ b/src/porting_android.h @@ -27,7 +27,7 @@ void showTextInputDialog(const std::string &hint, const std::string ¤t, in * @param listSize Size of the list * @param selectedIdx Selected index */ -void showComboBoxDialog(const std::string optionList[], s32 listSize, s32 selectedIdx); +void showComboBoxDialog(const std::string *optionList, s32 listSize, s32 selectedIdx); /** * Opens a share intent to the file at path From c81cc4fa6054fddb92414e2dbfe25b2890a1b391 Mon Sep 17 00:00:00 2001 From: DS Date: Mon, 28 Oct 2024 16:10:17 +0100 Subject: [PATCH 054/178] Improve menu_header.png slightly (#15346) --- LICENSE.txt | 1 + textures/base/pack/menu_header.png | Bin 286 -> 402 bytes 2 files changed, 1 insertion(+) diff --git a/LICENSE.txt b/LICENSE.txt index 7ac216a0d..e562a0b4c 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -90,6 +90,7 @@ grorp: textures/base/pack/menu_header.png using the font "undefined medium" (https://undefined-medium.com/), which is licensed under the SIL Open Font License, Version 1.1 + modified by DS License of Luanti source code ------------------------------- diff --git a/textures/base/pack/menu_header.png b/textures/base/pack/menu_header.png index cdc6d4edf014e58e762f158c8d236916df5d074d..fb20d905bcdb194b81a8ba08b13ebbb8cf886086 100644 GIT binary patch delta 367 zcmbQoG>LhFPQ8J#V@y)*hY$bj%T2@?7#J8!g8YIR9G=}s1F}s#T^vI)?!CQfxbCom z0Lz7?4><0e(f-L{$2Q%=U%0d0D`?F@?nmYk8+}bK8%QYcJ;y1a$kC+0(ez@;6aQSv z8}?kh%eV2ok#9W~9L@HPnM-3qu(ND_v4igVVh3LRVh8;{_1BoWUf5jtb35qRmgB3# zZ13&f&n$IihO6V&S0C>kmc6jzm`>NK(EjgojI1IT<~J<+l9cvrSGCe{qq`j^PX0Q3 zVSCdvxelGvC8|olIbO_flAFtOxA{&`PcSju985gbiUR4{~2~4L#9krU-+UG7@Q2Au6{1- HoD!M<)EJ~; delta 250 zcmV{VybRlMzj;u>=PSYW2Q}&rjeCHKs%eA%qa(qk3)R#5~ZqK;_cNiFu$v zfkq>_0R1WSwg3e>612Su*->kJOZ$`UD$voP;*L!uuI(<@E^|PE0zHDN<}$~6seO4} zvQt@l0s28`++Xp{1QaMxpg@5F1qu`>P@q72=(e7lKQP;N!S@bow^Fy+13E5LqQz1K zwOjq;K!N@pYCAi(o(p>WgS`Gp&cWkAM}t0;35>M4etI88p#T5?07*qoM6N<$f_V~e A9{>OV From 409e75b94d2c9050cc96a0252b5bf05c577824c5 Mon Sep 17 00:00:00 2001 From: chmodsayshello Date: Mon, 28 Oct 2024 19:39:59 +0100 Subject: [PATCH 055/178] Fix newline rejection and whitespace trimming for chat messages (#15290) Co-authored-by: sfan5 --- src/server.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/server.cpp b/src/server.cpp index 8d1a41811..c9d96fa34 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -3049,6 +3049,8 @@ std::wstring Server::handleChat(const std::string &name, if (g_settings->getBool("strip_color_codes")) wmessage = unescape_enriched(wmessage); + wmessage = trim(wmessage); + if (player) { switch (player->canSendChatMessage()) { case RPLAYER_CHATRESULT_FLOODING: { @@ -3075,13 +3077,12 @@ std::wstring Server::handleChat(const std::string &name, L"It was refused. Send a shorter message"; } - auto message = trim(wide_to_utf8(wmessage)); + auto message = wide_to_utf8(wmessage); if (message.empty()) return L""; - if (message.find_first_of("\n\r") != std::wstring::npos) { + if (message.find_first_of("\r\n") != std::string::npos) return L"Newlines are not permitted in chat messages"; - } // Run script hook, exit if script ate the chat message if (m_script->on_chat_message(name, message)) @@ -3103,8 +3104,7 @@ std::wstring Server::handleChat(const std::string &name, #ifdef __ANDROID__ line += L"<" + utf8_to_wide(name) + L"> " + wmessage; #else - line += utf8_to_wide(m_script->formatChatMessage(name, - wide_to_utf8(wmessage))); + line += utf8_to_wide(m_script->formatChatMessage(name, message)); #endif } From ad4b13a0e9926ac9b5efd5890987116c5c5c5140 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Mon, 28 Oct 2024 19:40:18 +0100 Subject: [PATCH 056/178] Luanti rename: builtin (#15324) --- builtin/client/chatcommands.lua | 2 -- builtin/client/init.lua | 1 - builtin/common/after.lua | 2 +- builtin/common/chatcommands.lua | 2 -- builtin/common/filterlist.lua | 2 +- builtin/common/item_s.lua | 1 - builtin/common/metatable.lua | 4 ++-- builtin/common/misc_helpers.lua | 2 -- builtin/common/serialize.lua | 6 +++--- builtin/fstk/buttonbar.lua | 2 +- builtin/fstk/dialog.lua | 2 +- builtin/fstk/tabview.lua | 2 +- builtin/fstk/ui.lua | 2 +- builtin/game/async.lua | 2 +- builtin/game/auth.lua | 8 +++----- builtin/game/chat.lua | 2 -- builtin/game/constants.lua | 2 -- builtin/game/deprecated.lua | 6 ++---- builtin/game/detached_inventory.lua | 2 -- builtin/game/falling.lua | 2 -- builtin/game/features.lua | 2 -- builtin/game/item.lua | 2 -- builtin/game/item_entity.lua | 2 -- builtin/game/misc.lua | 2 -- builtin/game/misc_s.lua | 1 - builtin/game/privileges.lua | 2 -- builtin/game/register.lua | 2 -- builtin/game/static_spawn.lua | 2 -- builtin/game/tests/test_moveaction.lua | 4 ++-- builtin/init.lua | 2 +- builtin/mainmenu/common.lua | 2 +- builtin/mainmenu/content/contentdb.lua | 2 +- builtin/mainmenu/content/dlg_contentdb.lua | 4 ++-- builtin/mainmenu/content/dlg_install.lua | 2 +- builtin/mainmenu/content/dlg_overwrite.lua | 2 +- builtin/mainmenu/content/dlg_package.lua | 2 +- builtin/mainmenu/content/init.lua | 2 +- builtin/mainmenu/content/pkgmgr.lua | 4 ++-- builtin/mainmenu/content/screenshots.lua | 4 ++-- .../mainmenu/content/tests/pkgmgr_spec.lua | 2 +- builtin/mainmenu/content/update_detector.lua | 2 +- builtin/mainmenu/dlg_config_world.lua | 2 +- builtin/mainmenu/dlg_create_world.lua | 2 +- builtin/mainmenu/dlg_delete_content.lua | 2 +- builtin/mainmenu/dlg_delete_world.lua | 2 +- builtin/mainmenu/dlg_register.lua | 2 +- builtin/mainmenu/dlg_reinstall_mtg.lua | 10 +++++----- builtin/mainmenu/dlg_rename_modpack.lua | 2 +- builtin/mainmenu/dlg_version_info.lua | 2 +- builtin/mainmenu/game_theme.lua | 2 +- builtin/mainmenu/init.lua | 2 +- builtin/mainmenu/serverlistmgr.lua | 2 +- builtin/mainmenu/settings/components.lua | 2 +- .../settings/dlg_change_mapgen_flags.lua | 2 +- builtin/mainmenu/settings/dlg_settings.lua | 4 ++-- .../settings/generate_from_settingtypes.lua | 2 +- builtin/mainmenu/settings/init.lua | 2 +- builtin/mainmenu/settings/settingtypes.lua | 2 +- .../settings/shader_warning_component.lua | 2 +- .../mainmenu/settings/shadows_component.lua | 2 +- builtin/mainmenu/tab_about.lua | 4 ++-- builtin/mainmenu/tab_content.lua | 2 +- builtin/mainmenu/tab_local.lua | 2 +- builtin/mainmenu/tab_online.lua | 2 +- builtin/profiler/init.lua | 2 +- builtin/profiler/instrumentation.lua | 2 +- builtin/profiler/reporter.lua | 2 +- builtin/profiler/sampling.lua | 2 +- builtin/settingtypes.txt | 20 +++++++++---------- 69 files changed, 77 insertions(+), 112 deletions(-) diff --git a/builtin/client/chatcommands.lua b/builtin/client/chatcommands.lua index a563a6627..23aebebbc 100644 --- a/builtin/client/chatcommands.lua +++ b/builtin/client/chatcommands.lua @@ -1,5 +1,3 @@ --- Minetest: builtin/client/chatcommands.lua - core.register_on_sending_chat_message(function(message) if message:sub(1,2) == ".." then return false diff --git a/builtin/client/init.lua b/builtin/client/init.lua index 8d01c99a4..1f83771ea 100644 --- a/builtin/client/init.lua +++ b/builtin/client/init.lua @@ -1,4 +1,3 @@ --- Minetest: builtin/client/init.lua local scriptpath = core.get_builtin_path() local clientpath = scriptpath.."client"..DIR_DELIM local commonpath = scriptpath.."common"..DIR_DELIM diff --git a/builtin/common/after.lua b/builtin/common/after.lua index 321e5ac9d..c116f1200 100644 --- a/builtin/common/after.lua +++ b/builtin/common/after.lua @@ -155,7 +155,7 @@ end function core.after(after, func, ...) assert(tonumber(after) and not core.is_nan(after) and type(func) == "function", - "Invalid minetest.after invocation") + "Invalid core.after invocation") local new_job = { mod_origin = core.get_last_run_mod(), diff --git a/builtin/common/chatcommands.lua b/builtin/common/chatcommands.lua index 7a8a49558..7db84a5a9 100644 --- a/builtin/common/chatcommands.lua +++ b/builtin/common/chatcommands.lua @@ -1,5 +1,3 @@ --- Minetest: builtin/common/chatcommands.lua - -- For server-side translations (if INIT == "game") -- Otherwise, use core.gettext local S = core.get_translator("__builtin") diff --git a/builtin/common/filterlist.lua b/builtin/common/filterlist.lua index 092d19fbc..c323a0d55 100644 --- a/builtin/common/filterlist.lua +++ b/builtin/common/filterlist.lua @@ -1,4 +1,4 @@ ---Minetest +--Luanti --Copyright (C) 2013 sapier -- --This program is free software; you can redistribute it and/or modify diff --git a/builtin/common/item_s.lua b/builtin/common/item_s.lua index 673c83877..5098ef4e6 100644 --- a/builtin/common/item_s.lua +++ b/builtin/common/item_s.lua @@ -1,4 +1,3 @@ --- Minetest: builtin/item_s.lua -- The distinction of what goes here is a bit tricky, basically it's everything -- that does not (directly or indirectly) need access to ServerEnvironment, -- Server or writable access to IGameDef on the engine side. diff --git a/builtin/common/metatable.lua b/builtin/common/metatable.lua index 40003d293..debc4d3c5 100644 --- a/builtin/common/metatable.lua +++ b/builtin/common/metatable.lua @@ -11,8 +11,8 @@ end core.known_metatables = known_metatables function core.register_async_metatable(...) - core.log("deprecated", "minetest.register_async_metatable is deprecated. " .. - "Use minetest.register_portable_metatable instead.") + core.log("deprecated", "core.register_async_metatable is deprecated. " .. + "Use core.register_portable_metatable instead.") return core.register_portable_metatable(...) end diff --git a/builtin/common/misc_helpers.lua b/builtin/common/misc_helpers.lua index d0942b2d2..ce4179f54 100644 --- a/builtin/common/misc_helpers.lua +++ b/builtin/common/misc_helpers.lua @@ -1,5 +1,3 @@ --- Minetest: builtin/misc_helpers.lua - -------------------------------------------------------------------------------- -- Localize functions to avoid table lookups (better performance). local string_sub, string_find = string.sub, string.find diff --git a/builtin/common/serialize.lua b/builtin/common/serialize.lua index 2ee2e5f02..146128e0c 100644 --- a/builtin/common/serialize.lua +++ b/builtin/common/serialize.lua @@ -204,18 +204,18 @@ local function dummy_func() end function core.deserialize(str, safe) -- Backwards compatibility if str == nil then - core.log("deprecated", "minetest.deserialize called with nil (expected string).") + core.log("deprecated", "core.deserialize called with nil (expected string).") return nil, "Invalid type: Expected a string, got nil" end local t = type(str) if t ~= "string" then - error(("minetest.deserialize called with %s (expected string)."):format(t)) + error(("core.deserialize called with %s (expected string)."):format(t)) end local func, err = loadstring(str) if not func then return nil, err end - -- math.huge was serialized to inf and NaNs to nan by Lua in Minetest 5.6, so we have to support this here + -- math.huge was serialized to inf and NaNs to nan by Lua in engine version 5.6, so we have to support this here local env = {inf = math_huge, nan = 0/0} if safe then env.loadstring = dummy_func diff --git a/builtin/fstk/buttonbar.lua b/builtin/fstk/buttonbar.lua index e53814751..ed478af82 100644 --- a/builtin/fstk/buttonbar.lua +++ b/builtin/fstk/buttonbar.lua @@ -1,4 +1,4 @@ ---Minetest +--Luanti --Copyright (C) 2014 sapier --Copyright (C) 2023 Gregor Parzefall -- diff --git a/builtin/fstk/dialog.lua b/builtin/fstk/dialog.lua index 991ec20ab..7043646a4 100644 --- a/builtin/fstk/dialog.lua +++ b/builtin/fstk/dialog.lua @@ -1,4 +1,4 @@ ---Minetest +--Luanti --Copyright (C) 2014 sapier -- --This program is free software; you can redistribute it and/or modify diff --git a/builtin/fstk/tabview.lua b/builtin/fstk/tabview.lua index 42fc9ac18..c88c4917a 100644 --- a/builtin/fstk/tabview.lua +++ b/builtin/fstk/tabview.lua @@ -1,4 +1,4 @@ ---Minetest +--Luanti --Copyright (C) 2014 sapier -- --This program is free software; you can redistribute it and/or modify diff --git a/builtin/fstk/ui.lua b/builtin/fstk/ui.lua index a3a8fed77..b5b95d0e4 100644 --- a/builtin/fstk/ui.lua +++ b/builtin/fstk/ui.lua @@ -1,4 +1,4 @@ ---Minetest +--Luanti --Copyright (C) 2014 sapier -- --This program is free software; you can redistribute it and/or modify diff --git a/builtin/game/async.lua b/builtin/game/async.lua index 469f179d7..fc286ef25 100644 --- a/builtin/game/async.lua +++ b/builtin/game/async.lua @@ -10,7 +10,7 @@ end function core.handle_async(func, callback, ...) assert(type(func) == "function" and type(callback) == "function", - "Invalid minetest.handle_async invocation") + "Invalid core.handle_async invocation") local args = {n = select("#", ...), ...} local mod_origin = core.get_last_run_mod() diff --git a/builtin/game/auth.lua b/builtin/game/auth.lua index e45520e27..54ca68eab 100644 --- a/builtin/game/auth.lua +++ b/builtin/game/auth.lua @@ -1,5 +1,3 @@ --- Minetest: builtin/auth.lua - -- -- Builtin authentication handler -- @@ -95,11 +93,11 @@ core.builtin_auth_handler = { for priv, value in pairs(privileges) do -- Warnings for improper API usage if value == false then - core.log('deprecated', "`false` value given to `minetest.set_player_privs`, ".. + core.log('deprecated', "`false` value given to `core.set_player_privs`, ".. "this is almost certainly a bug, ".. "granting a privilege rather than revoking it") elseif value ~= true then - core.log('deprecated', "non-`true` value given to `minetest.set_player_privs`") + core.log('deprecated', "non-`true` value given to `core.set_player_privs`") end -- Run grant callbacks if prev_privs[priv] == nil then @@ -196,7 +194,7 @@ function core.change_player_privs(name, changes) elseif change == false then privs[priv] = nil else - error("non-bool value given to `minetest.change_player_privs`") + error("non-bool value given to `core.change_player_privs`") end end core.set_player_privs(name, privs) diff --git a/builtin/game/chat.lua b/builtin/game/chat.lua index b7e2aea50..69c657194 100644 --- a/builtin/game/chat.lua +++ b/builtin/game/chat.lua @@ -1,5 +1,3 @@ --- Minetest: builtin/game/chat.lua - local S = core.get_translator("__builtin") -- Helper function that implements search and replace without pattern matching diff --git a/builtin/game/constants.lua b/builtin/game/constants.lua index 54eeea50f..ff9b43ad3 100644 --- a/builtin/game/constants.lua +++ b/builtin/game/constants.lua @@ -1,5 +1,3 @@ --- Minetest: builtin/constants.lua - -- -- Constants values for use with the Lua API -- diff --git a/builtin/game/deprecated.lua b/builtin/game/deprecated.lua index c5c7848f5..87b785995 100644 --- a/builtin/game/deprecated.lua +++ b/builtin/game/deprecated.lua @@ -1,5 +1,3 @@ --- Minetest: builtin/deprecated.lua - -- -- EnvRef -- @@ -35,9 +33,9 @@ local settings = core.settings local function setting_proxy(name) return function(...) - core.log("deprecated", "WARNING: minetest.setting_* ".. + core.log("deprecated", "WARNING: core.setting_* ".. "functions are deprecated. ".. - "Use methods on the minetest.settings object.") + "Use methods on the core.settings object.") return settings[name](settings, ...) end end diff --git a/builtin/game/detached_inventory.lua b/builtin/game/detached_inventory.lua index 8eed00391..2d48c18ed 100644 --- a/builtin/game/detached_inventory.lua +++ b/builtin/game/detached_inventory.lua @@ -1,5 +1,3 @@ --- Minetest: builtin/detached_inventory.lua - core.detached_inventories = {} local create_detached_inventory_raw = core.create_detached_inventory_raw diff --git a/builtin/game/falling.lua b/builtin/game/falling.lua index 33473091d..bb6ca1a64 100644 --- a/builtin/game/falling.lua +++ b/builtin/game/falling.lua @@ -1,5 +1,3 @@ --- Minetest: builtin/item.lua - local builtin_shared = ... local SCALE = 0.667 diff --git a/builtin/game/features.lua b/builtin/game/features.lua index 10884497c..88ec282c3 100644 --- a/builtin/game/features.lua +++ b/builtin/game/features.lua @@ -1,5 +1,3 @@ --- Minetest: builtin/features.lua - core.features = { glasslike_framed = true, nodebox_as_selectionbox = true, diff --git a/builtin/game/item.lua b/builtin/game/item.lua index 8b79d2d71..cc9be44af 100644 --- a/builtin/game/item.lua +++ b/builtin/game/item.lua @@ -1,5 +1,3 @@ --- Minetest: builtin/item.lua - local builtin_shared = ... local function copy_pointed_thing(pointed_thing) diff --git a/builtin/game/item_entity.lua b/builtin/game/item_entity.lua index b7b291c43..59626e96d 100644 --- a/builtin/game/item_entity.lua +++ b/builtin/game/item_entity.lua @@ -1,5 +1,3 @@ --- Minetest: builtin/item_entity.lua - function core.spawn_item(pos, item) -- Take item in any format local stack = ItemStack(item) diff --git a/builtin/game/misc.lua b/builtin/game/misc.lua index 25e19ddb0..390870de1 100644 --- a/builtin/game/misc.lua +++ b/builtin/game/misc.lua @@ -1,5 +1,3 @@ --- Minetest: builtin/misc.lua - local S = core.get_translator("__builtin") -- diff --git a/builtin/game/misc_s.lua b/builtin/game/misc_s.lua index 440e52d81..90092952d 100644 --- a/builtin/game/misc_s.lua +++ b/builtin/game/misc_s.lua @@ -1,4 +1,3 @@ --- Minetest: builtin/misc_s.lua -- The distinction of what goes here is a bit tricky, basically it's everything -- that does not (directly or indirectly) need access to ServerEnvironment, -- Server or writable access to IGameDef on the engine side. diff --git a/builtin/game/privileges.lua b/builtin/game/privileges.lua index 2ff4c093c..b2eadd36b 100644 --- a/builtin/game/privileges.lua +++ b/builtin/game/privileges.lua @@ -1,5 +1,3 @@ --- Minetest: builtin/privileges.lua - local S = core.get_translator("__builtin") -- diff --git a/builtin/game/register.lua b/builtin/game/register.lua index 3d99a6925..3e4b9be96 100644 --- a/builtin/game/register.lua +++ b/builtin/game/register.lua @@ -1,5 +1,3 @@ --- Minetest: builtin/register.lua - local builtin_shared = ... local S = core.get_translator("__builtin") diff --git a/builtin/game/static_spawn.lua b/builtin/game/static_spawn.lua index fae23eab0..5b834310f 100644 --- a/builtin/game/static_spawn.lua +++ b/builtin/game/static_spawn.lua @@ -1,5 +1,3 @@ --- Minetest: builtin/static_spawn.lua - local static_spawnpoint_string = core.settings:get("static_spawnpoint") if static_spawnpoint_string and static_spawnpoint_string ~= "" and diff --git a/builtin/game/tests/test_moveaction.lua b/builtin/game/tests/test_moveaction.lua index 476579348..a3cbc021f 100644 --- a/builtin/game/tests/test_moveaction.lua +++ b/builtin/game/tests/test_moveaction.lua @@ -35,7 +35,7 @@ end local log = function(...) end --local log = print -minetest.register_allow_player_inventory_action(function(_, action, inv, info) +core.register_allow_player_inventory_action(function(_, action, inv, info) log("\tallow " .. action, info.count or info.stack:to_string()) if action == "move" then @@ -69,7 +69,7 @@ minetest.register_allow_player_inventory_action(function(_, action, inv, info) return -- Unlimited end) -minetest.register_on_player_inventory_action(function(_, action, inv, info) +core.register_on_player_inventory_action(function(_, action, inv, info) log("\ton " .. action, info.count or info.stack:to_string()) if action == "take" or action == "put" then diff --git a/builtin/init.lua b/builtin/init.lua index 415087a54..83e8a1df0 100644 --- a/builtin/init.lua +++ b/builtin/init.lua @@ -1,5 +1,5 @@ -- --- This file contains built-in stuff in Minetest implemented in Lua. +-- This file contains built-in stuff in Luanti implemented in Lua. -- -- It is always loaded and executed after registration of the C API, -- before loading and running any mods. diff --git a/builtin/mainmenu/common.lua b/builtin/mainmenu/common.lua index 16c5c9d95..d9edd745b 100644 --- a/builtin/mainmenu/common.lua +++ b/builtin/mainmenu/common.lua @@ -1,4 +1,4 @@ ---Minetest +--Luanti --Copyright (C) 2014 sapier -- --This program is free software; you can redistribute it and/or modify diff --git a/builtin/mainmenu/content/contentdb.lua b/builtin/mainmenu/content/contentdb.lua index 5d6d6c482..1c09ac9c4 100644 --- a/builtin/mainmenu/content/contentdb.lua +++ b/builtin/mainmenu/content/contentdb.lua @@ -1,4 +1,4 @@ ---Minetest +--Luanti --Copyright (C) 2018-24 rubenwardy -- --This program is free software; you can redistribute it and/or modify diff --git a/builtin/mainmenu/content/dlg_contentdb.lua b/builtin/mainmenu/content/dlg_contentdb.lua index 7e17ed315..c05bb804a 100644 --- a/builtin/mainmenu/content/dlg_contentdb.lua +++ b/builtin/mainmenu/content/dlg_contentdb.lua @@ -1,4 +1,4 @@ ---Minetest +--Luanti --Copyright (C) 2018-20 rubenwardy -- --This program is free software; you can redistribute it and/or modify @@ -487,7 +487,7 @@ end local function handle_events(event) if event == "DialogShow" then - -- Don't show the "MINETEST" header behind the dialog. + -- Don't show the header image behind the dialog. mm_game_theme.set_engine(true) -- If ContentDB is already loaded, auto-install packages here. diff --git a/builtin/mainmenu/content/dlg_install.lua b/builtin/mainmenu/content/dlg_install.lua index 3f43bd23c..ef201f56a 100644 --- a/builtin/mainmenu/content/dlg_install.lua +++ b/builtin/mainmenu/content/dlg_install.lua @@ -1,4 +1,4 @@ ---Minetest +--Luanti --Copyright (C) 2018-24 rubenwardy -- --This program is free software; you can redistribute it and/or modify diff --git a/builtin/mainmenu/content/dlg_overwrite.lua b/builtin/mainmenu/content/dlg_overwrite.lua index 7967cb48c..5baaa5cd2 100644 --- a/builtin/mainmenu/content/dlg_overwrite.lua +++ b/builtin/mainmenu/content/dlg_overwrite.lua @@ -1,4 +1,4 @@ ---Minetest +--Luanti --Copyright (C) 2018-24 rubenwardy -- --This program is free software; you can redistribute it and/or modify diff --git a/builtin/mainmenu/content/dlg_package.lua b/builtin/mainmenu/content/dlg_package.lua index 404e950c4..4eb465236 100644 --- a/builtin/mainmenu/content/dlg_package.lua +++ b/builtin/mainmenu/content/dlg_package.lua @@ -1,4 +1,4 @@ ---Minetest +--Luanti --Copyright (C) 2018-24 rubenwardy -- --This program is free software; you can redistribute it and/or modify diff --git a/builtin/mainmenu/content/init.lua b/builtin/mainmenu/content/init.lua index 00eac681b..dbf4cc888 100644 --- a/builtin/mainmenu/content/init.lua +++ b/builtin/mainmenu/content/init.lua @@ -1,4 +1,4 @@ ---Minetest +--Luanti --Copyright (C) 2023 rubenwardy -- --This program is free software; you can redistribute it and/or modify diff --git a/builtin/mainmenu/content/pkgmgr.lua b/builtin/mainmenu/content/pkgmgr.lua index 5a4aa6c17..986d80398 100644 --- a/builtin/mainmenu/content/pkgmgr.lua +++ b/builtin/mainmenu/content/pkgmgr.lua @@ -1,4 +1,4 @@ ---Minetest +--Luanti --Copyright (C) 2013 sapier -- --This program is free software; you can redistribute it and/or modify @@ -840,7 +840,7 @@ function pkgmgr.get_contentdb_id(content) return content.author:lower() .. "/" .. content.name end - -- Until Minetest 5.8.0, Minetest Game was bundled with Minetest. + -- Until version 5.8.0, Minetest Game was bundled with the engine. -- Unfortunately, the bundled MTG was not versioned (missing "release" -- field in game.conf). -- Therefore, we consider any installation of MTG that is not versioned, diff --git a/builtin/mainmenu/content/screenshots.lua b/builtin/mainmenu/content/screenshots.lua index 161f33104..718666085 100644 --- a/builtin/mainmenu/content/screenshots.lua +++ b/builtin/mainmenu/content/screenshots.lua @@ -1,4 +1,4 @@ ---Minetest +--Luanti --Copyright (C) 2023-24 rubenwardy -- --This program is free software; you can redistribute it and/or modify @@ -40,7 +40,7 @@ function get_screenshot(package, screenshot_url, level) return defaulttexturedir .. "no_screenshot.png" end - -- Minetest only supports png and jpg + -- Luanti only supports png and jpg local ext = get_file_extension(screenshot_url) if ext ~= "png" and ext ~= "jpg" then screenshot_url = screenshot_url:sub(0, -#ext - 1) .. "png" diff --git a/builtin/mainmenu/content/tests/pkgmgr_spec.lua b/builtin/mainmenu/content/tests/pkgmgr_spec.lua index ccadde38c..8870bb68f 100644 --- a/builtin/mainmenu/content/tests/pkgmgr_spec.lua +++ b/builtin/mainmenu/content/tests/pkgmgr_spec.lua @@ -1,4 +1,4 @@ ---Minetest +--Luanti --Copyright (C) 2022 rubenwardy -- --This program is free software; you can redistribute it and/or modify diff --git a/builtin/mainmenu/content/update_detector.lua b/builtin/mainmenu/content/update_detector.lua index 1f8672bba..4d0c1196b 100644 --- a/builtin/mainmenu/content/update_detector.lua +++ b/builtin/mainmenu/content/update_detector.lua @@ -1,4 +1,4 @@ ---Minetest +--Luanti --Copyright (C) 2023 rubenwardy -- --This program is free software; you can redistribute it and/or modify diff --git a/builtin/mainmenu/dlg_config_world.lua b/builtin/mainmenu/dlg_config_world.lua index a8c5221de..cb5cdd635 100644 --- a/builtin/mainmenu/dlg_config_world.lua +++ b/builtin/mainmenu/dlg_config_world.lua @@ -1,4 +1,4 @@ ---Minetest +--Luanti --Copyright (C) 2013 sapier -- --This program is free software; you can redistribute it and/or modify diff --git a/builtin/mainmenu/dlg_create_world.lua b/builtin/mainmenu/dlg_create_world.lua index 772025a25..4844c85fe 100644 --- a/builtin/mainmenu/dlg_create_world.lua +++ b/builtin/mainmenu/dlg_create_world.lua @@ -1,4 +1,4 @@ ---Minetest +--Luanti --Copyright (C) 2014 sapier -- --This program is free software; you can redistribute it and/or modify diff --git a/builtin/mainmenu/dlg_delete_content.lua b/builtin/mainmenu/dlg_delete_content.lua index 98e15bf01..a36bcb2d7 100644 --- a/builtin/mainmenu/dlg_delete_content.lua +++ b/builtin/mainmenu/dlg_delete_content.lua @@ -1,4 +1,4 @@ ---Minetest +--Luanti --Copyright (C) 2014 sapier -- --This program is free software; you can redistribute it and/or modify diff --git a/builtin/mainmenu/dlg_delete_world.lua b/builtin/mainmenu/dlg_delete_world.lua index 67c0612bd..531b4927d 100644 --- a/builtin/mainmenu/dlg_delete_world.lua +++ b/builtin/mainmenu/dlg_delete_world.lua @@ -1,4 +1,4 @@ ---Minetest +--Luanti --Copyright (C) 2014 sapier -- --This program is free software; you can redistribute it and/or modify diff --git a/builtin/mainmenu/dlg_register.lua b/builtin/mainmenu/dlg_register.lua index a7658249c..88a449ae3 100644 --- a/builtin/mainmenu/dlg_register.lua +++ b/builtin/mainmenu/dlg_register.lua @@ -1,4 +1,4 @@ ---Minetest +--Luanti --Copyright (C) 2022 rubenwardy -- --This program is free software; you can redistribute it and/or modify diff --git a/builtin/mainmenu/dlg_reinstall_mtg.lua b/builtin/mainmenu/dlg_reinstall_mtg.lua index 685847024..85bdedf7b 100644 --- a/builtin/mainmenu/dlg_reinstall_mtg.lua +++ b/builtin/mainmenu/dlg_reinstall_mtg.lua @@ -1,4 +1,4 @@ ---Minetest +--Luanti --Copyright (C) 2023 Gregor Parzefall -- --This program is free software; you can redistribute it and/or modify @@ -68,15 +68,15 @@ end local function get_formspec(dialogdata) local markup = table.concat({ "", fgettext("Minetest Game is no longer installed by default"), "\n", - fgettext("For a long time, the Minetest engine shipped with a default game called \"Minetest Game\". " .. - "Since Minetest 5.8.0, Minetest ships without a default game."), "\n", + fgettext("For a long time, Luanti shipped with a default game called \"Minetest Game\". " .. + "Since version 5.8.0, Luanti ships without a default game."), "\n", fgettext("If you want to continue playing in your Minetest Game worlds, you need to reinstall Minetest Game."), }) return table.concat({ "formspec_version[6]", "size[12.8,7]", - "hypertext[0.375,0.375;12.05,5.2;text;", minetest.formspec_escape(markup), "]", + "hypertext[0.375,0.375;12.05,5.2;text;", core.formspec_escape(markup), "]", "container[0.375,5.825]", "style[dismiss;bgcolor=red]", "button[0,0;4,0.8;dismiss;", fgettext("Dismiss"), "]", @@ -114,7 +114,7 @@ local function eventhandler(event) return true elseif event == "MenuQuit" then -- Don't allow closing the dialog with ESC, but still allow exiting - -- Minetest. + -- Luanti core.close() return true end diff --git a/builtin/mainmenu/dlg_rename_modpack.lua b/builtin/mainmenu/dlg_rename_modpack.lua index 884140eb3..09df92d25 100644 --- a/builtin/mainmenu/dlg_rename_modpack.lua +++ b/builtin/mainmenu/dlg_rename_modpack.lua @@ -1,4 +1,4 @@ ---Minetest +--Luanti --Copyright (C) 2014 sapier -- --This program is free software; you can redistribute it and/or modify diff --git a/builtin/mainmenu/dlg_version_info.lua b/builtin/mainmenu/dlg_version_info.lua index 483cd30bd..b3b7481e3 100644 --- a/builtin/mainmenu/dlg_version_info.lua +++ b/builtin/mainmenu/dlg_version_info.lua @@ -1,5 +1,5 @@ --[[ -Minetest +Luanti Copyright (C) 2018-2020 SmallJoker, 2022 rubenwardy This program is free software; you can redistribute it and/or modify diff --git a/builtin/mainmenu/game_theme.lua b/builtin/mainmenu/game_theme.lua index 993a48c1e..7c6408157 100644 --- a/builtin/mainmenu/game_theme.lua +++ b/builtin/mainmenu/game_theme.lua @@ -1,4 +1,4 @@ ---Minetest +--Luanti --Copyright (C) 2013 sapier -- --This program is free software; you can redistribute it and/or modify diff --git a/builtin/mainmenu/init.lua b/builtin/mainmenu/init.lua index dd35334c2..fc237e158 100644 --- a/builtin/mainmenu/init.lua +++ b/builtin/mainmenu/init.lua @@ -1,4 +1,4 @@ ---Minetest +--Luanti --Copyright (C) 2014 sapier -- --This program is free software; you can redistribute it and/or modify diff --git a/builtin/mainmenu/serverlistmgr.lua b/builtin/mainmenu/serverlistmgr.lua index 601b42110..1b69d7a55 100644 --- a/builtin/mainmenu/serverlistmgr.lua +++ b/builtin/mainmenu/serverlistmgr.lua @@ -1,4 +1,4 @@ ---Minetest +--Luanti --Copyright (C) 2020 rubenwardy -- --This program is free software; you can redistribute it and/or modify diff --git a/builtin/mainmenu/settings/components.lua b/builtin/mainmenu/settings/components.lua index 79253558b..64cd27c3c 100644 --- a/builtin/mainmenu/settings/components.lua +++ b/builtin/mainmenu/settings/components.lua @@ -1,4 +1,4 @@ ---Minetest +--Luanti --Copyright (C) 2022 rubenwardy -- --This program is free software; you can redistribute it and/or modify diff --git a/builtin/mainmenu/settings/dlg_change_mapgen_flags.lua b/builtin/mainmenu/settings/dlg_change_mapgen_flags.lua index 570d184da..31dd40bd8 100644 --- a/builtin/mainmenu/settings/dlg_change_mapgen_flags.lua +++ b/builtin/mainmenu/settings/dlg_change_mapgen_flags.lua @@ -1,4 +1,4 @@ ---Minetest +--Luanti --Copyright (C) 2015 PilzAdam -- --This program is free software; you can redistribute it and/or modify diff --git a/builtin/mainmenu/settings/dlg_settings.lua b/builtin/mainmenu/settings/dlg_settings.lua index 602d6894f..57e5a1300 100644 --- a/builtin/mainmenu/settings/dlg_settings.lua +++ b/builtin/mainmenu/settings/dlg_settings.lua @@ -1,4 +1,4 @@ ---Minetest +--Luanti --Copyright (C) 2022 rubenwardy -- --This program is free software; you can redistribute it and/or modify @@ -743,7 +743,7 @@ end local function eventhandler(event) if event == "DialogShow" then - -- Don't show the "MINETEST" header behind the dialog. + -- Don't show the header image behind the dialog. mm_game_theme.set_engine(true) return true end diff --git a/builtin/mainmenu/settings/generate_from_settingtypes.lua b/builtin/mainmenu/settings/generate_from_settingtypes.lua index e18b2c2d6..198037776 100644 --- a/builtin/mainmenu/settings/generate_from_settingtypes.lua +++ b/builtin/mainmenu/settings/generate_from_settingtypes.lua @@ -13,7 +13,7 @@ local minetest_example_header = [[ # ../minetest.conf # ../../minetest.conf # Any other path can be chosen by passing the path as a parameter -# to the program, eg. "minetest.exe --config ../minetest.conf.example". +# to the program, eg. "luanti.exe --config ../minetest.conf.example". # Further documentation: # https://wiki.minetest.net/ diff --git a/builtin/mainmenu/settings/init.lua b/builtin/mainmenu/settings/init.lua index 4541468c1..c8615ba34 100644 --- a/builtin/mainmenu/settings/init.lua +++ b/builtin/mainmenu/settings/init.lua @@ -1,4 +1,4 @@ ---Minetest +--Luanti --Copyright (C) 2022 rubenwardy -- --This program is free software; you can redistribute it and/or modify diff --git a/builtin/mainmenu/settings/settingtypes.lua b/builtin/mainmenu/settings/settingtypes.lua index eacd96d09..e763535a9 100644 --- a/builtin/mainmenu/settings/settingtypes.lua +++ b/builtin/mainmenu/settings/settingtypes.lua @@ -1,4 +1,4 @@ ---Minetest +--Luanti --Copyright (C) 2015 PilzAdam -- --This program is free software; you can redistribute it and/or modify diff --git a/builtin/mainmenu/settings/shader_warning_component.lua b/builtin/mainmenu/settings/shader_warning_component.lua index d1de0cd4a..b227bcee3 100644 --- a/builtin/mainmenu/settings/shader_warning_component.lua +++ b/builtin/mainmenu/settings/shader_warning_component.lua @@ -1,4 +1,4 @@ --- Minetest +-- Luanti -- SPDX-License-Identifier: LGPL-2.1-or-later return { diff --git a/builtin/mainmenu/settings/shadows_component.lua b/builtin/mainmenu/settings/shadows_component.lua index 93c071bf7..2ca03b71b 100644 --- a/builtin/mainmenu/settings/shadows_component.lua +++ b/builtin/mainmenu/settings/shadows_component.lua @@ -1,4 +1,4 @@ ---Minetest +--Luanti --Copyright (C) 2021-2 x2048 --Copyright (C) 2022-3 rubenwardy -- diff --git a/builtin/mainmenu/tab_about.lua b/builtin/mainmenu/tab_about.lua index 627ccb4ca..a038db9bc 100644 --- a/builtin/mainmenu/tab_about.lua +++ b/builtin/mainmenu/tab_about.lua @@ -1,4 +1,4 @@ ---Minetest +--Luanti --Copyright (C) 2013 sapier -- --This program is free software; you can redistribute it and/or modify @@ -79,7 +79,7 @@ return { "button[0.1,3.4;5.3,0.5;label_button;" .. core.formspec_escape(version.project .. " " .. version.string) .. "]" .. "button_url[1.5,4.1;2.5,0.8;homepage;luanti.org;https://www.luanti.org/]" .. - "hypertext[5.5,0.25;9.75,6.6;credits;" .. minetest.formspec_escape(hypertext) .. "]" + "hypertext[5.5,0.25;9.75,6.6;credits;" .. core.formspec_escape(hypertext) .. "]" -- Render information local active_renderer_info = fgettext("Active renderer:") .. " " .. diff --git a/builtin/mainmenu/tab_content.lua b/builtin/mainmenu/tab_content.lua index 9cfb96d54..cd384c905 100644 --- a/builtin/mainmenu/tab_content.lua +++ b/builtin/mainmenu/tab_content.lua @@ -1,4 +1,4 @@ ---Minetest +--Luanti --Copyright (C) 2014 sapier --Copyright (C) 2018 rubenwardy -- diff --git a/builtin/mainmenu/tab_local.lua b/builtin/mainmenu/tab_local.lua index 2789431b9..083f9a50a 100644 --- a/builtin/mainmenu/tab_local.lua +++ b/builtin/mainmenu/tab_local.lua @@ -1,4 +1,4 @@ ---Minetest +--Luanti --Copyright (C) 2014 sapier -- --This program is free software; you can redistribute it and/or modify diff --git a/builtin/mainmenu/tab_online.lua b/builtin/mainmenu/tab_online.lua index d93f45dcf..8674d908a 100644 --- a/builtin/mainmenu/tab_online.lua +++ b/builtin/mainmenu/tab_online.lua @@ -1,4 +1,4 @@ ---Minetest +--Luanti --Copyright (C) 2014 sapier -- --This program is free software; you can redistribute it and/or modify diff --git a/builtin/profiler/init.lua b/builtin/profiler/init.lua index 7f63dfaea..f5b4b7c7e 100644 --- a/builtin/profiler/init.lua +++ b/builtin/profiler/init.lua @@ -1,4 +1,4 @@ ---Minetest +--Luanti --Copyright (C) 2016 T4im -- --This program is free software; you can redistribute it and/or modify diff --git a/builtin/profiler/instrumentation.lua b/builtin/profiler/instrumentation.lua index c4feda7b4..e012f07a0 100644 --- a/builtin/profiler/instrumentation.lua +++ b/builtin/profiler/instrumentation.lua @@ -1,4 +1,4 @@ ---Minetest +--Luanti --Copyright (C) 2016 T4im -- --This program is free software; you can redistribute it and/or modify diff --git a/builtin/profiler/reporter.lua b/builtin/profiler/reporter.lua index 2e24a1fe0..7bc1b235d 100644 --- a/builtin/profiler/reporter.lua +++ b/builtin/profiler/reporter.lua @@ -1,4 +1,4 @@ ---Minetest +--Luanti --Copyright (C) 2016 T4im -- --This program is free software; you can redistribute it and/or modify diff --git a/builtin/profiler/sampling.lua b/builtin/profiler/sampling.lua index 4b53399a5..16d6c2012 100644 --- a/builtin/profiler/sampling.lua +++ b/builtin/profiler/sampling.lua @@ -1,4 +1,4 @@ ---Minetest +--Luanti --Copyright (C) 2016 T4im -- --This program is free software; you can redistribute it and/or modify diff --git a/builtin/settingtypes.txt b/builtin/settingtypes.txt index 3e23cd9c5..ec739b700 100644 --- a/builtin/settingtypes.txt +++ b/builtin/settingtypes.txt @@ -199,7 +199,7 @@ virtual_joystick_triggers_aux1 (Virtual joystick triggers Aux1 button) bool fals # Easy to use and well-known from other games that shall not be named. # # * long_tap -# Known from the classic Minetest mobile controls. +# Known from the classic Luanti mobile controls. # Combat is more or less impossible. # # Requires: touchscreen @@ -764,7 +764,7 @@ chat_font_size (Chat font size) int 0 0 72 # The URL for the content repository contentdb_url (ContentDB URL) string https://content.minetest.net -# If enabled and you have ContentDB packages installed, Minetest may contact ContentDB to +# If enabled and you have ContentDB packages installed, Luanti may contact ContentDB to # check for package updates when opening the mainmenu. contentdb_enable_updates_indicator (Enable updates available indicator on content tab) bool true @@ -772,7 +772,7 @@ contentdb_enable_updates_indicator (Enable updates available indicator on conten # "nonfree" can be used to hide packages which do not qualify as 'free software', # as defined by the Free Software Foundation. # You can also specify content ratings. -# These flags are independent from Minetest versions, +# These flags are independent from Luanti versions, # so see a full list at https://content.minetest.net/help/content_flags/ contentdb_flag_blacklist (ContentDB Flag Blacklist) string nonfree, desktop_default @@ -795,7 +795,7 @@ serverlist_url (Serverlist URL) string servers.minetest.net # If disabled, new accounts will be registered automatically when logging in. enable_split_login_register (Enable split login/register) bool true -# URL to JSON file which provides information about the newest Minetest release. +# URL to JSON file which provides information about the newest Luanti release. # If this is empty the engine will never check for updates. update_information_url (Update information URL) string https://www.minetest.net/release_info.json @@ -809,7 +809,7 @@ name (Admin name) string [**Serverlist and MOTD] # Name of the server, to be displayed when players join and in the serverlist. -server_name (Server name) string Minetest server +server_name (Server name) string Luanti server # Description of server, to be displayed when players join and in the serverlist. server_description (Server description) string mine here @@ -856,7 +856,7 @@ strict_protocol_version_checking (Strict protocol checking) bool false # Older clients are compatible in the sense that they will not crash when connecting # to new servers, but they may not support all new features that you are expecting. # This allows for more fine-grained control than strict_protocol_version_checking. -# Minetest still enforces its own internal minimum, and enabling +# Luanti still enforces its own internal minimum, and enabling # strict_protocol_version_checking will effectively override this. protocol_version_min (Protocol version minimum) int 1 1 65535 @@ -1805,7 +1805,7 @@ instrument.lbm (Loading Block Modifiers) bool true instrument.chatcommand (Chat commands) bool true # Instrument global callback functions on registration. -# (anything you pass to a minetest.register_*() function) +# (anything you pass to a core.register_*() function) instrument.global_callback (Global callbacks) bool true # Instrument builtin. @@ -1873,7 +1873,7 @@ enable_mesh_cache (Mesh cache) bool false mesh_generation_interval (Mapblock mesh generation delay) int 0 0 50 # Number of threads to use for mesh generation. -# Value of 0 (default) will let Minetest autodetect the number of available threads. +# Value of 0 (default) will let Luanti autodetect the number of available threads. mesh_generation_threads (Mapblock mesh generation threads) int 0 0 8 # True = 256 @@ -2007,7 +2007,7 @@ lighting_boost_spread (Light curve boost spread) float 0.2 0.0 0.4 [**Networking] # Prometheus listener address. -# If Minetest is compiled with ENABLE_PROMETHEUS option enabled, +# If Luanti is compiled with ENABLE_PROMETHEUS option enabled, # enable metrics listener for Prometheus on that address. # Metrics can be fetched on http://127.0.0.1:30000/metrics prometheus_listener_address (Prometheus listener address) string 127.0.0.1:30000 @@ -2214,7 +2214,7 @@ curl_file_download_timeout (cURL file download timeout) int 300000 5000 21474836 # Adjust the detected display density, used for scaling UI elements. display_density_factor (Display Density Scaling Factor) float 1 0.5 5.0 -# Windows systems only: Start Minetest with the command line window in the background. +# Windows systems only: Start Luanti with the command line window in the background. # Contains the same information as the file debug.txt (default name). enable_console (Enable console window) bool false From 03cf7a8e052ca9a2ee007a96c38551d7d9f1ffca Mon Sep 17 00:00:00 2001 From: sfence Date: Mon, 28 Oct 2024 19:40:28 +0100 Subject: [PATCH 057/178] Make Luanti buildable for macOS 10.15 also. (#15352) --- src/client/sound/sound_data.h | 1 + src/network/networkpacket.h | 1 + src/objdef.h | 1 + 3 files changed, 3 insertions(+) diff --git a/src/client/sound/sound_data.h b/src/client/sound/sound_data.h index e91da5ecf..572f1c0d4 100644 --- a/src/client/sound/sound_data.h +++ b/src/client/sound/sound_data.h @@ -11,6 +11,7 @@ #include "ogg_file.h" #include #include +#include namespace sound { diff --git a/src/network/networkpacket.h b/src/network/networkpacket.h index 823b0993d..4e4fd78bb 100644 --- a/src/network/networkpacket.h +++ b/src/network/networkpacket.h @@ -8,6 +8,7 @@ #include "irrlichttypes_bloated.h" #include "networkprotocol.h" #include +#include class NetworkPacket { diff --git a/src/objdef.h b/src/objdef.h index 31b686349..93dd78837 100644 --- a/src/objdef.h +++ b/src/objdef.h @@ -6,6 +6,7 @@ #include "util/basic_macros.h" #include "porting.h" +#include class IGameDef; class NodeDefManager; From 33178a38b978203b37a37e70e29c5f2768dd0002 Mon Sep 17 00:00:00 2001 From: 109247019824 Date: Sun, 11 Aug 2024 20:13:42 +0000 Subject: [PATCH 058/178] Translated using Weblate (Bulgarian) Currently translated at 36.5% (488 of 1335 strings) --- po/bg/luanti.po | 326 ++++++++++++++++++++---------------------------- 1 file changed, 136 insertions(+), 190 deletions(-) diff --git a/po/bg/luanti.po b/po/bg/luanti.po index f83c8e50a..aae4deecb 100644 --- a/po/bg/luanti.po +++ b/po/bg/luanti.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-07-11 15:14+0200\n" -"PO-Revision-Date: 2023-10-24 20:27+0000\n" +"PO-Revision-Date: 2024-08-25 05:09+0000\n" "Last-Translator: 109247019824 \n" "Language-Team: Bulgarian \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.1.1-dev\n" +"X-Generator: Weblate 5.7.1-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -71,9 +71,8 @@ msgid "Command not available: " msgstr "Недостъпни команди: " #: builtin/common/chatcommands.lua -#, fuzzy msgid "Get help for commands (-t: output in chat)" -msgstr "Помощ за командите" +msgstr "Помощ за командите (-t: извежда в разговорите)" #: builtin/common/chatcommands.lua msgid "" @@ -83,9 +82,8 @@ msgstr "" "всички команди." #: builtin/common/chatcommands.lua -#, fuzzy msgid "[all | ] [-t]" -msgstr "[all | <команда>]" +msgstr "[all | <команда>] [-t]" #: builtin/fstk/ui.lua msgid "" @@ -148,12 +146,12 @@ msgid "Failed to download $1" msgstr "Грешка при изтеглянето на $1" #: builtin/mainmenu/content/contentdb.lua -#, fuzzy msgid "" "Failed to extract \"$1\" (insufficient disk space, unsupported file type or " "broken archive)" msgstr "" -"Грешка при извличане на „$1“ (неподдържан вид на файл или повреден архив)" +"Грешка при извличане на „$1“ (недостатъчно място на диска, неподдържан вид " +"на файл или повреден архив)" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "" @@ -186,7 +184,7 @@ msgstr "Изтегляне…" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "Error getting dependencies for package" -msgstr "" +msgstr "Грешка при получаване на зависимостите на пакет" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "Games" @@ -228,9 +226,8 @@ msgid "Texture packs" msgstr "Пакети с текстури" #: builtin/mainmenu/content/dlg_contentdb.lua -#, fuzzy msgid "The package $1 was not found." -msgstr "Добавката $1/$2 не е намерена." +msgstr "Пакетът $1 не е намерен." #: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua msgid "Uninstall" @@ -331,16 +328,17 @@ msgstr "Грешка при инсталиране на $1 в $2" #: builtin/mainmenu/content/pkgmgr.lua msgid "Install: Unable to find suitable folder name for $1" -msgstr "" +msgstr "Инсталиране: не може да бъде намерено подходящо име на папка за $1" #: builtin/mainmenu/content/pkgmgr.lua msgid "Unable to find a valid mod, modpack, or game" msgstr "" +"Не може да бъде намерена дейстителна модификация, пакет с модификации или " +"игра" #: builtin/mainmenu/content/pkgmgr.lua -#, fuzzy msgid "Unable to install a $1 as a $2" -msgstr "Грешка при инсталиране на $1 в $2" +msgstr "Грешка при инсталиране на $1 като $2" #: builtin/mainmenu/content/pkgmgr.lua msgid "Unable to install a $1 as a texture pack" @@ -466,7 +464,7 @@ msgstr "Декорации" #: builtin/mainmenu/dlg_create_world.lua msgid "Desert temples" -msgstr "" +msgstr "Пустинни храмове" #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." @@ -477,6 +475,8 @@ msgid "" "Different dungeon variant generated in desert biomes (only if dungeons " "enabled)" msgstr "" +"Различни подземни варианти, разположени в пустинни биоми (само при включени " +"подземия)" #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" @@ -689,15 +689,16 @@ msgid "" "If you want to continue playing in your Minetest Game worlds, you need to " "reinstall Minetest Game." msgstr "" +"Ако искате да продължите да играете в своите светове на Minetest Game, " +"трябва да инсталирате играта Minetest Game." #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "Minetest Game is no longer installed by default" -msgstr "" +msgstr "Играта Minetest Game не е инсталирана по подразбиране" #: builtin/mainmenu/dlg_reinstall_mtg.lua -#, fuzzy msgid "Reinstall Minetest Game" -msgstr "Инсталиране на друга игра" +msgstr "Повторно инсталиране на Minetest Game" #: builtin/mainmenu/dlg_rename_modpack.lua msgid "Accept" @@ -774,7 +775,7 @@ msgstr "Избор на файл" #: builtin/mainmenu/settings/components.lua msgid "Set" -msgstr "" +msgstr "Задаване" #: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua msgid "(No description of setting given)" @@ -839,18 +840,17 @@ msgstr "подразбирани" #. the settings menu. #: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua msgid "eased" -msgstr "" +msgstr "загладено" #: builtin/mainmenu/settings/dlg_settings.lua msgid "(Use system language)" -msgstr "" +msgstr "(Системен език)" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Accessibility" -msgstr "" +msgstr "Достъпност" #: builtin/mainmenu/settings/dlg_settings.lua -#, fuzzy msgid "Back" msgstr "Назад" @@ -866,25 +866,23 @@ msgstr "Изчистване" #: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp #: src/settings_translation_file.cpp msgid "Controls" -msgstr "" +msgstr "Управление" #: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp msgid "General" -msgstr "" +msgstr "Общи" #: builtin/mainmenu/settings/dlg_settings.lua -#, fuzzy msgid "Movement" -msgstr "Бързо движение" +msgstr "Придвижване" #: builtin/mainmenu/settings/dlg_settings.lua -#, fuzzy msgid "Reset setting to default" -msgstr "По подразбиране" +msgstr "Подразбирани настройки" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Reset setting to default ($1)" -msgstr "" +msgstr "Нулиране до подразбирана стойност ($1)" #: builtin/mainmenu/settings/dlg_settings.lua builtin/mainmenu/tab_online.lua msgid "Search" @@ -892,34 +890,31 @@ msgstr "Търсене" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Show advanced settings" -msgstr "" +msgstr "Разширени настройки" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Show technical names" msgstr "Технически наименования" #: builtin/mainmenu/settings/settingtypes.lua -#, fuzzy msgid "Client Mods" -msgstr "Модификации" +msgstr "Модификации за клиента" #: builtin/mainmenu/settings/settingtypes.lua -#, fuzzy msgid "Content: Games" -msgstr "Съдържание" +msgstr "Съдържание: Игри" #: builtin/mainmenu/settings/settingtypes.lua -#, fuzzy msgid "Content: Mods" -msgstr "Съдържание" +msgstr "Съдържание: Модификации" #: builtin/mainmenu/settings/shadows_component.lua msgid "(The game will need to enable shadows as well)" -msgstr "" +msgstr "(Също, трябва да влючите сенките в играта)" #: builtin/mainmenu/settings/shadows_component.lua msgid "Custom" -msgstr "" +msgstr "По избор" #: builtin/mainmenu/settings/shadows_component.lua msgid "Disabled" @@ -943,9 +938,8 @@ msgid "Medium" msgstr "Нормални" #: builtin/mainmenu/settings/shadows_component.lua -#, fuzzy msgid "Very High" -msgstr "Много силни" +msgstr "Много високи" #: builtin/mainmenu/settings/shadows_component.lua msgid "Very Low" @@ -969,11 +963,11 @@ msgstr "Основни разработчици" #: builtin/mainmenu/tab_about.lua msgid "Core Team" -msgstr "" +msgstr "Основен екип" #: builtin/mainmenu/tab_about.lua msgid "Irrlicht device:" -msgstr "" +msgstr "Устройство на Irrlicht:" #: builtin/mainmenu/tab_about.lua msgid "Open User Data Directory" @@ -997,25 +991,23 @@ msgstr "Предишни основни разработчици" #: builtin/mainmenu/tab_about.lua msgid "Share debug log" -msgstr "" +msgstr "Споделяне на дневник за отстраняване на дефекти" #: builtin/mainmenu/tab_content.lua msgid "Browse online content" msgstr "Преглед на съдържание онлайн" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Browse online content [$1]" -msgstr "Преглед на съдържание онлайн" +msgstr "Преглед на съдържание онлайн [$1]" #: builtin/mainmenu/tab_content.lua msgid "Content" msgstr "Съдържание" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Content [$1]" -msgstr "Съдържание" +msgstr "Съдържание [$1]" #: builtin/mainmenu/tab_content.lua msgid "Disable Texture Pack" @@ -1038,9 +1030,8 @@ msgid "Rename" msgstr "Преименуване" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Update available?" -msgstr "<няма достъпни>" +msgstr "Няма обновяване?" #: builtin/mainmenu/tab_content.lua msgid "Use Texture Pack" @@ -1071,9 +1062,8 @@ msgid "Host Server" msgstr "Създаване на сървър" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Install a game" -msgstr "Инсталиране $1" +msgstr "Инсталиране на игра" #: builtin/mainmenu/tab_local.lua msgid "Install games from ContentDB" @@ -1107,7 +1097,7 @@ msgstr "Порт" #: builtin/mainmenu/tab_local.lua msgid "Select Mods" -msgstr "Модификации" +msgstr "Избор модификации" #: builtin/mainmenu/tab_local.lua msgid "Select World:" @@ -1122,9 +1112,8 @@ msgid "Start Game" msgstr "Създаване на игра" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "You need to install a game before you can create a world." -msgstr "Необходимо е да инсталирате игра преди да инсталирате модификация" +msgstr "Необходимо е да инсталирате игра преди да създадете свят." #: builtin/mainmenu/tab_online.lua msgid "Address" @@ -1141,7 +1130,7 @@ msgstr "Щети / PvP" #: builtin/mainmenu/tab_online.lua msgid "Favorites" -msgstr "Любими" +msgstr "Избрани" #: builtin/mainmenu/tab_online.lua msgid "Incompatible Servers" @@ -1153,11 +1142,11 @@ msgstr "Включване към игра" #: builtin/mainmenu/tab_online.lua msgid "Login" -msgstr "" +msgstr "Вход" #: builtin/mainmenu/tab_online.lua msgid "Ping" -msgstr "" +msgstr "Забавяне" #: builtin/mainmenu/tab_online.lua msgid "Public Servers" @@ -1168,18 +1157,16 @@ msgid "Refresh" msgstr "Презареждане" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Remove favorite" -msgstr "Отдалечен порт" +msgstr "Премахване от избраните" #: builtin/mainmenu/tab_online.lua msgid "Server Description" msgstr "Описание на сървър" #: src/client/client.cpp -#, fuzzy msgid "Connection aborted (protocol error?)." -msgstr "Грешка при свързване (изтекло време?)" +msgstr "Грешка при свързване (грешка в протокола?)." #: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." @@ -1256,16 +1243,15 @@ msgstr "- Обществен: " #. ~ PvP = Player versus Player #: src/client/game.cpp msgid "- PvP: " -msgstr "" +msgstr "- PvP: " #: src/client/game.cpp msgid "- Server Name: " msgstr "- Име на сървър: " #: src/client/game.cpp -#, fuzzy msgid "A serialization error occurred:" -msgstr "Възникна грешка:" +msgstr "Възникна грешка при сериализиране:" #: src/client/game.cpp #, c-format @@ -1301,11 +1287,10 @@ msgid "Camera update enabled" msgstr "Опресняването на екрана при движение е включено" #: src/client/game.cpp -#, fuzzy msgid "Can't show block bounds (disabled by game or mod)" msgstr "" -"Контурите на блоковете не могат да бъдат показани (заб.: липсва правото " -"„basic_debug“)" +"Контурите на блоковете не могат да бъдат показани (забранено от игра или " +"модификация)" #: src/client/game.cpp msgid "Change Password" @@ -1362,7 +1347,7 @@ msgstr "" #: src/client/game.cpp #, c-format msgid "Couldn't resolve address: %s" -msgstr "" +msgstr "Адресът не може да бъде открит: %s" #: src/client/game.cpp msgid "Creating client..." @@ -1378,7 +1363,7 @@ msgstr "" #: src/client/game.cpp msgid "Debug info shown" -msgstr "" +msgstr "Показана е информацията за отстраняване на дефекти" #: src/client/game.cpp msgid "Debug info, profiler graph, and wireframe hidden" @@ -1430,9 +1415,8 @@ msgid "Fog enabled" msgstr "Мъглата е включена" #: src/client/game.cpp -#, fuzzy msgid "Fog enabled by game or mod" -msgstr "Мащабирането е спряно или от играта, или от модификация" +msgstr "Мъглата е включена от игра или модификация" #: src/client/game.cpp msgid "Game info:" @@ -1452,11 +1436,11 @@ msgstr "Дефиниции на предмети…" #: src/client/game.cpp msgid "KiB/s" -msgstr "" +msgstr "КиБ/с" #: src/client/game.cpp msgid "MiB/s" -msgstr "" +msgstr "МиБ/с" #: src/client/game.cpp msgid "Minimap currently disabled by game or mod" @@ -1464,7 +1448,7 @@ msgstr "Картата е спряна или от играта, или от м #: src/client/game.cpp msgid "Multiplayer" -msgstr "Множество играчи" +msgstr "Игра в мрежа" #: src/client/game.cpp msgid "Noclip mode disabled" @@ -1554,12 +1538,10 @@ msgid "Unable to listen on %s because IPv6 is disabled" msgstr "" #: src/client/game.cpp -#, fuzzy msgid "Unlimited viewing range disabled" -msgstr "Неограниченият обхват на видимост е включен" +msgstr "Неограниченият обхват на видимост е изключен" #: src/client/game.cpp -#, fuzzy msgid "Unlimited viewing range enabled" msgstr "Неограниченият обхват на видимост е включен" @@ -1568,9 +1550,9 @@ msgid "Unlimited viewing range enabled, but forbidden by game or mod" msgstr "" #: src/client/game.cpp -#, fuzzy, c-format +#, c-format msgid "Viewing changed to %d (the minimum)" -msgstr "Обхватът на видимостта е на своя минимум: %d" +msgstr "Видимостта е променена на %d (минимум)" #: src/client/game.cpp #, c-format @@ -1583,9 +1565,9 @@ msgid "Viewing range changed to %d" msgstr "Обхватът на видимостта е променен на %d" #: src/client/game.cpp -#, fuzzy, c-format +#, c-format msgid "Viewing range changed to %d (the maximum)" -msgstr "Обхватът на видимостта е променен на %d" +msgstr "Видимостта е променена на %d (максимум)" #: src/client/game.cpp #, c-format @@ -1594,9 +1576,11 @@ msgid "" msgstr "" #: src/client/game.cpp -#, fuzzy, c-format +#, c-format msgid "Viewing range changed to %d, but limited to %d by game or mod" -msgstr "Обхватът на видимостта е променен на %d" +msgstr "" +"Обхватът на видимостта е променен на %d, но е ограничен до %d от игра или " +"модификация" #: src/client/game.cpp #, c-format @@ -1612,9 +1596,8 @@ msgid "Zoom currently disabled by game or mod" msgstr "Мащабирането е спряно или от играта, или от модификация" #: src/client/gameui.cpp -#, fuzzy msgid "Chat currently disabled by game or mod" -msgstr "Мащабирането е спряно или от играта, или от модификация" +msgstr "Разговорите са спрени от игра или модификация" #: src/client/gameui.cpp msgid "Chat hidden" @@ -1659,19 +1642,16 @@ msgid "Caps Lock" msgstr "Caps Lock" #: src/client/keycode.cpp -#, fuzzy msgid "Clear Key" -msgstr "Изчистване" +msgstr "Clear" #: src/client/keycode.cpp -#, fuzzy msgid "Control Key" -msgstr "Control" +msgstr "Ctrl" #: src/client/keycode.cpp -#, fuzzy msgid "Delete Key" -msgstr "Премахване" +msgstr "Delete" #: src/client/keycode.cpp msgid "Down Arrow" @@ -1722,9 +1702,8 @@ msgid "Insert" msgstr "" #: src/client/keycode.cpp -#, fuzzy msgid "Left Arrow" -msgstr "Ляв Control" +msgstr "Лява стрелка" #: src/client/keycode.cpp msgid "Left Button" @@ -1824,9 +1803,8 @@ msgid "OEM Clear" msgstr "" #: src/client/keycode.cpp -#, fuzzy msgid "Page Down" -msgstr "Надолу" +msgstr "Page Down" #: src/client/keycode.cpp msgid "Page Up" @@ -1834,9 +1812,8 @@ msgstr "" #. ~ Usually paired with the Break key #: src/client/keycode.cpp -#, fuzzy msgid "Pause Key" -msgstr "Промяна на клавиши" +msgstr "Pause" #: src/client/keycode.cpp msgid "Play" @@ -1852,9 +1829,8 @@ msgid "Return Key" msgstr "" #: src/client/keycode.cpp -#, fuzzy msgid "Right Arrow" -msgstr "Десен Control" +msgstr "Дясна стрелка" #: src/client/keycode.cpp msgid "Right Button" @@ -1886,7 +1862,6 @@ msgid "Select" msgstr "" #: src/client/keycode.cpp -#, fuzzy msgid "Shift Key" msgstr "Shift" @@ -1919,9 +1894,8 @@ msgid "X Button 2" msgstr "" #: src/client/keycode.cpp -#, fuzzy msgid "Zoom Key" -msgstr "Мащабиране" +msgstr "Zoom" #: src/client/minimap.cpp msgid "Minimap hidden" @@ -1942,9 +1916,9 @@ msgid "Minimap in texture mode" msgstr "Картата е в режим на текстура" #: src/client/shader.cpp -#, fuzzy, c-format +#, c-format msgid "Failed to compile the \"%s\" shader." -msgstr "Грешка при отваряне на страница" +msgstr "Грешка при компилиране на шейдъра „%s“." #: src/client/shader.cpp msgid "Shaders are enabled but GLSL is not supported by the driver." @@ -1968,9 +1942,8 @@ msgid "" msgstr "" #: src/content/mod_configuration.cpp -#, fuzzy msgid "Some mods have unsatisfied dependencies:" -msgstr "Няма задължителни зависимости" +msgstr "Някоя модификация има неудовлетворени зависимости:" #: src/gui/guiChatConsole.cpp msgid "Failed to open webpage" @@ -2062,7 +2035,7 @@ msgstr "Клавишът вече се ползва" #: src/gui/guiKeyChangeMenu.cpp msgid "Keybindings." -msgstr "" +msgstr "Клавишни комбинации." #: src/gui/guiKeyChangeMenu.cpp msgid "Left" @@ -2146,12 +2119,11 @@ msgstr "" #: src/gui/guiOpenURL.cpp msgid "Open URL?" -msgstr "" +msgstr "Посещаване на адреса?" #: src/gui/guiOpenURL.cpp -#, fuzzy msgid "Unable to open URL" -msgstr "Грешка при отваряне на страница" +msgstr "Грешка при отваряне на адрес" #: src/gui/guiPasswordChange.cpp msgid "Change" @@ -2194,16 +2166,17 @@ msgstr "bg" msgid "" "Name is not registered. To create an account on this server, click 'Register'" msgstr "" +"Името не е регистрирано. За да направите профил на сървъра използвайте " +"бутона „Регистриране“" #: src/network/clientpackethandler.cpp -#, fuzzy msgid "Name is taken. Please choose another name" -msgstr "Изберете име!" +msgstr "Името е заето. Изберете друго" #: src/server.cpp -#, fuzzy, c-format +#, c-format msgid "%s while shutting down: " -msgstr "Изключване…" +msgstr "%s докато изключва: " #: src/settings_translation_file.cpp msgid "" @@ -2388,9 +2361,8 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Admin name" -msgstr "Име на света" +msgstr "Име на администратора" #: src/settings_translation_file.cpp msgid "Advanced" @@ -2398,7 +2370,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Allows liquids to be translucent." -msgstr "" +msgstr "Дава възможност за полупрозрачност на течностите." #: src/settings_translation_file.cpp msgid "" @@ -2434,14 +2406,12 @@ msgid "Announce to this serverlist." msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Anti-aliasing scale" -msgstr "Сгласяне:" +msgstr "Количество сгласяне" #: src/settings_translation_file.cpp -#, fuzzy msgid "Antialiasing method" -msgstr "Сгласяне:" +msgstr "Метод на сгласяне" #: src/settings_translation_file.cpp msgid "Append item name" @@ -2533,9 +2503,8 @@ msgid "Base terrain height." msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Base texture size" -msgstr "Вкл. на пакет с текстури" +msgstr "Размер на основната текстура" #: src/settings_translation_file.cpp msgid "Basic privileges" @@ -2558,9 +2527,8 @@ msgid "Bind address" msgstr "Адрес за свързване" #: src/settings_translation_file.cpp -#, fuzzy msgid "Biome API" -msgstr "Биоми" +msgstr "ППИ на Биоми" #: src/settings_translation_file.cpp msgid "Biome noise" @@ -2619,9 +2587,8 @@ msgid "Builtin" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Camera" -msgstr "Промяна на камера" +msgstr "Камера" #: src/settings_translation_file.cpp msgid "Camera smoothing" @@ -2686,9 +2653,8 @@ msgid "Chat command time message threshold" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Chat commands" -msgstr "Команда" +msgstr "Команди за полето с разговори" #: src/settings_translation_file.cpp msgid "Chat font size" @@ -2715,9 +2681,8 @@ msgid "Chat message max length" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Chat weblinks" -msgstr "Разговорите са видими" +msgstr "Препратки в разговорите" #: src/settings_translation_file.cpp msgid "Chunk size" @@ -3107,9 +3072,8 @@ msgid "Desynchronize block animation" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Developer Options" -msgstr "Декорации" +msgstr "За разработчици" #: src/settings_translation_file.cpp msgid "Digging particles" @@ -3272,7 +3236,6 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Enable touchscreen" msgstr "Сензорен екран" @@ -3400,6 +3363,8 @@ msgid "" "the\n" "Multiplayer Tab." msgstr "" +"Файл в папка client/serverlist/, съдържащ избраните сървъри, показани в\n" +"раздела Игра в мрежа." #: src/settings_translation_file.cpp msgid "Filler depth" @@ -3414,9 +3379,8 @@ msgid "Filmic tone mapping" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Filtering and Antialiasing" -msgstr "Сгласяне:" +msgstr "Филтриране и сгласяне" #: src/settings_translation_file.cpp msgid "First of 4 2D noises that together define hill/mountain range height." @@ -3613,9 +3577,8 @@ msgid "GUI scaling filter txr2img" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Gamepads" -msgstr "Игри" +msgstr "Контролери" #: src/settings_translation_file.cpp msgid "Global callbacks" @@ -3673,9 +3636,8 @@ msgid "HUD" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "HUD scaling" -msgstr "HUD видим" +msgstr "Мащаб на игровия интетфейс" #: src/settings_translation_file.cpp msgid "" @@ -3809,11 +3771,11 @@ msgstr "" #: src/settings_translation_file.cpp msgid "IPv6" -msgstr "" +msgstr "IPv6" #: src/settings_translation_file.cpp msgid "IPv6 server" -msgstr "" +msgstr "Сървър на IPv6" #: src/settings_translation_file.cpp msgid "" @@ -3848,7 +3810,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "If enabled, disable cheat prevention in multiplayer." -msgstr "" +msgstr "Ако е включено, изключва защитата от измами при игра в мрежа." #: src/settings_translation_file.cpp msgid "" @@ -4055,19 +4017,19 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Julia w" -msgstr "" +msgstr "Жулия w" #: src/settings_translation_file.cpp msgid "Julia x" -msgstr "" +msgstr "Жулия x" #: src/settings_translation_file.cpp msgid "Julia y" -msgstr "" +msgstr "Жулия y" #: src/settings_translation_file.cpp msgid "Julia z" -msgstr "" +msgstr "Жулия z" #: src/settings_translation_file.cpp msgid "Jumping speed" @@ -4079,39 +4041,39 @@ msgstr "Клавиатура и мишка" #: src/settings_translation_file.cpp msgid "Kick players who sent more than X messages per 10 seconds." -msgstr "" +msgstr "Изгонване на играча, изпратил повече от Х съобщения за 10 секунди." #: src/settings_translation_file.cpp msgid "Lake steepness" -msgstr "" +msgstr "Стръмност на езетата" #: src/settings_translation_file.cpp msgid "Lake threshold" -msgstr "" +msgstr "Праг на езерата" #: src/settings_translation_file.cpp msgid "Language" -msgstr "" +msgstr "Език" #: src/settings_translation_file.cpp msgid "Large cave depth" -msgstr "" +msgstr "Дълбочина на големите пещери" #: src/settings_translation_file.cpp msgid "Large cave maximum number" -msgstr "" +msgstr "Максимален брой на големите пещери" #: src/settings_translation_file.cpp msgid "Large cave minimum number" -msgstr "" +msgstr "Минимален брой на големите пещери" #: src/settings_translation_file.cpp msgid "Large cave proportion flooded" -msgstr "Голяма част от пещерите са наводнени" +msgstr "Съотношение на заводненост на големите пещери" #: src/settings_translation_file.cpp msgid "Leaves style" -msgstr "" +msgstr "Стил на листата" #: src/settings_translation_file.cpp msgid "" @@ -4186,9 +4148,8 @@ msgid "Light curve low gradient" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Lighting" -msgstr "Гладко осветление" +msgstr "Осветление" #: src/settings_translation_file.cpp msgid "" @@ -4550,9 +4511,8 @@ msgid "Maximum simultaneous block sends per client" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Maximum size of the outgoing chat queue" -msgstr "Изчистване на изходящата опашка на разговорите" +msgstr "Максимален размер на изходящата опашка на разговорите" #: src/settings_translation_file.cpp msgid "" @@ -4673,9 +4633,8 @@ msgid "Mouse sensitivity multiplier." msgstr "Множител на чувствителността на мишката." #: src/settings_translation_file.cpp -#, fuzzy msgid "Movement threshold" -msgstr "Праг на докосване: (px)" +msgstr "Праг на придвижване" #: src/settings_translation_file.cpp msgid "Mud noise" @@ -4726,9 +4685,8 @@ msgid "New users need to input this password." msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Node and Entity Highlighting" -msgstr "Осветяване на възел" +msgstr "Осветяване на възли и същности" #: src/settings_translation_file.cpp msgid "Node highlighting" @@ -4915,9 +4873,8 @@ msgid "Proportion of large caves that contain liquid." msgstr "Съотношението на големи пещери, съдържащи течности." #: src/settings_translation_file.cpp -#, fuzzy msgid "Protocol version minimum" -msgstr "Изданието на протокола не съвпада. " +msgstr "Минимално издание на протокола" #: src/settings_translation_file.cpp msgid "Punch gesture" @@ -4951,9 +4908,8 @@ msgid "Regular font path" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Remember screen size" -msgstr "Автоматично запазване на размера на екрана" +msgstr "Запазване на размера на екрана" #: src/settings_translation_file.cpp msgid "Remote media" @@ -5074,9 +5030,8 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Screen" -msgstr "Екран:" +msgstr "Екран" #: src/settings_translation_file.cpp msgid "Screen height" @@ -5106,9 +5061,8 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Screenshots" -msgstr "Снимка на екрана" +msgstr "Екранни снимки" #: src/settings_translation_file.cpp msgid "Seabed noise" @@ -5184,19 +5138,16 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Server" -msgstr "Създаване на сървър" +msgstr "Сървър" #: src/settings_translation_file.cpp -#, fuzzy msgid "Server Gameplay" -msgstr "- Име на сървър: " +msgstr "Играене на сървъра" #: src/settings_translation_file.cpp -#, fuzzy msgid "Server Security" -msgstr "Описание на сървър" +msgstr "Защита на сървъра" #: src/settings_translation_file.cpp msgid "Server URL" @@ -5223,9 +5174,8 @@ msgid "Server-side occlusion culling" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Server/Env Performance" -msgstr "Порт на сървъра" +msgstr "Производителност на сървъра/обкръжението" #: src/settings_translation_file.cpp msgid "Serverlist URL" @@ -5461,9 +5411,8 @@ msgid "Soft shadow radius" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Sound" -msgstr "Звукът е заглушен" +msgstr "Звук" #: src/settings_translation_file.cpp msgid "Sound Extensions Blacklist" @@ -5802,14 +5751,12 @@ msgid "Touchscreen" msgstr "Сензорен екран" #: src/settings_translation_file.cpp -#, fuzzy msgid "Touchscreen sensitivity" -msgstr "Чувствителност на мишката" +msgstr "Чувствителност на сензорния екран" #: src/settings_translation_file.cpp -#, fuzzy msgid "Touchscreen sensitivity multiplier." -msgstr "Множител на чувствителността на мишката." +msgstr "Множител на чувствителността на сензорния екран." #: src/settings_translation_file.cpp msgid "Tradeoffs for performance" @@ -5861,7 +5808,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "URL to the server list displayed in the Multiplayer Tab." -msgstr "" +msgstr "Адрес, съдържащ избраните сървъри, показани в раздела Игра в мрежа." #: src/settings_translation_file.cpp msgid "Undersampling" @@ -6055,9 +6002,8 @@ msgid "Volume when unfocused" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Volumetric lighting" -msgstr "Осветяване на възел" +msgstr "Обемно осветление" #: src/settings_translation_file.cpp msgid "" From 5e070a0d178441edde0951ef1cc2c5c164a751ee Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Sun, 11 Aug 2024 15:46:58 +0000 Subject: [PATCH 059/178] Translated using Weblate (Toki Pona) Currently translated at 1.4% (19 of 1335 strings) --- po/tok/luanti.po | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/po/tok/luanti.po b/po/tok/luanti.po index 5fa9991f0..ca912af50 100644 --- a/po/tok/luanti.po +++ b/po/tok/luanti.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-07-11 15:14+0200\n" -"PO-Revision-Date: 2024-06-09 15:09+0000\n" -"Last-Translator: SergioFLS \n" +"PO-Revision-Date: 2024-08-12 16:09+0000\n" +"Last-Translator: rubenwardy \n" "Language-Team: Toki Pona \n" "Language: tok\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 5.6-dev\n" +"X-Generator: Weblate 5.7-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -2134,7 +2134,7 @@ msgstr "" #: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp #: src/script/lua_api/l_mainmenu.cpp msgid "LANG_CODE" -msgstr "" +msgstr "tok" #: src/network/clientpackethandler.cpp msgid "" From 86127c3609b7a72cf42f72f67c0560f03597ef4e Mon Sep 17 00:00:00 2001 From: ninjum Date: Tue, 13 Aug 2024 21:12:11 +0000 Subject: [PATCH 060/178] Translated using Weblate (Galician) Currently translated at 100.0% (1335 of 1335 strings) --- po/gl/luanti.po | 100 ++++++++++++++++++++++++++---------------------- 1 file changed, 55 insertions(+), 45 deletions(-) diff --git a/po/gl/luanti.po b/po/gl/luanti.po index 2f28367e4..cbeaefa18 100644 --- a/po/gl/luanti.po +++ b/po/gl/luanti.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-07-11 15:14+0200\n" -"PO-Revision-Date: 2024-07-20 23:09+0000\n" +"PO-Revision-Date: 2024-08-14 04:09+0000\n" "Last-Translator: ninjum \n" "Language-Team: Galician \n" @@ -201,7 +201,7 @@ msgstr "Cargando..." #: builtin/mainmenu/content/dlg_contentdb.lua msgid "Mods" -msgstr "Mods" +msgstr "Modificacións" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "No packages could be retrieved" @@ -319,7 +319,7 @@ msgstr "$1 (Activado)" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 mods" -msgstr "$1 mods" +msgstr "$1 modificacións" #: builtin/mainmenu/content/pkgmgr.lua msgid "Failed to install $1 to $2" @@ -331,7 +331,9 @@ msgstr "Instalación: Non se puido atopar un nome de carpeta adecuado para $1" #: builtin/mainmenu/content/pkgmgr.lua msgid "Unable to find a valid mod, modpack, or game" -msgstr "Non se puido atopar un mod, paquete de mods ou xogo válido" +msgstr "" +"Non se puido atopar unha modificación, paquete de modificacións ou xogo " +"válido" #: builtin/mainmenu/content/pkgmgr.lua msgid "Unable to install a $1 as a $2" @@ -355,7 +357,7 @@ msgstr "Desactivar todo" #: builtin/mainmenu/dlg_config_world.lua msgid "Disable modpack" -msgstr "Desactivar paq. de mods" +msgstr "Desactivar paq. de modificación" #: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" @@ -363,7 +365,7 @@ msgstr "Activar todo" #: builtin/mainmenu/dlg_config_world.lua msgid "Enable modpack" -msgstr "Activar paq. de mods" +msgstr "Activar paq. de modificacións" #: builtin/mainmenu/dlg_config_world.lua msgid "" @@ -375,7 +377,7 @@ msgstr "" #: builtin/mainmenu/dlg_config_world.lua msgid "Find More Mods" -msgstr "Buscar máis mods" +msgstr "Buscar máis modificacións" #: builtin/mainmenu/dlg_config_world.lua msgid "Mod:" @@ -395,7 +397,7 @@ msgstr "Sen dependencias importantes" #: builtin/mainmenu/dlg_config_world.lua msgid "No modpack description provided." -msgstr "Non se forneceu a descripción do paquete de mods." +msgstr "Non se forneceu a descripción do paquete de modificacións." #: builtin/mainmenu/dlg_config_world.lua msgid "No optional dependencies" @@ -704,15 +706,15 @@ msgstr "Aceptar" #: builtin/mainmenu/dlg_rename_modpack.lua msgid "Rename Modpack:" -msgstr "Renomear paquete de mods:" +msgstr "Renomear paquete de modificacións:" #: builtin/mainmenu/dlg_rename_modpack.lua msgid "" "This modpack has an explicit name given in its modpack.conf which will " "override any renaming here." msgstr "" -"Este paquete de mods ten un nome explícito no seu modpack.conf que non " -"permitirá cambios de nome aquí." +"Este paquete de modificacións ten un nome explícito no seu modpack.conf que " +"non permitirá cambios de nome aquí." #: builtin/mainmenu/dlg_version_info.lua msgid "A new $1 version is available" @@ -897,7 +899,7 @@ msgstr "Mostrar nomes técnicos" #: builtin/mainmenu/settings/settingtypes.lua msgid "Client Mods" -msgstr "Mods de cliente" +msgstr "Modificacións de cliente" #: builtin/mainmenu/settings/settingtypes.lua msgid "Content: Games" @@ -905,7 +907,7 @@ msgstr "Contido: Xogos" #: builtin/mainmenu/settings/settingtypes.lua msgid "Content: Mods" -msgstr "Contido: Mods" +msgstr "Contido: modificacións" #: builtin/mainmenu/settings/shadows_component.lua msgid "(The game will need to enable shadows as well)" @@ -977,7 +979,8 @@ msgid "" "Opens the directory that contains user-provided worlds, games, mods,\n" "and texture packs in a file manager / explorer." msgstr "" -"Abre o directorio que contén mundos, xogos, mods fornecidos polo usuario\n" +"Abre o directorio que contén mundos, xogos, modificacións fornecidos polo " +"usuario\n" "e paquetes de textura nun xestor de ficheiros ou explorador." #: builtin/mainmenu/tab_about.lua @@ -1098,7 +1101,7 @@ msgstr "Porto" #: builtin/mainmenu/tab_local.lua msgid "Select Mods" -msgstr "Seleccionar mods" +msgstr "Seleccionar modificacións" #: builtin/mainmenu/tab_local.lua msgid "Select World:" @@ -1354,7 +1357,7 @@ msgstr "" "- pila táctil, rañura táctil:\n" " --> mover pila\n" "- toca e arrastra, toca co segundo dedo\n" -" --> coloca un único elemento na rañura\n" +" --> coloca un único obxecto na rañura\n" #: src/client/game.cpp #, c-format @@ -1949,7 +1952,8 @@ msgstr "%s falta:" msgid "" "Install and enable the required mods, or disable the mods causing errors." msgstr "" -"Instala e habilita os mods necesarios, ou desactiva os mods que causan erros." +"Instala e habilita as modificacións necesarias, ou desactiva as " +"modificacións que causan erros." #: src/content/mod_configuration.cpp msgid "" @@ -1957,11 +1961,11 @@ msgid "" "the mods." msgstr "" "Nota: isto pode ser causado por un ciclo de dependencia, nese caso, proba " -"actualizar os mods." +"actualizar as modificacións." #: src/content/mod_configuration.cpp msgid "Some mods have unsatisfied dependencies:" -msgstr "Algúns mods teñen dependencias non satisfeitas:" +msgstr "Algunhas modificacións teñen dependencias non satisfeitas:" #: src/gui/guiChatConsole.cpp msgid "Failed to open webpage" @@ -2488,11 +2492,11 @@ msgstr "Método de suavizado (antialiasing)" #: src/settings_translation_file.cpp msgid "Append item name" -msgstr "Añadir nome de obxeto" +msgstr "Engadir nome de obxecto" #: src/settings_translation_file.cpp msgid "Append item name to tooltip." -msgstr "Añadir nome do obxecto á descripción." +msgstr "engadir nome do obxecto á descripción." #: src/settings_translation_file.cpp msgid "Apple trees noise" @@ -2886,7 +2890,8 @@ msgid "" "Comma-separated list of mods that are allowed to access HTTP APIs, which\n" "allow them to upload and download data to/from the internet." msgstr "" -"Lista separada por comas de mods que poden acceder ás API de HTTP, que\n" +"Lista separada por comas de modificacións que poden acceder ás API de HTTP, " +"que\n" "permiten cargar e descargar datos a/desde Internet." #: src/settings_translation_file.cpp @@ -2894,9 +2899,9 @@ msgid "" "Comma-separated list of trusted mods that are allowed to access insecure\n" "functions even when mod security is on (via request_insecure_environment())." msgstr "" -"Lista separada por comas de mods de confianza que poden acceder funcións " -"inseguras\n" -"incluso cando a seguridade mod está activada (cía " +"Lista separada por comas de modificacións de confianza que poden acceder " +"funcións inseguras\n" +"incluso cando a seguridade modificacións está activada (cía " "request_insecure_environment())." #: src/settings_translation_file.cpp @@ -3329,7 +3334,7 @@ msgid "" "Enable Lua modding support on client.\n" "This support is experimental and API can change." msgstr "" -"Activar a axuda de mods de Lua no cliente.\n" +"Activar a axuda de modificacións de Lua no cliente.\n" "Isto é experimental e a API pode cambiar." #: src/settings_translation_file.cpp @@ -3386,21 +3391,23 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Enable mod channels support." -msgstr "Activar axuda para as canles de mods." +msgstr "Activar axuda para as canles de modificacións." #: src/settings_translation_file.cpp msgid "Enable mod security" -msgstr "Activar seguridade dos mods" +msgstr "Activar seguridade das modificacións" #: src/settings_translation_file.cpp msgid "Enable mouse wheel (scroll) for item selection in hotbar." msgstr "" -"Activar a roda do rato (scroll) para a selección de elementos na barra de " +"Activar a roda do rato (scroll) para a selección de obxectos na barra de " "acceso rápido." #: src/settings_translation_file.cpp msgid "Enable random mod loading (mainly used for testing)." -msgstr "Habilitar a carga aleatoria de mods (principalmente usado para probas)." +msgstr "" +"Habilitar a carga aleatoria de modificacións (principalmente usado para " +"probas)." #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." @@ -3479,7 +3486,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Enables animation of inventory items." -msgstr "Activa a animación de obxetos no inventario." +msgstr "Activa a animación de obxectos no inventario." #: src/settings_translation_file.cpp msgid "Enables caching of facedir rotated meshes." @@ -3892,11 +3899,11 @@ msgstr "Ruído do chán" #: src/settings_translation_file.cpp msgid "HTTP mods" -msgstr "Mods HTTP" +msgstr "Modificacións HTTP" #: src/settings_translation_file.cpp msgid "HUD" -msgstr "HUD" +msgstr "HUD Pantalla de Información" #: src/settings_translation_file.cpp msgid "HUD scaling" @@ -4268,7 +4275,7 @@ msgstr "Inverter rato" #: src/settings_translation_file.cpp msgid "Invert mouse wheel (scroll) direction for item selection in hotbar." msgstr "" -"Inverter a dirección da roda do rato (scroll) para a selección de elementos " +"Inverter a dirección da roda do rato (scroll) para a selección de obxectos " "na barra de acceso rápido." #: src/settings_translation_file.cpp @@ -4555,7 +4562,8 @@ msgstr "" "- Recuperación de medios se o servidor usa a configuración \"remote_media\"." "\n" "- Descarga da lista de servidores e anuncio do servidor.\n" -"- Descargas realizadas polo menú principal (por exemplo, xestor de mods).\n" +"- Descargas realizadas polo menú principal (por exemplo, xestor de " +"modificacións).\n" "Só ten efecto cando se compila con cURL." #: src/settings_translation_file.cpp @@ -4598,7 +4606,7 @@ msgid "" msgstr "" "Carga a análise do mundo para recoller datos.\n" "Ofrece un comando /profiler para acceder ao perfil compilado.\n" -"É útil para desenvolvedores de mods e operadores de servidores." +"É útil para desenvolvedores de modificacións e operadores de servidores." #: src/settings_translation_file.cpp msgid "Loading Block Modifiers" @@ -5035,7 +5043,7 @@ msgstr "Miscelánea" #: src/settings_translation_file.cpp msgid "Mod Profiler" -msgstr "Perfilador de mods" +msgstr "Perfilador de modificacións" #: src/settings_translation_file.cpp msgid "Mod Security" @@ -5343,7 +5351,8 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Prevent mods from doing insecure things like running shell commands." msgstr "" -"Evita que os mods fagan cousas perigosas como executar comandos de shell." +"Evita que as modificacións fagan cousas perigosas como executar comandos de " +"shell." #: src/settings_translation_file.cpp msgid "" @@ -5409,7 +5418,7 @@ msgstr "Entrada aleatoria" #: src/settings_translation_file.cpp msgid "Random mod load order" -msgstr "Orde de carga aleatoria de mods" +msgstr "Orde de carga aleatoria de modificacións" #: src/settings_translation_file.cpp msgid "Recent Chat Messages" @@ -5459,7 +5468,8 @@ msgstr "" "Restrinxe o acceso de algunhas funcións do cliente en servidores.\n" "Combine isto de abaixo para restrinxir recursos aos clientes ou coloque 0\n" "para que non haxa restriccións:\n" -"LOAD_CLIENT_MODS: 1 (desactiva a carga de mods no cliente)\n" +"LOAD_CLIENT_MODIFICACIÓNS: 1 (desactiva a carga de modificacións no cliente)" +"\n" "CHAT_MESSAGES: 2 (desactiva a chamada \"send_chat_message\" no cliente)\n" "READ_ITEMDEFS: 4 (desactiva a chamada \"get_item_def\" no cliente)\n" "READ_NODEDEFS: 8 (desactiva a chamada \"get_node_def\" no cliente)\n" @@ -6069,8 +6079,8 @@ msgid "" msgstr "" "Especifica a cantidade por defecto na que se agrupan os nós, obxectos e " "ferramentas.\n" -"Ten en conta que algúns xogos ou mods poden especificar unha cantidade na " -"que agrupar algúns (ou todos) os obxectos." +"Ten en conta que algúns xogos ou modificacións poden especificar unha " +"cantidade na que agrupar algúns (ou todos) os obxectos." #: src/settings_translation_file.cpp msgid "" @@ -6403,7 +6413,7 @@ msgstr "" "capacidade\n" "de procesamento ata que se intente diminuír o seu tamaño eliminando a cola " "antiga de\n" -"elementos. Un valor de 0 desactiva isto." +"obxectos. Un valor de 0 desactiva isto." #: src/settings_translation_file.cpp msgid "" @@ -6540,7 +6550,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Trusted mods" -msgstr "Mods seguros" +msgstr "Modificacións de confianza" #: src/settings_translation_file.cpp msgid "" @@ -6919,7 +6929,7 @@ msgid "" "Mods may still set a background." msgstr "" "Indica se os fondos das etiquetas de nome deberían mostrarse por defecto.\n" -"Os mods aínda poden establecer un fondo." +"As modificacións aínda poden establecer un fondo." #: src/settings_translation_file.cpp msgid "Whether node texture animations should be desynchronized per mapblock." From 6c8941c4171730b40370bde1ff939c9d3661a185 Mon Sep 17 00:00:00 2001 From: bgo-eiu Date: Wed, 14 Aug 2024 18:39:49 +0000 Subject: [PATCH 061/178] Translated using Weblate (Malay (Jawi)) Currently translated at 50.7% (677 of 1335 strings) --- po/ms_Arab/luanti.po | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/po/ms_Arab/luanti.po b/po/ms_Arab/luanti.po index 1fb480365..8a1a20a0f 100644 --- a/po/ms_Arab/luanti.po +++ b/po/ms_Arab/luanti.po @@ -3,9 +3,8 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-07-11 15:14+0200\n" -"PO-Revision-Date: 2023-11-12 13:14+0000\n" -"Last-Translator: \"Yaya - Nurul Azeera Hidayah @ Muhammad Nur Hidayat " -"Yasuyoshi\" \n" +"PO-Revision-Date: 2024-08-15 19:09+0000\n" +"Last-Translator: bgo-eiu \n" "Language-Team: Malay (Jawi) \n" "Language: ms_Arab\n" @@ -13,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 5.2-dev\n" +"X-Generator: Weblate 5.7\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -2666,7 +2665,7 @@ msgstr "بينا دالم ڤماٴين" #: src/settings_translation_file.cpp msgid "Builtin" -msgstr "" +msgstr "تربينا دالم" #: src/settings_translation_file.cpp #, fuzzy @@ -3773,7 +3772,7 @@ msgstr "ݢرافيک" #: src/settings_translation_file.cpp msgid "Gravity" -msgstr "" +msgstr "ݢراۏيتي" #: src/settings_translation_file.cpp msgid "Ground level" @@ -4243,7 +4242,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Language" -msgstr "" +msgstr "بهاس" #: src/settings_translation_file.cpp msgid "Large cave depth" @@ -4922,7 +4921,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Noises" -msgstr "" +msgstr "هيڠار" #: src/settings_translation_file.cpp msgid "Number of emerge threads" @@ -5104,7 +5103,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Profiler" -msgstr "" +msgstr "ڤمبوكه" #: src/settings_translation_file.cpp msgid "Prometheus listener address" From 286b03aac16a133d817694aa13b7a71ec974cf09 Mon Sep 17 00:00:00 2001 From: hugoalh Date: Sat, 17 Aug 2024 04:45:39 +0000 Subject: [PATCH 062/178] Translated using Weblate (Chinese (Traditional)) Currently translated at 94.9% (1267 of 1335 strings) --- po/zh_TW/luanti.po | 169 +++++++++++++++++++++------------------------ 1 file changed, 78 insertions(+), 91 deletions(-) diff --git a/po/zh_TW/luanti.po b/po/zh_TW/luanti.po index 8f9298bf5..ba033a303 100644 --- a/po/zh_TW/luanti.po +++ b/po/zh_TW/luanti.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: Chinese (Traditional) (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-07-11 15:14+0200\n" -"PO-Revision-Date: 2024-08-10 06:09+0000\n" +"PO-Revision-Date: 2024-08-20 10:09+0000\n" "Last-Translator: hugoalh \n" "Language-Team: Chinese (Traditional) \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 5.7-dev\n" +"X-Generator: Weblate 5.7\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -144,11 +144,10 @@ msgid "Failed to download $1" msgstr "無法下載 $1" #: builtin/mainmenu/content/contentdb.lua -#, fuzzy msgid "" "Failed to extract \"$1\" (insufficient disk space, unsupported file type or " "broken archive)" -msgstr "無法提取“$1”(不支援的文件類型或損壞的存檔)" +msgstr "無法提取「$1」(磁碟空間不足、不支援的檔案類型或存檔損壞)" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "" @@ -316,7 +315,7 @@ msgstr "$1(已啟用)" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 mods" -msgstr "$1 個 Mod" +msgstr "$1 個模組" #: builtin/mainmenu/content/pkgmgr.lua msgid "Failed to install $1 to $2" @@ -348,11 +347,11 @@ msgstr "(未啓用)" #: builtin/mainmenu/dlg_config_world.lua msgid "Disable all" -msgstr "全部停用" +msgstr "停用全部" #: builtin/mainmenu/dlg_config_world.lua msgid "Disable modpack" -msgstr "停用 Mod 包" +msgstr "停用模組包" #: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" @@ -360,13 +359,13 @@ msgstr "全部啟用" #: builtin/mainmenu/dlg_config_world.lua msgid "Enable modpack" -msgstr "啟用 Mod 包" +msgstr "啟用模組包" #: builtin/mainmenu/dlg_config_world.lua msgid "" "Failed to enable mod \"$1\" as it contains disallowed characters. Only " "characters [a-z0-9_] are allowed." -msgstr "無法啟用 Mod「$1」,因為其包含了不允許的字元。只能有 [a-z0-9_] 字元。" +msgstr "無法啟用模組「$1」,因為其包含了不允許的字元。僅允許使用字元 [a-z0-9_]。" #: builtin/mainmenu/dlg_config_world.lua msgid "Find More Mods" @@ -390,7 +389,7 @@ msgstr "沒有強制相依元件" #: builtin/mainmenu/dlg_config_world.lua msgid "No modpack description provided." -msgstr "未提供 Mod 包描述。" +msgstr "未提供模組包說明。" #: builtin/mainmenu/dlg_config_world.lua msgid "No optional dependencies" @@ -698,7 +697,7 @@ msgstr "重新命名 Mod 包:" msgid "" "This modpack has an explicit name given in its modpack.conf which will " "override any renaming here." -msgstr "這個 Mod 包有在其 modpack.conf 提供明確的名稱,會覆蓋此處的重新命名。" +msgstr "此模組包有在其 modpack.conf 提供明確的名稱,會覆蓋此處的任何重新命名。" #: builtin/mainmenu/dlg_version_info.lua msgid "A new $1 version is available" @@ -960,8 +959,8 @@ msgid "" "Opens the directory that contains user-provided worlds, games, mods,\n" "and texture packs in a file manager / explorer." msgstr "" -"在文件管理器/文件瀏覽器中打開包含\n" -"用戶提供的世界、遊戲、mod、材質包的目錄。" +"在檔案總管/檔案瀏覽器中開啟包含使用者提供的\n" +"世界、遊戲、模組和材質包的目錄。" #: builtin/mainmenu/tab_about.lua msgid "Previous Contributors" @@ -1108,7 +1107,7 @@ msgstr "創造模式" #. ~ PvP = Player versus Player #: builtin/mainmenu/tab_online.lua msgid "Damage / PvP" -msgstr "傷害 / PvP" +msgstr "傷害/PvP" #: builtin/mainmenu/tab_online.lua msgid "Favorites" @@ -1278,11 +1277,11 @@ msgstr "變更密碼" #: src/client/game.cpp msgid "Cinematic mode disabled" -msgstr "已停用電影模式" +msgstr "電影模式已停用" #: src/client/game.cpp msgid "Cinematic mode enabled" -msgstr "已啟用電影模式" +msgstr "電影模式已啟用" #: src/client/game.cpp msgid "Client disconnected" @@ -1309,7 +1308,6 @@ msgid "Continue" msgstr "繼續" #: src/client/game.cpp -#, fuzzy msgid "" "Controls:\n" "No menu open:\n" @@ -1324,18 +1322,18 @@ msgid "" "- touch&drag, tap 2nd finger\n" " --> place single item to slot\n" msgstr "" -"預設控制:\n" -"無可見選單:\n" -"- 輕擊一次:啟動按鈕\n" -"- 輕擊兩次:放置/使用\n" -"- 滑動手指:轉動視角\n" -"檢視選單/物品欄:\n" -"- 輕擊兩次(外面):\n" -" -->關閉\n" -"- 碰觸堆疊,碰觸槽:\n" +"控制:\n" +"沒有開啟的選單:\n" +"- 滑動手指:環顧四周\n" +"- 點擊:放置/打擊/使用(預設)\n" +"- 長按:挖掘/使用(預設)\n" +"開啟的選單/物品欄:\n" +"- 點擊兩次(外面):\n" +" --> 關閉\n" +"- 碰觸堆疊,碰觸欄位:\n" " --> 移動堆疊\n" -"- 碰觸並拖曳,以第二隻手指輕擊\n" -" --> 放置單一物品到槽中\n" +"- 碰觸並拖曳,以第二隻手指點擊\n" +" --> 放置單一物品至欄位\n" #: src/client/game.cpp #, c-format @@ -1377,27 +1375,27 @@ msgstr "離開,回到作業系統" #: src/client/game.cpp msgid "Fast mode disabled" -msgstr "已停用快速模式" +msgstr "快速模式已停用" #: src/client/game.cpp msgid "Fast mode enabled" -msgstr "已啟用快速模式" +msgstr "快速模式已啟用" #: src/client/game.cpp msgid "Fast mode enabled (note: no 'fast' privilege)" -msgstr "已啟用快速模式(註:沒有「fast」權限)" +msgstr "快速模式已啟用(註:沒有「fast」權限)" #: src/client/game.cpp msgid "Fly mode disabled" -msgstr "已停用飛行模式" +msgstr "飛行模式已停用" #: src/client/game.cpp msgid "Fly mode enabled" -msgstr "已啟用飛行模式" +msgstr "飛行模式已啟用" #: src/client/game.cpp msgid "Fly mode enabled (note: no 'fly' privilege)" -msgstr "已啟用飛行模式(註:沒有「fly」權限)" +msgstr "飛行模式已啟用(註:沒有「fly」權限)" #: src/client/game.cpp msgid "Fog disabled" @@ -1445,15 +1443,15 @@ msgstr "多人遊戲" #: src/client/game.cpp msgid "Noclip mode disabled" -msgstr "已停用穿牆模式" +msgstr "穿牆模式已停用" #: src/client/game.cpp msgid "Noclip mode enabled" -msgstr "已啟用穿牆模式" +msgstr "穿牆模式已啟用" #: src/client/game.cpp msgid "Noclip mode enabled (note: no 'noclip' privilege)" -msgstr "已啟用穿牆模式(註:沒有「noclip」權限)" +msgstr "穿牆模式已啟用(註:沒有「noclip」權限)" #: src/client/game.cpp msgid "Node definitions..." @@ -1469,11 +1467,11 @@ msgstr "開啟" #: src/client/game.cpp msgid "Pitch move mode disabled" -msgstr "已停止沿視角移動" +msgstr "俯仰移動模式已停用" #: src/client/game.cpp msgid "Pitch move mode enabled" -msgstr "已開始沿視角移動" +msgstr "俯仰移動模式已啟用" #: src/client/game.cpp msgid "Profiler graph shown" @@ -1540,7 +1538,7 @@ msgstr "已啟用無限視野" #: src/client/game.cpp msgid "Unlimited viewing range enabled, but forbidden by game or mod" -msgstr "啟用無限觀看範圍,但被遊戲或模組禁止" +msgstr "無限觀看範圍已啟用,但被遊戲或模組禁止" #: src/client/game.cpp #, c-format @@ -1588,7 +1586,7 @@ msgstr "遠近調整目前已被遊戲或模組停用" #: src/client/gameui.cpp msgid "Chat currently disabled by game or mod" -msgstr "目前聊天已被遊戲或模組停用" +msgstr "聊天目前已被遊戲或模組停用" #: src/client/gameui.cpp msgid "Chat hidden" @@ -1795,14 +1793,12 @@ msgid "OEM Clear" msgstr "OEM 清除" #: src/client/keycode.cpp -#, fuzzy msgid "Page Down" -msgstr "Page down" +msgstr "Page Down" #: src/client/keycode.cpp -#, fuzzy msgid "Page Up" -msgstr "Page up" +msgstr "Page Up" #. ~ Usually paired with the Break key #: src/client/keycode.cpp @@ -1824,9 +1820,8 @@ msgid "Return Key" msgstr "Return" #: src/client/keycode.cpp -#, fuzzy msgid "Right Arrow" -msgstr "右 Control" +msgstr "右箭頭" #: src/client/keycode.cpp msgid "Right Button" @@ -1930,17 +1925,17 @@ msgstr "%s 模组丟失:" #: src/content/mod_configuration.cpp msgid "" "Install and enable the required mods, or disable the mods causing errors." -msgstr "安裝並啟用所需的 mod,或停用導致錯誤的 mod。" +msgstr "安裝並啟用所需要的模組,或停用導致錯誤的模組。" #: src/content/mod_configuration.cpp msgid "" "Note: this may be caused by a dependency cycle, in which case try updating " "the mods." -msgstr "注意:這可能是由依賴循環引起的,在這種情況下請嘗試更新 mod。" +msgstr "注意:這可能是由依賴循環引起的,在這種情況下請嘗試更新模組。" #: src/content/mod_configuration.cpp msgid "Some mods have unsatisfied dependencies:" -msgstr "有些mod有未滿足的依賴:" +msgstr "有些模組有未被滿足的相依元件:" #: src/gui/guiChatConsole.cpp msgid "Failed to open webpage" @@ -2253,7 +2248,7 @@ msgstr "3D 模式" #: src/settings_translation_file.cpp msgid "3D mode parallax strength" -msgstr "3D模式視差強度" +msgstr "3D 模式視差強度" #: src/settings_translation_file.cpp msgid "3D noise defining giant caverns." @@ -2815,6 +2810,8 @@ msgid "" "Comma-separated list of AL and ALC extensions that should not be used.\n" "Useful for testing. See al_extensions.[h,cpp] for details." msgstr "" +"不應該使用以逗號分隔的 AL 和 ALC 擴充功能清單。\n" +"對於測試很有用。有關詳細資訊,請參閱 al_extensions.[h,cpp]。" #: src/settings_translation_file.cpp msgid "" @@ -3330,9 +3327,8 @@ msgid "Enable mouse wheel (scroll) for item selection in hotbar." msgstr "啟用滑鼠滾輪(滾動)以在熱欄中選擇項目。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Enable random mod loading (mainly used for testing)." -msgstr "啟用隨機使用者輸入(僅供測試使用)。" +msgstr "啟用隨機模組載入(主要用於測試)。" #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." @@ -3417,11 +3413,11 @@ msgstr "啟用面旋轉方向的網格快取。" #: src/settings_translation_file.cpp msgid "Enables debug and error-checking in the OpenGL driver." -msgstr "" +msgstr "啟用在 OpenGL 驅動程式中偵錯和錯誤檢查。" #: src/settings_translation_file.cpp msgid "Enables the post processing pipeline." -msgstr "" +msgstr "啟用後處理管道。" #: src/settings_translation_file.cpp msgid "" @@ -3809,17 +3805,16 @@ msgid "HUD scaling" msgstr "圖形使用者介面縮放" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Handling for deprecated Lua API calls:\n" "- none: Do not log deprecated calls\n" "- log: mimic and log backtrace of deprecated call (default).\n" "- error: abort on usage of deprecated call (suggested for mod developers)." msgstr "" -"處理已棄用的 Lua API 呼叫:\n" -"- 舊式:(嘗試)模仿舊的行為(release 模式預設值)。\n" -"- 紀錄:模仿並記錄已棄用呼叫的反向追蹤(debug 模式預設值)\n" -"- 錯誤:在使用到棄用的呼叫時中止(建議 mod 開發者使用)。" +"處理已棄用的 Lua API 調用:\n" +"- 無:不記錄已棄用的調用\n" +"- 記錄:模仿並記錄已棄用調用的回溯(預設)。\n" +"- 錯誤:中止使用已棄用的調用(建議模組開發人員使用)。" #: src/settings_translation_file.cpp msgid "" @@ -4330,15 +4325,15 @@ msgstr "" "- 不透明:停用透明度" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Length of a server tick (the interval at which everything is generally " "updated),\n" "stated in seconds.\n" "Does not apply to sessions hosted from the client menu." msgstr "" -"伺服器週期的長度和物件更新的時間間隔\n" -"網絡,以秒為單位。" +"伺服器週期的長度(通常會更新所有內容的時間間隔),\n" +"以秒為單位。\n" +"不適用於從用戶端選單託管的工作階段。" #: src/settings_translation_file.cpp msgid "Length of liquid waves." @@ -4608,9 +4603,8 @@ msgid "Mapblock mesh generation delay" msgstr "地圖區塊網格生成延遲" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapblock mesh generation threads" -msgstr "地圖區塊網格生成延遲" +msgstr "地圖區塊網格生成執行緒數" #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" @@ -4645,29 +4639,27 @@ msgstr "Mapgen flat 特別旗標" #: src/settings_translation_file.cpp msgid "Mapgen V5" -msgstr "地圖產生器 v5" +msgstr "Mapgen V5" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen V5 specific flags" -msgstr "Mapgen v5 特別旗標" +msgstr "Mapgen V5 特別旗標" #: src/settings_translation_file.cpp msgid "Mapgen V6" -msgstr "地圖產生器 v6" +msgstr "Mapgen V6" #: src/settings_translation_file.cpp msgid "Mapgen V6 specific flags" -msgstr "地圖產生器 v6 標籤" +msgstr "Mapgen V6 特別旗標" #: src/settings_translation_file.cpp msgid "Mapgen V7" -msgstr "地圖產生器 v7" +msgstr "Mapgen V7" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen V7 specific flags" -msgstr "Mapgen v7 特別旗標" +msgstr "Mapgen V7 特別旗標" #: src/settings_translation_file.cpp msgid "Mapgen Valleys" @@ -4801,9 +4793,8 @@ msgstr "" "用戶端數。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Maximum number of players that can be connected simultaneously." -msgstr "最大可同時連線的玩家數。" +msgstr "可同時連線的最大玩家數量。" #: src/settings_translation_file.cpp msgid "Maximum number of recent chat messages to show" @@ -4830,9 +4821,8 @@ msgid "Maximum simultaneous block sends per client" msgstr "每個用戶端最大同時傳送區塊數" #: src/settings_translation_file.cpp -#, fuzzy msgid "Maximum size of the outgoing chat queue" -msgstr "清除聊天佇列" +msgstr "傳出聊天佇列的最大大小" #: src/settings_translation_file.cpp msgid "" @@ -4843,11 +4833,10 @@ msgstr "" "0 禁用佇列,-1 使隊列大小不受限制。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Maximum time a file download (e.g. a mod download) may take, stated in " "milliseconds." -msgstr "檔案下載(例如下載 mod)可花費的最大時間,以毫秒計。" +msgstr "檔案下載(例如模組下載)可能需要的最長時間,以毫秒為單位。" #: src/settings_translation_file.cpp msgid "" @@ -4884,9 +4873,8 @@ msgid "Minimap scan height" msgstr "迷你地圖掃描高度" #: src/settings_translation_file.cpp -#, fuzzy msgid "Minimum dig repetition interval" -msgstr "放置重複間隔" +msgstr "最小挖掘重複間隔" #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." @@ -4930,7 +4918,6 @@ msgid "Monospace font size" msgstr "等寬字型大小" #: src/settings_translation_file.cpp -#, fuzzy msgid "Monospace font size divisible by" msgstr "等寬字型大小" @@ -5023,9 +5010,8 @@ msgid "New users need to input this password." msgstr "新使用這需要輸入這個密碼。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Node and Entity Highlighting" -msgstr "突顯方塊" +msgstr "方塊和實體突出顯示" #: src/settings_translation_file.cpp msgid "Node highlighting" @@ -5251,7 +5237,7 @@ msgstr "協定版本不符合" #: src/settings_translation_file.cpp msgid "Punch gesture" -msgstr "" +msgstr "打一拳手勢" #: src/settings_translation_file.cpp msgid "" @@ -5692,7 +5678,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Set to true to enable volumetric lighting effect (a.k.a. \"Godrays\")." -msgstr "" +msgstr "設定為 true 以啟用體積光照效果(又稱「Godrays」)。" #: src/settings_translation_file.cpp msgid "Set to true to enable waving leaves." @@ -6095,7 +6081,7 @@ msgstr "" msgid "" "The delay in milliseconds after which a touch interaction is considered a " "long tap." -msgstr "" +msgstr "觸控互動被視為長按之前的延遲(以毫秒為單位)。" #: src/settings_translation_file.cpp msgid "" @@ -6261,7 +6247,7 @@ msgstr "四之三 一同定義山丘範圍高度的 2D 雜訊。" #: src/settings_translation_file.cpp msgid "Threshold for long taps" -msgstr "" +msgstr "長按閾值" #: src/settings_translation_file.cpp msgid "" @@ -6365,12 +6351,13 @@ msgstr "" "僅當出現效能問題時才應變更此設定。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "URL to JSON file which provides information about the newest Minetest " "release\n" "If this is empty the engine will never check for updates." -msgstr "JSON 檔案的 URL,提供有關最新 Minetest 版本的信息" +msgstr "" +"JSON 檔案的網址,提供有關最新 Minetest 版本的資訊\n" +"如果這是空的,引擎將永遠不會檢查更新。" #: src/settings_translation_file.cpp msgid "URL to the server list displayed in the Multiplayer Tab." @@ -6580,7 +6567,7 @@ msgstr "音量" #: src/settings_translation_file.cpp msgid "Volume multiplier when the window is unfocused." -msgstr "" +msgstr "當視窗未聚焦時的音量倍增。" #: src/settings_translation_file.cpp msgid "" From c3e8036bb95febf4ce737cbfeed2627be6e147e6 Mon Sep 17 00:00:00 2001 From: gallegonovato Date: Sun, 18 Aug 2024 17:57:32 +0000 Subject: [PATCH 063/178] Translated using Weblate (Spanish) Currently translated at 91.9% (1228 of 1335 strings) --- po/es/luanti.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/po/es/luanti.po b/po/es/luanti.po index 45b0a46a2..d0a25afbb 100644 --- a/po/es/luanti.po +++ b/po/es/luanti.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: Spanish (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-07-11 15:14+0200\n" -"PO-Revision-Date: 2024-07-14 21:23+0000\n" +"PO-Revision-Date: 2024-08-19 07:09+0000\n" "Last-Translator: gallegonovato \n" "Language-Team: Spanish \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.7-dev\n" +"X-Generator: Weblate 5.7\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -2144,7 +2144,7 @@ msgstr "pulsa una tecla" #: src/gui/guiOpenURL.cpp msgid "Open" -msgstr "" +msgstr "Abrir" #: src/gui/guiOpenURL.cpp msgid "Open URL?" From 458ac94fc475df3eabf8e129c7b1f2ad7d791aaa Mon Sep 17 00:00:00 2001 From: nauta-turbidus Date: Wed, 4 Sep 2024 21:31:27 +0000 Subject: [PATCH 064/178] Translated using Weblate (Polish) Currently translated at 93.4% (1248 of 1335 strings) --- po/pl/luanti.po | 61 ++++++++++++++++++++++++++++--------------------- 1 file changed, 35 insertions(+), 26 deletions(-) diff --git a/po/pl/luanti.po b/po/pl/luanti.po index 8ad317f2a..0d4d7e7e5 100644 --- a/po/pl/luanti.po +++ b/po/pl/luanti.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: Polish (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-07-11 15:14+0200\n" -"PO-Revision-Date: 2024-08-11 15:14+0000\n" +"PO-Revision-Date: 2024-09-05 22:09+0000\n" "Last-Translator: nauta-turbidus \n" "Language-Team: Polish \n" @@ -13,7 +13,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2);\n" -"X-Generator: Weblate 5.7-dev\n" +"X-Generator: Weblate 5.8-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -5342,9 +5342,8 @@ msgid "Profiler" msgstr "Profiler" #: src/settings_translation_file.cpp -#, fuzzy msgid "Prometheus listener address" -msgstr "Adres nasłuchiwacza Prometheusa" +msgstr "Adres listenera Prometheusa" #: src/settings_translation_file.cpp msgid "" @@ -5396,14 +5395,12 @@ msgid "Recent Chat Messages" msgstr "Najnowsze wiadomości czatu" #: src/settings_translation_file.cpp -#, fuzzy msgid "Regular font path" -msgstr "Ścieżka raportu" +msgstr "Ścieżka zwykłej czcionki" #: src/settings_translation_file.cpp -#, fuzzy msgid "Remember screen size" -msgstr "Automatyczny zapis rozmiaru okienka" +msgstr "Pamiętaj rozmiar ekranu" #: src/settings_translation_file.cpp msgid "Remote media" @@ -5426,7 +5423,6 @@ msgid "Report path" msgstr "Ścieżka raportu" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Restricts the access of certain client-side functions on servers.\n" "Combine the byteflags below to restrict client-side features, or set to 0\n" @@ -5443,8 +5439,8 @@ msgstr "" "Połącz poniższe flagi bajtów, aby ograniczyć funkcje po stronie klienta, lub " "ustaw na 0\n" "bez ograniczeń:\n" -"LOAD_CLIENT_MODS: 1 (wyłączenie ładowania modów dostarczonych przez " -"klienta)\n" +"LOAD_CLIENT_MODS: 1 (wyłączenie ładowania modów dostarczonych przez klienta)" +"\n" "CHAT_MESSAGES: 2 (wyłączenie wywoływania send_chat_message po stronie " "klienta)\n" "READ_ITEMDEFS: 4 (wyłączenie wywoływania get_item_def po stronie klienta)\n" @@ -5455,9 +5451,8 @@ msgstr "" "READ_PLAYERINFO: 32 (wyłącza wywoływanie get_player_names po stronie klienta)" #: src/settings_translation_file.cpp -#, fuzzy msgid "Ridge mountain spread noise" -msgstr "Szum podwodnej grani" +msgstr "Szum rozrzutu grani gór" #: src/settings_translation_file.cpp msgid "Ridge noise" @@ -5468,39 +5463,32 @@ msgid "Ridge underwater noise" msgstr "Szum podwodnej grani" #: src/settings_translation_file.cpp -#, fuzzy msgid "Ridged mountain size noise" -msgstr "Szum podwodnej grani" +msgstr "Szum rozmiaru grani gór" #: src/settings_translation_file.cpp -#, fuzzy msgid "River channel depth" -msgstr "Głębokość rzeki" +msgstr "Głębokość kanału rzecznego" #: src/settings_translation_file.cpp -#, fuzzy msgid "River channel width" -msgstr "Głębokość rzeki" +msgstr "Szerokość kanału rzecznego" #: src/settings_translation_file.cpp -#, fuzzy msgid "River depth" msgstr "Głębokość rzeki" #: src/settings_translation_file.cpp -#, fuzzy msgid "River noise" -msgstr "Szum rzeki" +msgstr "Szum rzek" #: src/settings_translation_file.cpp -#, fuzzy msgid "River size" msgstr "Rozmiar rzeki" #: src/settings_translation_file.cpp -#, fuzzy msgid "River valley width" -msgstr "Głębokość rzeki" +msgstr "Szerokość doliny rzeki" #: src/settings_translation_file.cpp msgid "Rollback recording" @@ -5511,7 +5499,6 @@ msgid "Rolling hill size noise" msgstr "Szum rozmiaru zaokrąglonych gór" #: src/settings_translation_file.cpp -#, fuzzy msgid "Rolling hills spread noise" msgstr "Szum rozrzutu zaokrąglonych gór" @@ -5536,6 +5523,10 @@ msgid "" "is maximized is stored in window_maximized.\n" "(Autosaving window_maximized only works if compiled with SDL.)" msgstr "" +"Zapisuj rozmiar okna automatycznie po zmodyfikowaniu.\n" +"Jeśli włączone, rozmiar na ekranie jest zapisywany w screen_w i screen_h,\n" +"a to, czy okno jest zmaksymalizowane jest zapisywane w window_maximized.\n" +"(Autozapis window_maximized działa tylko przy skompilowaniu z SDL.)" #: src/settings_translation_file.cpp msgid "Saving map received from server" @@ -5632,6 +5623,24 @@ msgid "" "Renders higher-resolution image of the scene, then scales down to reduce\n" "the aliasing effects. This is the slowest and the most accurate method." msgstr "" +"Wybierz metodę antyaliasingu do zastosowania.\n" +"\n" +"* Brak - bez antyaliasingu (domyślnie)\n" +"\n" +"* FSAA - Sprzętowy pełnoekranowy antyaliasing\n" +"(niekompatybilny z Post Processing i Undersampling)\n" +"A.K.A multi-sample antialiasing (MSAA)\n" +"Wygładza krawędzie bloków, ale nie wpływa na wnętrze tekstur.\n" +"Restart jest wymagany do zmiany tej opcji.\n" +"\n" +"* FXAA - Szybki przybliżony antyaliasing (wymaga shaderów)\n" +"Stosuje filtr post-processingu by wykryć i wygładzić wysoko-kontrastowe " +"krawędzie.\n" +"Daje balans pomiędzy szybkością a jakością obrazu.\n" +"\n" +"* SSAA - Super-sampling antialiasing (wymaga shaderów)\n" +"Renderuje obraz w wyższej rozdzielczości, a potem zmniejsza ją by uniknąć\n" +"efektów aliasingu. To jest najpowolniejsza i najdokładniejsza metoda." #: src/settings_translation_file.cpp msgid "Selection box border color (R,G,B)." From 72a2cd2aab04e2014f182f3125f708cf9bd17e6e Mon Sep 17 00:00:00 2001 From: Davi Lopes Date: Sat, 7 Sep 2024 11:40:45 +0000 Subject: [PATCH 065/178] Translated using Weblate (Portuguese) Currently translated at 89.5% (1195 of 1335 strings) --- po/pt/luanti.po | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/po/pt/luanti.po b/po/pt/luanti.po index 287b89825..611c29350 100644 --- a/po/pt/luanti.po +++ b/po/pt/luanti.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Portuguese (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-07-11 15:14+0200\n" -"PO-Revision-Date: 2024-01-30 16:01+0000\n" -"Last-Translator: Alexsandro Vítor \n" +"PO-Revision-Date: 2024-09-08 12:09+0000\n" +"Last-Translator: Davi Lopes \n" "Language-Team: Portuguese \n" "Language: pt\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 5.4-dev\n" +"X-Generator: Weblate 5.8-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -184,7 +184,7 @@ msgstr "A descarregar..." #: builtin/mainmenu/content/dlg_contentdb.lua msgid "Error getting dependencies for package" -msgstr "" +msgstr "Erro ao obter as dependências do pacote" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "Games" @@ -464,7 +464,7 @@ msgstr "Decorações" #: builtin/mainmenu/dlg_create_world.lua msgid "Desert temples" -msgstr "" +msgstr "Templos do deserto" #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." @@ -1080,6 +1080,8 @@ msgid "" "Minetest is a game-creation platform that allows you to play many different " "games." msgstr "" +"O Minetest é um plataforma de criação de jogos que permite você jogar muitos " +"jogos diferentes." #: builtin/mainmenu/tab_local.lua msgid "New" @@ -1674,7 +1676,7 @@ msgstr "Eliminar" #: src/client/keycode.cpp msgid "Down Arrow" -msgstr "" +msgstr "Seta para baixo" #: src/client/keycode.cpp msgid "End" @@ -6985,7 +6987,7 @@ msgstr "Largura das linhas do bloco de seleção em torno de nodes." #: src/settings_translation_file.cpp msgid "Window maximized" -msgstr "" +msgstr "Janela maximizada" #: src/settings_translation_file.cpp msgid "" From 1d251e0f139ff91ff12323958aa5ab04d9bf3bfa Mon Sep 17 00:00:00 2001 From: Davi Lopes Date: Sat, 7 Sep 2024 11:45:13 +0000 Subject: [PATCH 066/178] Translated using Weblate (Portuguese (Brazil)) Currently translated at 87.4% (1168 of 1335 strings) --- po/pt_BR/luanti.po | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/po/pt_BR/luanti.po b/po/pt_BR/luanti.po index 5e8c4974c..9d109a771 100644 --- a/po/pt_BR/luanti.po +++ b/po/pt_BR/luanti.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Portuguese (Brazil) (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-07-11 15:14+0200\n" -"PO-Revision-Date: 2023-10-16 04:19+0000\n" -"Last-Translator: Jorge Batista Ramos Junior \n" +"PO-Revision-Date: 2024-09-08 12:09+0000\n" +"Last-Translator: Davi Lopes \n" "Language-Team: Portuguese (Brazil) \n" "Language: pt_BR\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 5.1-dev\n" +"X-Generator: Weblate 5.8-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -186,7 +186,7 @@ msgstr "Baixando..." #: builtin/mainmenu/content/dlg_contentdb.lua msgid "Error getting dependencies for package" -msgstr "" +msgstr "Erro ao obter dependências do pacote" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "Games" From 7e9c4a9baaf42238abfa2f5613018a04130c0cb9 Mon Sep 17 00:00:00 2001 From: Ari Date: Fri, 13 Sep 2024 14:26:37 +0000 Subject: [PATCH 067/178] Translated using Weblate (Spanish) Currently translated at 93.1% (1244 of 1335 strings) --- po/es/luanti.po | 35 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/po/es/luanti.po b/po/es/luanti.po index d0a25afbb..d6b47cf14 100644 --- a/po/es/luanti.po +++ b/po/es/luanti.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Spanish (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-07-11 15:14+0200\n" -"PO-Revision-Date: 2024-08-19 07:09+0000\n" -"Last-Translator: gallegonovato \n" +"PO-Revision-Date: 2024-09-13 14:54+0000\n" +"Last-Translator: Ari \n" "Language-Team: Spanish \n" "Language: es\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.7\n" +"X-Generator: Weblate 5.8-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -1435,9 +1435,8 @@ msgid "Fog enabled" msgstr "Niebla activada" #: src/client/game.cpp -#, fuzzy msgid "Fog enabled by game or mod" -msgstr "El zoom está actualmente desactivado por el juego o un mod" +msgstr "Niebla activada por el juego o una modificación" #: src/client/game.cpp msgid "Game info:" @@ -1918,9 +1917,8 @@ msgid "X Button 2" msgstr "X Botón 2" #: src/client/keycode.cpp -#, fuzzy msgid "Zoom Key" -msgstr "Zoom" +msgstr "Tecla Zum" #: src/client/minimap.cpp msgid "Minimap hidden" @@ -2151,9 +2149,8 @@ msgid "Open URL?" msgstr "Abrir URL?" #: src/gui/guiOpenURL.cpp -#, fuzzy msgid "Unable to open URL" -msgstr "Fallo al abrir la página web" +msgstr "No se ha podido abrir el enlace" #: src/gui/guiPasswordChange.cpp msgid "Change" @@ -2643,9 +2640,8 @@ msgid "Bind address" msgstr "Dirección BIND" #: src/settings_translation_file.cpp -#, fuzzy msgid "Biome API" -msgstr "Biomas" +msgstr "API de Biomas" #: src/settings_translation_file.cpp msgid "Biome noise" @@ -2858,9 +2854,8 @@ msgid "Clouds" msgstr "Nubes" #: src/settings_translation_file.cpp -#, fuzzy msgid "Clouds are a client-side effect." -msgstr "Las nubes son un efecto del lado del cliente." +msgstr "Las nubes son un efecto local." #: src/settings_translation_file.cpp msgid "Clouds in menu" @@ -3104,7 +3099,6 @@ msgstr "" "pero tambien utiliza más recursos." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Define the oldest clients allowed to connect.\n" "Older clients are compatible in the sense that they will not crash when " @@ -3116,10 +3110,15 @@ msgid "" "Minetest still enforces its own internal minimum, and enabling\n" "strict_protocol_version_checking will effectively override this." msgstr "" -"Habilitar para no permitir que clientes antíguos se conecten.\n" -"Los clientes antíguos son compatibles al punto de conectarse a nueos " -"servidores,\n" -"pero pueden no soportar nuevas características." +"Definir los clientes más antiguos con permiso para conectarse.\n" +"Los clientes más antiguos no se colgarán al intento de conectarse\n" +"a nuevos servidores, pero no soportarán todas las nuevas características que " +"espera.\n" +"Esto permite un control mucho más ajustado que " +"strict_protocol_version_checking.\n" +"Aún así, Minetest sigue forzando su minimo interno, y activar\n" +"strict_protocol_version_checking ignorará efectivamente todos los parámetros " +"que haya definido." #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." From a7249ba65319465c405fdc9d7ed90f551795be3b Mon Sep 17 00:00:00 2001 From: gallegonovato Date: Fri, 13 Sep 2024 14:49:23 +0000 Subject: [PATCH 068/178] Translated using Weblate (Spanish) Currently translated at 93.1% (1244 of 1335 strings) --- po/es/luanti.po | 335 ++++++++++++++++++++++++++++-------------------- 1 file changed, 199 insertions(+), 136 deletions(-) diff --git a/po/es/luanti.po b/po/es/luanti.po index d6b47cf14..9a8f67a50 100644 --- a/po/es/luanti.po +++ b/po/es/luanti.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Spanish (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-07-11 15:14+0200\n" -"PO-Revision-Date: 2024-09-13 14:54+0000\n" -"Last-Translator: Ari \n" +"PO-Revision-Date: 2024-09-15 16:09+0000\n" +"Last-Translator: gallegonovato \n" "Language-Team: Spanish \n" "Language: es\n" @@ -1336,7 +1336,6 @@ msgid "Continue" msgstr "Continuar" #: src/client/game.cpp -#, fuzzy msgid "" "Controls:\n" "No menu open:\n" @@ -1352,17 +1351,17 @@ msgid "" " --> place single item to slot\n" msgstr "" "Controles:\n" -"Sin el menú abierto:\n" -"- deslizar el dedo: mirar a su alrededor\n" -"- toque: colocar/usar\n" -"- toque largo: excavar/golpear/usar\n" +"No hay menú abierto:\n" +"- deslizar dedo: mirar alrededor\n" +"- toque: colocar/golpear/usar (por defecto)\n" +"- toque largo: cavar/usar (por defecto)\n" "Menú/inventario abierto:\n" -"- doble toque (afuera):\n" +"- doble toque (exterior):\n" " --> cerrar\n" -"- pila táctil, ranura táctil:\n" +"- tocar pila, tocar ranura\n" " --> mover pila\n" -"- tocar y arrastrar, tocar el segundo dedo\n" -" -> colocar un solo elemento en la ranura\n" +"- tocar y arrastrar, tocar 2º dedo\n" +" --> colocar un objeto en la ranura\n" #: src/client/game.cpp #, c-format @@ -1436,7 +1435,7 @@ msgstr "Niebla activada" #: src/client/game.cpp msgid "Fog enabled by game or mod" -msgstr "Niebla activada por el juego o una modificación" +msgstr "Niebla activada por juego o mod" #: src/client/game.cpp msgid "Game info:" @@ -1918,7 +1917,7 @@ msgstr "X Botón 2" #: src/client/keycode.cpp msgid "Zoom Key" -msgstr "Tecla Zum" +msgstr "Tecla zum" #: src/client/minimap.cpp msgid "Minimap hidden" @@ -2524,6 +2523,16 @@ msgid "" "With OpenGL ES, dithering only works if the shader supports high\n" "floating-point precision and it may have a higher performance impact." msgstr "" +"Aplique dithering para reducir los artefactos de bandas de color.\n" +"El difuminado aumenta significativamente el tamaño de las capturas de " +"pantalla\n" +"comprimidas sin pérdida y funciona incorrectamente si la pantalla o el " +"sistema operativo\n" +"o si los canales de color no están cuantizados a 8 bits.\n" +"a 8 bits.\n" +"Con OpenGL ES, el difuminado sólo funciona si el sombreador admite una alta " +"precisión de punto flotante y puede que no funcione correctamente.\n" +"y puede tener un mayor impacto en el rendimiento." #: src/settings_translation_file.cpp msgid "Arm inertia" @@ -2542,7 +2551,6 @@ msgid "Ask to reconnect after crash" msgstr "Preguntar para reconectar tras una caída" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "At this distance the server will aggressively optimize which blocks are sent " "to\n" @@ -2554,19 +2562,18 @@ msgid "" "optimization.\n" "Stated in MapBlocks (16 nodes)." msgstr "" -"A esta distancia el servidor optimizará agresivamente qué bloques son " -"enviados a\n" -"los clientes.\n" -"Los valores bajos mejorarán mucho el rendimiento, a costa de \n" -"errores gráficos visibles (algunos bloques no serán renderizados bajo el " -"agua y en cuevas,\n" -"así como ocasionalmente en tierra).\n" -"Definir esto a un valor mayor que max_block_send_distance deshabilita esta\n" +"A esta distancia, o servidor optimizará de forma agresiva que bloques se " +"envían\n" +"a los clientes.\n" +"Los valores pequeños pueden mejorar enormemente el rendimiento, a costa de " +"fallos visibles\n" +"en el renderizado (es posible que algunos bloques no se rendericen " +"correctamente en las cuevas).\n" +"Establecer esto en un valor mayor que max_block_send_distance lo desactiva\n" "optimización.\n" -"Fijado en bloques de mapa (16 nodos)." +"Indicado en MapBlocks (16 nodos)." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "At this distance the server will perform a simpler and cheaper occlusion " "check.\n" @@ -2576,16 +2583,13 @@ msgid "" "This is especially useful for very large viewing range (upwards of 500).\n" "Stated in MapBlocks (16 nodes)." msgstr "" -"A esta distancia el servidor optimizará agresivamente qué bloques son " -"enviados a\n" -"los clientes.\n" -"Los valores bajos mejorarán mucho el rendimiento, a costa de \n" -"errores gráficos visibles (algunos bloques no serán renderizados bajo el " -"agua y en cuevas,\n" -"así como ocasionalmente en tierra).\n" -"Definir esto a un valor mayor que max_block_send_distance deshabilita esta\n" -"optimización.\n" -"Fijado en bloques de mapa (16 nodos)." +"A esta distancia el servidor realizará una comprobación de oclusión más " +"sencilla y económica.\n" +"Valores más pequeños pueden mejorar el rendimiento, a costa de fallos\n" +"renderización visibles temporalmente (bloques que faltan).\n" +"Esto es especialmente útil para un rango de visualización muy grande (más de " +"500).\n" +"Expresado en MapBlocks (16 nodos)." #: src/settings_translation_file.cpp msgid "Audio" @@ -2641,16 +2645,15 @@ msgstr "Dirección BIND" #: src/settings_translation_file.cpp msgid "Biome API" -msgstr "API de Biomas" +msgstr "API de los biomas" #: src/settings_translation_file.cpp msgid "Biome noise" -msgstr "Ruido de bioma" +msgstr "Ruido del bioma" #: src/settings_translation_file.cpp -#, fuzzy msgid "Block cull optimize distance" -msgstr "Optimizar la distancia del envío de bloques" +msgstr "Optimización de la distancia de eliminación de bloques" #: src/settings_translation_file.cpp msgid "Block send optimize distance" @@ -2837,9 +2840,8 @@ msgid "Client-side Modding" msgstr "Mods del lado del cliente" #: src/settings_translation_file.cpp -#, fuzzy msgid "Client-side node lookup range restriction" -msgstr "Restricción del rango de búsqueda del nodo del lado cliente" +msgstr "Restricción del rango de búsqueda de nodos en el cliente" #: src/settings_translation_file.cpp msgid "Climbing speed" @@ -2874,6 +2876,9 @@ msgid "" "Comma-separated list of AL and ALC extensions that should not be used.\n" "Useful for testing. See al_extensions.[h,cpp] for details." msgstr "" +"Lista separada por comas de las extensiones AL y ALC que no deben utilizarse." +"\n" +"Útil para pruebas. Ver al_extensions.[h,cpp] para más detalles." #: src/settings_translation_file.cpp msgid "" @@ -3183,15 +3188,14 @@ msgstr "" "límite)." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Defines the size of the sampling grid for FSAA and SSAA antialiasing " "methods.\n" "Value of 2 means taking 2x2 = 4 samples." msgstr "" -"Define el tamaño de la cuadrícula a mostrar para los métodos antialización " +"Define el tamaño de la rejilla de muestreo para los métodos de antialiasing " "FSAA y SSAA.\n" -"El valor de 2 significa tomar 2x2 = 4 muestras." +"Un valor de 2 significa tomar 2x2 = 4 muestras." #: src/settings_translation_file.cpp msgid "Defines the width of the river channel." @@ -3331,9 +3335,8 @@ msgid "Enable Bloom Debug" msgstr "Habilitar Debug del Destello de Lente" #: src/settings_translation_file.cpp -#, fuzzy msgid "Enable Debanding" -msgstr "Permitir daños" +msgstr "Habilitar tramado" #: src/settings_translation_file.cpp msgid "" @@ -3362,9 +3365,8 @@ msgstr "" "suaves. De otro modo utiliza filtrado PCF." #: src/settings_translation_file.cpp -#, fuzzy msgid "Enable Post Processing" -msgstr "Posprocesamiento" +msgstr "Habilitar posprocesamiento" #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" @@ -3418,9 +3420,9 @@ msgstr "" "hotbar." #: src/settings_translation_file.cpp -#, fuzzy msgid "Enable random mod loading (mainly used for testing)." -msgstr "Habilitar entrada aleatoria (solo usar para pruebas)." +msgstr "" +"Activar la carga aleatoria de mods (se utiliza principalmente para pruebas)." #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." @@ -3452,9 +3454,8 @@ msgstr "" "pero pueden no soportar nuevas características." #: src/settings_translation_file.cpp -#, fuzzy msgid "Enable touchscreen" -msgstr "Pantalla táctil" +msgstr "Activar la pantalla táctil" #: src/settings_translation_file.cpp msgid "" @@ -3513,7 +3514,7 @@ msgstr "Activa depuración y comprobación de errores en el driver OpenGL." #: src/settings_translation_file.cpp msgid "Enables the post processing pipeline." -msgstr "" +msgstr "Activa el proceso de postprocesado." #: src/settings_translation_file.cpp msgid "" @@ -3532,9 +3533,8 @@ msgstr "" "juego." #: src/settings_translation_file.cpp -#, fuzzy msgid "Engine Profiler" -msgstr "Perfilador del motor" +msgstr "Análisis del rendimiento del motor" #: src/settings_translation_file.cpp msgid "Engine profiling data print interval" @@ -4155,19 +4155,19 @@ msgstr "" "la suya por una contraseña vacía." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "If enabled, the server will perform map block occlusion culling based on\n" "on the eye position of the player. This can reduce the number of blocks\n" "sent to the client by 50-80%. Clients will no longer receive most\n" "invisible blocks, so that the utility of noclip mode is reduced." msgstr "" -"Si está habilitado, el servidor realizará la selección de la oclusión del " -"bloque del mapa basado\n" -"en la posición del ojo del jugador. Esto puede reducir el número de bloques\n" -"enviados al cliente en un 50-80%. El cliente ya no recibirá lo mas " -"invisible\n" -"por lo que la utilidad del modo \"NoClip\" se reduce." +"Si se activa, el servidor realizará el culling de oclusión de bloque de mapa " +"basándose\n" +"en la posición de los ojos del jugador. Esto puede reducir el número de " +"bloques\n" +"enviados al cliente en un 50-80%. Los clientes ya no recibirán la mayoría " +"de\n" +"bloques invisibles, por lo que se reduce la utilidad del modo noclip." #: src/settings_translation_file.cpp msgid "" @@ -4717,7 +4717,6 @@ msgid "Map generation attributes specific to Mapgen v5." msgstr "Atributos de generación de mapas específicos al generador de mapas v5." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Map generation attributes specific to Mapgen v6.\n" "The 'snowbiomes' flag enables the new 5 biome system.\n" @@ -4726,11 +4725,13 @@ msgid "" "The 'temples' flag disables generation of desert temples. Normal dungeons " "will appear instead." msgstr "" -"Atributos específicos para la generación de Mapgen v6.\n" -"La opción 'snowbiomes' activa el nuevo sistema de generación de 5 biomas.\n" -"Cuando la opción 'snowbiomes' está activada, las junglas se activan " +"Atributos de generación de mapas específicos de Mapgen v6.\n" +"La bandera 'snowbiomes' habilita el nuevo sistema de 5 biomas.\n" +"Cuando la bandera 'snowbiomes' está activada las junglas se activan " "automáticamente y\n" -"la opción 'jungles' es ignorada." +"la bandera 'junglas' se ignora.\n" +"La bandera \"templos\" desactiva la generación de templos del desierto. En " +"su lugar aparecerán mazmorras normales." #: src/settings_translation_file.cpp msgid "" @@ -4986,18 +4987,16 @@ msgid "Maximum simultaneous block sends per client" msgstr "Envíos de bloque simultáneos máximos por cliente" #: src/settings_translation_file.cpp -#, fuzzy msgid "Maximum size of the outgoing chat queue" -msgstr "Tamaño máximo de la cola de salida del chat" +msgstr "Tamaño máximo de cola de chat saliente" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Maximum size of the outgoing chat queue.\n" "0 to disable queueing and -1 to make the queue size unlimited." msgstr "" -"Tamaño máximo de la cola del chat externo.\n" -"0 para desactivar el añadido a la cola y -1 para hacer el tamaño de la cola " +"Tamaño máximo de la cola del chat\n" +"0 para desactivar la cola y -1 para hacer que el tamaño de la cola sea " "ilimitado." #: src/settings_translation_file.cpp @@ -5119,9 +5118,8 @@ msgid "Mouse sensitivity multiplier." msgstr "Multiplicador de sensiblidad del ratón." #: src/settings_translation_file.cpp -#, fuzzy msgid "Movement threshold" -msgstr "Límite de caverna" +msgstr "Umbral de movimiento" #: src/settings_translation_file.cpp msgid "Mud noise" @@ -5243,9 +5241,8 @@ msgstr "" "consumo de memoria (4096=100MB, como regla general)." #: src/settings_translation_file.cpp -#, fuzzy msgid "Number of messages a player may send per 10 seconds." -msgstr "Cantidad de mensajes que un jugador puede enviar en 10 segundos." +msgstr "Número de mensajes que un jugador puede enviar cada 10 segundos." #: src/settings_translation_file.cpp msgid "" @@ -5283,9 +5280,8 @@ msgstr "" "abierto." #: src/settings_translation_file.cpp -#, fuzzy msgid "OpenGL debug" -msgstr "Depuración del generador de mapas" +msgstr "Depuración OpenGL" #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." @@ -5669,7 +5665,6 @@ msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous" msgstr "Ver https://www.sqlite.org/pragma.html#pragma_synchronous" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Select the antialiasing method to apply.\n" "\n" @@ -5690,26 +5685,26 @@ msgid "" "Renders higher-resolution image of the scene, then scales down to reduce\n" "the aliasing effects. This is the slowest and the most accurate method." msgstr "" -"Seleccione el método de suavizado a aplicar.\n" +"Seleccione el método de antialiasing a aplicar.\n" "\n" -"* Ninguno: sin suavizado (predeterminado)\n" +"* Ninguno - Sin antialiasing (por defecto)\n" +"\n" +"* FSAA - Antialiasing de pantalla completa por hardware\n" +"(incompatible con Postprocesado y Submuestreo)\n" +"También conocido como antialiasing multimuestra (MSAA)\n" +"Suaviza los bordes de los bloques pero no afecta al interior de las texturas." "\n" -"* FSAA: asuavizado de pantalla completa proporcionado por hardware " -"(incompatible con shaders)\n" -"También conocido como suavizado multimuestra (SMM)\n" -"Suaviza los bordes de los bloques pero no afecta el interior de las " -"texturas.\n" "Es necesario reiniciar para cambiar esta opción.\n" "\n" -"* FXAA: suavizado aproximado rápido (requiere shaders)\n" -"Aplica un filtro de posprocesamiento para detectar y suavizar bordes de alto " -"contraste.\n" -"Proporciona equilibrio entre velocidad y calidad de imagen.\n" +"* FXAA - Antialiasing rápido aproximado (requiere shaders)\n" +"Aplica un filtro de postprocesado para detectar y suavizar los bordes de " +"alto contraste.\n" +"Proporciona un equilibrio entre velocidad y calidad de imagen.\n" "\n" -"* SSAA: suavizado de supermuestreo (requiere shaders)\n" -"Representa una imagen de mayor resolución de la escena y luego la reduce " -"para reducirla.\n" -"los efectos de suavizado. Este es el método más lento y preciso." +"* SSAA - Antialiasing de supermuestreo (requiere shaders)\n" +"Renderiza una imagen de mayor resolución de la escena y, a continuación, " +"reduce la escala para reducir los efectos de aliasing.\n" +"los efectos del aliasing. Es el método más lento y preciso." #: src/settings_translation_file.cpp msgid "Selection box border color (R,G,B)." @@ -5798,9 +5793,8 @@ msgid "Server port" msgstr "Puerto del servidor" #: src/settings_translation_file.cpp -#, fuzzy msgid "Server-side occlusion culling" -msgstr "Sacrificio de oclusión del lado del servidor" +msgstr "Eliminación de oclusiones en el servidor" #: src/settings_translation_file.cpp msgid "Server/Env Performance" @@ -5841,13 +5835,12 @@ msgstr "" "Rango: de -1 a 1.0" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" -"Seleccionar el idioma. Dejar vacío para usar el idioma del sistema.\n" -"Se requiere reiniciar para cambiar esto." +"Establezca el idioma. Por defecto, se utiliza el idioma del sistema.\n" +"Se requiere un reinicio después de cambiar esto." #: src/settings_translation_file.cpp msgid "" @@ -5893,6 +5886,8 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Set to true to enable volumetric lighting effect (a.k.a. \"Godrays\")." msgstr "" +"Establézcalo a true para activar el efecto de iluminación volumétrica (" +"también conocido como \"Godrays\")." #: src/settings_translation_file.cpp msgid "Set to true to enable waving leaves." @@ -6072,20 +6067,20 @@ msgid "Smooth lighting" msgstr "Iluminación suave" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Smooths rotation of camera when in cinematic mode, 0 to disable. Enter " "cinematic mode by using the key set in Controls." msgstr "" -"Suaviza la rotación de la cámara en modo cinematográfico. 0 para desactivar." +"Suaviza la rotación de la cámara en modo cinemático, 0 para desactivar. " +"Entra en modo cinemático usando la tecla establecida en Controles." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Smooths rotation of camera, also called look or mouse smoothing. 0 to " "disable." msgstr "" -"Suaviza la rotación de la cámara en modo cinematográfico. 0 para desactivar." +"Suaviza la rotación de la cámara, también llamado suavizado de la mirada o " +"del ratón. 0 para desactivar." #: src/settings_translation_file.cpp msgid "Sneaking speed" @@ -6104,9 +6099,8 @@ msgid "Sound" msgstr "Sonido" #: src/settings_translation_file.cpp -#, fuzzy msgid "Sound Extensions Blacklist" -msgstr "Lista negra de Contenido de la Base de Datos" +msgstr "Lista negra de extensiones de sonido" #: src/settings_translation_file.cpp msgid "" @@ -6115,31 +6109,35 @@ msgid "" "(obviously, remote_media should end with a slash).\n" "Files that are not present will be fetched the usual way." msgstr "" +"Especifica la URL desde la que el cliente obtiene los medios en lugar de " +"utilizar UDP.\n" +"$filename debe ser accesible desde $remote_media$filename a través de cURL\n" +"(obviamente, remote_media debe terminar con una barra).\n" +"Los archivos que no estén presentes se obtendrán de la forma habitual." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Specifies the default stack size of nodes, items and tools.\n" "Note that mods or games may explicitly set a stack for certain (or all) " "items." msgstr "" -"Especifica el tamaño por defecto de los stacks (Montónes) de nodos, items y " -"bloques.\n" -"Cabe aclarar que los mods o juegos pueden establecer un stack para algunos " -"items (o todos)." +"Especifica el tamaño de pila por defecto de nodos, objetos y herramientas.\n" +"Ten en cuenta que los mods o los juegos pueden establecer explícitamente una " +"pila para ciertos elementos (o para todos)." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Spread a complete update of shadow map over given number of frames.\n" "Higher values might make shadows laggy, lower values\n" "will consume more resources.\n" "Minimum value: 1; maximum value: 16" msgstr "" -"Establecer el tamaño del radio de las sombras suaves.\n" -"Los valores más bajos significan sombras más nítidas, los valores más altos " -"significan sombras más suaves.\n" -"Valor mínimo: 1.0; valor máximo: 15.0" +"Reparte una actualización completa del mapa de sombras en un número " +"determinado de fotogramas.\n" +"Los valores más altos pueden hacer que las sombras se retrasen, los valores " +"más bajos\n" +"consumirán más recursos.\n" +"Valor mínimo: 1; valor máximo: 16" #: src/settings_translation_file.cpp msgid "" @@ -6147,23 +6145,25 @@ msgid "" "Controls the width of the range to be boosted.\n" "Standard deviation of the light curve boost Gaussian." msgstr "" +"Amplitud del rango de aumento de la curva de luz.\n" +"Controla la amplitud del rango a realzar.\n" +"Desviación estándar de la gaussiana de aumento de la curva de luz." #: src/settings_translation_file.cpp -#, fuzzy msgid "Static spawn point" -msgstr "Punto de aparición estático" +msgstr "Punto de generación estático" #: src/settings_translation_file.cpp msgid "Steepness noise" -msgstr "" +msgstr "Ruido de inclinación" #: src/settings_translation_file.cpp msgid "Step mountain size noise" -msgstr "" +msgstr "Ruido del tamaño de la montaña escalonada" #: src/settings_translation_file.cpp msgid "Step mountain spread noise" -msgstr "" +msgstr "Ruido disperso de las montañas que pasan" #: src/settings_translation_file.cpp msgid "Strength of 3D mode parallax." @@ -6175,10 +6175,13 @@ msgid "" "The 3 'boost' parameters define a range of the light\n" "curve that is boosted in brightness." msgstr "" +"Intensidad del realce de la curva de luz.\n" +"Los 3 parámetros 'boost' definen un rango de la curva de luz\n" +"de la curva de luz cuyo brillo se aumenta." #: src/settings_translation_file.cpp msgid "Strict protocol checking" -msgstr "" +msgstr "Control estricto del protocolo" #: src/settings_translation_file.cpp msgid "Strip color codes" @@ -6197,10 +6200,26 @@ msgid "" "server-intensive extreme water flow and to avoid vast flooding of the\n" "world surface below." msgstr "" +"Nivel superficial del agua opcional colocada sobre una capa sólida de tierra " +"flotante.\n" +"El agua está desactivada de forma predeterminada y sólo se colocará si se " +"establece este valor\n" +"arriba 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (el comienzo de la\n" +"cónico superior).\n" +"***ADVERTENCIA, PELIGRO POTENCIAL PARA LOS MUNDOS Y EL RENDIMIENTO DEL " +"SERVIDOR***:\n" +"Al permitir la colocación de agua, las flotantes deben configurarse y " +"probarse\n" +"para ser una capa sólida estableciendo 'mgv7_floatland_density' a 2.0 (u " +"otro\n" +"valor requerido dependiendo de 'mgv7_np_floatland'), para evitar\n" +"servidor-intensivo flujo de agua extrema y para evitar una gran inundación " +"de la\n" +"superficie del mundo por debajo." #: src/settings_translation_file.cpp msgid "Synchronous SQLite" -msgstr "" +msgstr "SQLite síncrono" #: src/settings_translation_file.cpp msgid "Temperature variation for biomes." @@ -6220,7 +6239,7 @@ msgstr "Altura del terreno" #: src/settings_translation_file.cpp msgid "Terrain higher noise" -msgstr "" +msgstr "Mayor ruido del terreno" #: src/settings_translation_file.cpp msgid "Terrain noise" @@ -6248,7 +6267,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Terrain persistence noise" -msgstr "" +msgstr "Ruido de persistencia del terreno" #: src/settings_translation_file.cpp msgid "" @@ -6256,6 +6275,9 @@ msgid "" "This must be a power of two.\n" "Bigger numbers create better shadows but it is also more expensive." msgstr "" +"Tamaño de la textura para renderizar el mapa de sombras.\n" +"Debe ser una potencia de dos.\n" +"Los números más grandes crean mejores sombras pero también son más caros." #: src/settings_translation_file.cpp msgid "" @@ -6266,6 +6288,17 @@ msgid "" "this option allows enforcing it for certain node types. Note though that\n" "that is considered EXPERIMENTAL and may not work properly." msgstr "" +"Las texturas de un nodo pueden estar alineadas con nodos o alineadas con el " +"mundo.\n" +"El primer modo es más adecuado para cosas como máquinas, muebles, etc., " +"mientras que\n" +"este último hace que las escaleras y los microbloques se adapten mejor al " +"entorno.\n" +"Sin embargo, como esta característica es nueva, no puede ser utilizada por " +"servidores más antiguos,\n" +"esta opción le permite aplicarla para ciertos tipos de nodos. Tenga en " +"cuenta que\n" +"que se considera EXPERIMENTAL y puede no funcionar correctamente." #: src/settings_translation_file.cpp msgid "The URL for the content repository" @@ -6338,19 +6371,23 @@ msgid "" "0.0 = Wave doesn't move at all.\n" "Default is 1.0 (1/2 node)." msgstr "" +"Altura máxima de la superficie de líquidos con olas.\n" +"4,0 = La altura de las olas es de dos nudos.\n" +"0,0 = La onda no se mueve en absoluto.\n" +"El valor predeterminado es 1,0 (1/2 nodo)." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The minimum time in seconds it takes between digging nodes when holding\n" "the dig button." msgstr "" -"El tiempo en segundos entre la colocación de cada nodo mientras\n" -"se mantiene pulsado el botón para colocar." +"El tiempo mínimo en segundos que toma entre nodos de excavación cuando se " +"mantiene presionado\n" +"el botón de excavación." #: src/settings_translation_file.cpp msgid "The network interface that the server listens on." -msgstr "" +msgstr "La interfaz de red en la que el servidor está esperando una conexión." #: src/settings_translation_file.cpp msgid "" @@ -6371,6 +6408,13 @@ msgid "" "maintained.\n" "This should be configured together with active_object_send_range_blocks." msgstr "" +"El radio del volumen de bloques alrededor de cada jugador que está sujeto a " +"la\n" +"material de bloque activo, indicado en bloques de mapas (16 nós).\n" +"En los bloques activos, se cargan objetos y se ejecutan los ABM.\n" +"Este es también el intervalo mínimo en el que los objetos (mobs) se " +"mantienen activos.\n" +"Esto debe configurarse junto con active_object_send_range_blocks." #: src/settings_translation_file.cpp msgid "" @@ -6389,6 +6433,8 @@ msgid "" "The sensitivity of the joystick axes for moving the\n" "in-game view frustum around." msgstr "" +"La sensibilidad de los ejes del joystick para mover el\n" +"en el juego." #: src/settings_translation_file.cpp msgid "" @@ -6397,6 +6443,12 @@ msgid "" "setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n" "set to the nearest valid value." msgstr "" +"La intensidad (oscuridad) del sombreado del nodo ambiente-oclusión.\n" +"Cuanto más bajo, más oscuro; cuanto más alto, más claro. El rango válido de " +"valores para este\n" +"es de 0.25 a 4.0 inclusive. Si el valor está fuera del rango, se ajustará al " +"valor válido más próximo.\n" +"el valor válido más próximo." #: src/settings_translation_file.cpp msgid "" @@ -6404,12 +6456,20 @@ msgid "" "capacity until an attempt is made to decrease its size by dumping old queue\n" "items. A value of 0 disables the functionality." msgstr "" +"El tiempo (en segundos) que la cola de líquidos puede crecer más allá de la " +"capacidad de procesamiento\n" +"de procesamiento hasta que se intente reducir su tamaño vertiendo los " +"elementos\n" +"de la cola. Un valor de 0 desactiva la funcionalidad." #: src/settings_translation_file.cpp msgid "" "The time budget allowed for ABMs to execute on each step\n" "(as a fraction of the ABM Interval)" msgstr "" +"El presupuesto de tiempo permitido para que las ABM se ejecuten en cada " +"paso\n" +"(como fracción del intervalo ABM)" #: src/settings_translation_file.cpp msgid "" @@ -6462,7 +6522,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Time of day when a new world is started, in millihours (0-23999)." -msgstr "" +msgstr "Hora del día en que se inicia un nuevo mundo, en milihoras (0-23999)." #: src/settings_translation_file.cpp msgid "Time send interval" @@ -6475,6 +6535,8 @@ msgstr "Velocidad del tiempo" #: src/settings_translation_file.cpp msgid "Timeout for client to remove unused map data from memory, in seconds." msgstr "" +"Tiempo de espera para que el cliente elimine de la memoria los datos de mapa " +"no utilizados, en segundos." #: src/settings_translation_file.cpp msgid "" @@ -6483,33 +6545,34 @@ msgid "" "This determines how long they are slowed down after placing or removing a " "node." msgstr "" +"Para reducir el lag, las transferencias de bloques se ralentizan cuando un " +"jugador está construyendo algo.\n" +"Esto determina cuánto tiempo se ralentizan después de colocar o eliminar un " +"nodo." #: src/settings_translation_file.cpp msgid "Tooltip delay" -msgstr "" +msgstr "Retraso de la información sobre herramientas" #: src/settings_translation_file.cpp msgid "Touchscreen" msgstr "Pantalla táctil" #: src/settings_translation_file.cpp -#, fuzzy msgid "Touchscreen sensitivity" -msgstr "Sensibilidad del ratón" +msgstr "Sensibilidad de la pantalla táctil" #: src/settings_translation_file.cpp -#, fuzzy msgid "Touchscreen sensitivity multiplier." -msgstr "Multiplicador de sensiblidad del ratón." +msgstr "Multiplicador de la sensibilidad de la pantalla táctil." #: src/settings_translation_file.cpp msgid "Tradeoffs for performance" -msgstr "" +msgstr "Contrapartidas para el rendimiento" #: src/settings_translation_file.cpp -#, fuzzy msgid "Translucent liquids" -msgstr "Líquidos opacos" +msgstr "Líquidos translúcidos" #: src/settings_translation_file.cpp msgid "Transparency Sorting Distance" From 375b21e81a3e3a1c4e9c1394d68fb3a59ad143eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joaqu=C3=ADn=20Villalba?= Date: Sun, 6 Oct 2024 03:24:38 +0000 Subject: [PATCH 069/178] Translated using Weblate (Spanish) Currently translated at 100.0% (1335 of 1335 strings) --- po/es/luanti.po | 407 +++++++++++++++++++++++++++++------------------- 1 file changed, 246 insertions(+), 161 deletions(-) diff --git a/po/es/luanti.po b/po/es/luanti.po index 9a8f67a50..67d499f64 100644 --- a/po/es/luanti.po +++ b/po/es/luanti.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Spanish (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-07-11 15:14+0200\n" -"PO-Revision-Date: 2024-09-15 16:09+0000\n" -"Last-Translator: gallegonovato \n" +"PO-Revision-Date: 2024-10-06 23:41+0000\n" +"Last-Translator: Joaquín Villalba \n" "Language-Team: Spanish \n" "Language: es\n" @@ -78,12 +78,12 @@ msgstr "Obtener ayuda para los comandos (-t: salida en el chat)" msgid "" "Use '.help ' to get more information, or '.help all' to list everything." msgstr "" -"Usa '.help ' para obtener más información, o '.help all' para mostrar " -"todo." +"Usa '.help ' para obtener más información, o '.help all' para " +"mostrar todos." #: builtin/common/chatcommands.lua msgid "[all | ] [-t]" -msgstr "[all | ] [-t]" +msgstr "[all | ] [-t]" #: builtin/fstk/ui.lua msgid "" @@ -91,11 +91,11 @@ msgstr "" #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" -msgstr "Ha ocurrido un error en un script de Lua:" +msgstr "Se produjo un error en un script de Lua:" #: builtin/fstk/ui.lua msgid "An error occurred:" -msgstr "Ha ocurrido un error:" +msgstr "Se produjo un error:" #: builtin/fstk/ui.lua msgid "Main menu" @@ -752,7 +752,7 @@ msgstr "Ajustes" #: builtin/mainmenu/serverlistmgr.lua msgid "Public server list is disabled" -msgstr "La lista de servidores públicos está desactivada" +msgstr "Lista de servidores públicos deshabilitada" #: builtin/mainmenu/serverlistmgr.lua msgid "Try reenabling public serverlist and check your internet connection." @@ -942,11 +942,11 @@ msgstr "Medio" #: builtin/mainmenu/settings/shadows_component.lua msgid "Very High" -msgstr "Muy alto" +msgstr "Muy Alto" #: builtin/mainmenu/settings/shadows_component.lua msgid "Very Low" -msgstr "Muy bajo" +msgstr "Muy Bajo" #: builtin/mainmenu/tab_about.lua msgid "About" @@ -954,7 +954,7 @@ msgstr "Acerca de" #: builtin/mainmenu/tab_about.lua msgid "Active Contributors" -msgstr "Colaboradores activos" +msgstr "Colaboradores Activos" #: builtin/mainmenu/tab_about.lua msgid "Active renderer:" @@ -962,11 +962,11 @@ msgstr "Renderizador activo:" #: builtin/mainmenu/tab_about.lua msgid "Core Developers" -msgstr "Desarrolladores principales" +msgstr "Desarrolladores Principales" #: builtin/mainmenu/tab_about.lua msgid "Core Team" -msgstr "Equipo principal" +msgstr "Equipo Principal" #: builtin/mainmenu/tab_about.lua msgid "Irrlicht device:" @@ -994,7 +994,7 @@ msgstr "Antiguos desarrolladores principales" #: builtin/mainmenu/tab_about.lua msgid "Share debug log" -msgstr "Compartir el registro de debug" +msgstr "Compartir el registro de depuración" #: builtin/mainmenu/tab_content.lua msgid "Browse online content" @@ -1002,7 +1002,7 @@ msgstr "Explorar contenido en línea" #: builtin/mainmenu/tab_content.lua msgid "Browse online content [$1]" -msgstr "Navegar por los contenidos en línea [$1]" +msgstr "Explorar contenido en línea[$1]" #: builtin/mainmenu/tab_content.lua msgid "Content" @@ -1074,7 +1074,7 @@ msgstr "Instalar juegos desde ContentDB" #: builtin/mainmenu/tab_local.lua msgid "Minetest doesn't come with a game by default." -msgstr "Minetest Game ya no es instalado por predeterminado." +msgstr "Minetest no viene con un juego por defecto." #: builtin/mainmenu/tab_local.lua msgid "" @@ -1090,7 +1090,7 @@ msgstr "Nuevo" #: builtin/mainmenu/tab_local.lua msgid "No world created or selected!" -msgstr "¡No se ha dado un nombre al mundo o no se ha seleccionado uno!" +msgstr "¡No hay mundo creado o no se ha seleccionado uno!" #: builtin/mainmenu/tab_local.lua msgid "Play Game" @@ -1126,7 +1126,7 @@ msgstr "Dirección" #: builtin/mainmenu/tab_online.lua msgid "Creative mode" -msgstr "Modalidad creativo" +msgstr "Creativo" #. ~ PvP = Player versus Player #: builtin/mainmenu/tab_online.lua @@ -1279,7 +1279,7 @@ msgstr "Límites de bloque ocultos" #: src/client/game.cpp msgid "Block bounds shown for current block" -msgstr "Límites de bloque mostrados para el bloque actual" +msgstr "Límites de bloque visibles para el bloque actual" #: src/client/game.cpp msgid "Block bounds shown for nearby blocks" @@ -1351,7 +1351,7 @@ msgid "" " --> place single item to slot\n" msgstr "" "Controles:\n" -"No hay menú abierto:\n" +"Sin menús abiertos:\n" "- deslizar dedo: mirar alrededor\n" "- toque: colocar/golpear/usar (por defecto)\n" "- toque largo: cavar/usar (por defecto)\n" @@ -1361,7 +1361,7 @@ msgstr "" "- tocar pila, tocar ranura\n" " --> mover pila\n" "- tocar y arrastrar, tocar 2º dedo\n" -" --> colocar un objeto en la ranura\n" +" --> colocar un solo elemento en la ranura\n" #: src/client/game.cpp #, c-format @@ -1399,7 +1399,7 @@ msgstr "Salir al menú" #: src/client/game.cpp msgid "Exit to OS" -msgstr "Salir al S.O." +msgstr "Salir al SO" #: src/client/game.cpp msgid "Fast mode disabled" @@ -1611,7 +1611,7 @@ msgstr "Volumen cambiado a %d%%" #: src/client/game.cpp msgid "Wireframe shown" -msgstr "Estructura alámbricas mostradas" +msgstr "Estructura alámbrica visible" #: src/client/game.cpp msgid "Zoom currently disabled by game or mod" @@ -1709,7 +1709,7 @@ msgstr "Convertir IME" #: src/client/keycode.cpp msgid "IME Escape" -msgstr "Escape de IME" +msgstr "Escape IME" #: src/client/keycode.cpp msgid "IME Mode Change" @@ -1860,19 +1860,19 @@ msgstr "Botón derecho" #: src/client/keycode.cpp msgid "Right Control" -msgstr "Control der" +msgstr "Control Derecho" #: src/client/keycode.cpp msgid "Right Menu" -msgstr "Menú der" +msgstr "Menú Derecho" #: src/client/keycode.cpp msgid "Right Shift" -msgstr "Shift der" +msgstr "Shift Derecho" #: src/client/keycode.cpp msgid "Right Windows" -msgstr "Win der" +msgstr "Windows Derecho" #: src/client/keycode.cpp msgid "Scroll Lock" @@ -2320,7 +2320,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "3D noise defining structure of river canyon walls." -msgstr "Ruido 3D definiendo la estructura de las paredes de ríos de cañón." +msgstr "Ruido 3D definiendo la estructura de desfiladeros de ríos de cañón." #: src/settings_translation_file.cpp msgid "3D noise defining terrain." @@ -2337,7 +2337,6 @@ msgid "3D noise that determines number of dungeons per mapchunk." msgstr "Ruido 3D que determina la cantidad de mazmorras por chunk." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "3D support.\n" "Currently supported:\n" @@ -2352,13 +2351,13 @@ msgstr "" "Soporte 3D.\n" "Soportado actualmente:\n" "- Ninguno (none): sin salida 3D.\n" -"- Anaglifo (anaglyph): 3D en colores cian y magenta.\n" +"- Anaglifo (anaglyph): 3D en colores cían y magenta.\n" "- Entrelazado (interlaced): soporte para pantallas con polarización " "basada en filas impar/par.\n" "- Arriba-abajo (topbottom): dividir pantalla arriba y abajo.\n" "- Lado a lado (sidebyside): dividir pantalla lado a lado.\n" "- Vista cruzada (crossview): visión 3D cruzada.\n" -"Nota: el modo entrelazado requiere que los shaders estén activados." +"Nota: el modo entrelazado requiere que los sombreadores estén activados." #: src/settings_translation_file.cpp msgid "" @@ -2371,7 +2370,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "A message to be displayed to all clients when the server crashes." msgstr "" -"Un mensaje para ser mostrado a todos los clientes cuando el servidor cae." +"Un mensaje que se mostrará a todos los clientes cuando el servidor falle." #: src/settings_translation_file.cpp msgid "A message to be displayed to all clients when the server shuts down." @@ -2389,7 +2388,7 @@ msgstr "Límite de tiempo para MBA" #: src/settings_translation_file.cpp msgid "Absolute limit of queued blocks to emerge" -msgstr "Límite absoluto de bloques en proceso" +msgstr "Límite absoluto de bloques en cola que emergerán" #: src/settings_translation_file.cpp msgid "Acceleration in air" @@ -2609,7 +2608,7 @@ msgstr "Modo de autoescalado" #: src/settings_translation_file.cpp msgid "Aux1 key for climbing/descending" -msgstr "Tecla Aux1 para subir/bajar" +msgstr "Usar Aux1 para trepar/descender" #: src/settings_translation_file.cpp msgid "Base ground level" @@ -2661,19 +2660,19 @@ msgstr "Optimizar la distancia del envío de bloques" #: src/settings_translation_file.cpp msgid "Bloom" -msgstr "Floración" +msgstr "Bloom" #: src/settings_translation_file.cpp msgid "Bloom Intensity" -msgstr "Intensidad del destello de lente" +msgstr "Intensidad del Bloom" #: src/settings_translation_file.cpp msgid "Bloom Radius" -msgstr "Radio del destello de lente" +msgstr "Radio del Bloom" #: src/settings_translation_file.cpp msgid "Bloom Strength Factor" -msgstr "Intensidad del destello de lente" +msgstr "Factor de fuerza del Bloom" #: src/settings_translation_file.cpp msgid "Bobbing" @@ -2769,7 +2768,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Chat command time message threshold" -msgstr "Umbral de tiempo para el comando en el chat" +msgstr "Umbral de mensaje de tiempo de comandos del chat" #: src/settings_translation_file.cpp msgid "Chat commands" @@ -2812,8 +2811,8 @@ msgid "" "Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " "output." msgstr "" -"Enlaces web cliqueables (clic central o Ctrl+clic-izquierdo) habilitados en " -"la salida de la consola de chat." +"Enlaces web cliqueables (clic central o Ctrl+clic izquierdo) habilitados en " +"la salida de consola del chat." #: src/settings_translation_file.cpp msgid "Client" @@ -2890,12 +2889,13 @@ msgid "" "These flags are independent from Minetest versions,\n" "so see a full list at https://content.minetest.net/help/content_flags/" msgstr "" -"Lista de 'marcas' a ocultar en el repositorio de contenido. La lista usa la " -"coma como separador.\n" -"Se puede usar la etiqueta \"nonfree\" para ocultar paquetes que no tienen " -"licencia libre (tal como define la Fundación de software libre (FSF)).\n" +"Lista separada por comas de etiquetas a ocultar en el repositorio de " +"contenido.\n" +"Se puede usar la etiqueta 'nonfree' para ocultar paquetes que no califican\n" +"como \"software libre\", tal como es definido por la Fundación de Software " +"Libre (FSF).\n" "También puedes especificar clasificaciones de contenido.\n" -"Estas 'marcas' son independientes de la versión de Minetest.\n" +"Estas etiquetas son independientes de la versión de Minetest.\n" "Si quieres ver una lista completa visita https://content.minetest.net/help/" "content_flags/" @@ -2971,15 +2971,15 @@ msgstr "Repositorio de contenido" #: src/settings_translation_file.cpp msgid "ContentDB Flag Blacklist" -msgstr "Lista negra de Contenido de la Base de Datos" +msgstr "Lista negra de Contenido de ContentDB" #: src/settings_translation_file.cpp msgid "ContentDB Max Concurrent Downloads" -msgstr "Descargas máximas simultáneas para ContentDB" +msgstr "Descargas máximas simultáneas en ContentDB" #: src/settings_translation_file.cpp msgid "ContentDB URL" -msgstr "Dirección URL de ContentDB" +msgstr "URL de ContentDB" #: src/settings_translation_file.cpp msgid "" @@ -2997,9 +2997,8 @@ msgid "" "Controls sinking speed in liquid when idling. Negative values will cause\n" "you to rise instead." msgstr "" -"Controla la velocidad de hundimiento en líquidos mientras se está en reposo. " -"Los valores negativos harán que\n" -"se eleve en vez de eso." +"Controla la velocidad de descenso en líquidos mientras se está quieto.\n" +"Un valor negativo hará que se eleve en vez de bajar." #: src/settings_translation_file.cpp msgid "Controls steepness/depth of lake depressions." @@ -3328,11 +3327,11 @@ msgstr "Habilitar Exposición Automática" #: src/settings_translation_file.cpp msgid "Enable Bloom" -msgstr "Activar Destello de Lente" +msgstr "Activar Bloom" #: src/settings_translation_file.cpp msgid "Enable Bloom Debug" -msgstr "Habilitar Debug del Destello de Lente" +msgstr "Activar Depuración de Bloom" #: src/settings_translation_file.cpp msgid "Enable Debanding" @@ -3514,7 +3513,7 @@ msgstr "Activa depuración y comprobación de errores en el driver OpenGL." #: src/settings_translation_file.cpp msgid "Enables the post processing pipeline." -msgstr "Activa el proceso de postprocesado." +msgstr "Activas el proceso de posprocesamiento." #: src/settings_translation_file.cpp msgid "" @@ -3656,7 +3655,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Floatland density" -msgstr "Densidad de las tierras flotantes" +msgstr "Densidad de las islas flotantes" #: src/settings_translation_file.cpp msgid "Floatland maximum Y" @@ -3922,7 +3921,7 @@ msgstr "HUD" #: src/settings_translation_file.cpp msgid "HUD scaling" -msgstr "Escala de HUD" +msgstr "Escalado del HUD" #: src/settings_translation_file.cpp msgid "" @@ -3970,7 +3969,7 @@ msgstr "Altura del ruido" #: src/settings_translation_file.cpp msgid "Height select noise" -msgstr "Altura del ruido seleccionado" +msgstr "Ruido de selección de altura" #: src/settings_translation_file.cpp msgid "Hill steepness" @@ -4069,7 +4068,7 @@ msgstr "Ancho de los ríos." #: src/settings_translation_file.cpp msgid "Humidity blend noise" -msgstr "Ruido de la mezcla de humedad" +msgstr "Ruido de mezcla de humedad" #: src/settings_translation_file.cpp msgid "Humidity noise" @@ -4110,8 +4109,8 @@ msgid "" "and\n" "descending." msgstr "" -"Si está activada, la tecla \"Aux1\" en lugar de la tecla \"Sneak\" se " -"utilizará para bajar y\n" +"Si está activada, se utiliza \"Aux1\" en lugar de la tecla \"Sneak\" para " +"bajar y\n" "descender." #: src/settings_translation_file.cpp @@ -4194,8 +4193,8 @@ msgid "" "If the execution of a chat command takes longer than this specified time in\n" "seconds, add the time information to the chat command message" msgstr "" -"Si la ejecución de un comando toma más tiempo del especificado en\n" -"segundos, agrega la información del tiempo al mensaje del comando" +"Si la ejecución de un comando demora más que este tiempo especificado en\n" +"segundos, agregue la información de tiempo al mensaje del comando" #: src/settings_translation_file.cpp msgid "" @@ -4212,11 +4211,13 @@ msgstr "" #: src/settings_translation_file.cpp msgid "If this is set, players will always (re)spawn at the given position." -msgstr "Si se activa, los jugadores siempre reaparecerán en la posición dada." +msgstr "" +"Si se configura esta opción, los jugadores siempre (re)aparecerán en la " +"posición indicada." #: src/settings_translation_file.cpp msgid "Ignore world errors" -msgstr "Ignora los errores del mundo" +msgstr "Ignorar errores del mundo" #: src/settings_translation_file.cpp msgid "In-game chat console background alpha (opaqueness, between 0 and 255)." @@ -4278,7 +4279,8 @@ msgstr "Instrumenta los métodos de las entidades en el registro." #: src/settings_translation_file.cpp msgid "Interval of saving important changes in the world, stated in seconds." msgstr "" -"Intervalo de guardar cambios importantes en el mundo, expresado en segundos." +"Intervalo de guardado de cambios importantes en el mundo, expresado en " +"segundos." #: src/settings_translation_file.cpp msgid "Interval of sending time of day to clients, stated in seconds." @@ -4287,11 +4289,11 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Inventory items animations" -msgstr "Animaciones de elementos del inventario" +msgstr "Animaciones de objetos del inventario" #: src/settings_translation_file.cpp msgid "Invert mouse" -msgstr "Invertir el ratón" +msgstr "Invertir ratón" #: src/settings_translation_file.cpp msgid "Invert mouse wheel (scroll) direction for item selection in hotbar." @@ -4312,7 +4314,7 @@ msgstr "Ruta de la fuente monoespacial cursiva" #: src/settings_translation_file.cpp msgid "Item entity TTL" -msgstr "Ítem entidad TTL" +msgstr "Tiempo de vida de entidades de objetos" #: src/settings_translation_file.cpp msgid "Iterations" @@ -4480,9 +4482,10 @@ msgid "" "stated in seconds.\n" "Does not apply to sessions hosted from the client menu." msgstr "" -"Duración de un tick del servidor y el intervalo en\n" -"el que los objetos se actualizan generalmente\n" -"sobre la red, expresada en segundos." +"Duración de un tick del servidor (el intervalo en el que todo es " +"actualizado),\n" +"expresado en segundos.\n" +"No se aplica a las sesiones iniciadas desde el menú del cliente." #: src/settings_translation_file.cpp msgid "Length of liquid waves." @@ -4580,10 +4583,12 @@ msgid "" "Only has an effect if compiled with cURL." msgstr "" "Limita el número de solicitudes HTTP paralelas. Afecta:\n" -"- Recuperación de medios si el servidor utiliza remote_media setting.\n" -"- Descarga de la lista de servidores y anuncio del servidor.\n" -"- Descargas realizadas por el menú principal (por ejemplo, gestor de mods).\n" -"Sólo tiene un efecto si se compila con cURL." +"- Obtención de medios si el servidor utiliza la configuración " +"remote_media.\n" +"- Descarga de la lista de servidores y anuncio del servidor.\n" +"- Descargas realizadas por el menú principal (por ejemplo, gestor de " +"mods).\n" +"Sólo tiene efecto si se compila con cURL." #: src/settings_translation_file.cpp msgid "Liquid fluidity" @@ -4638,9 +4643,9 @@ msgid "" "from the bright objects.\n" "Range: from 0.1 to 8, default: 1" msgstr "" -"Valor lógico que controla la lejanía de la dispersión del destello de lente\n" -"de los objetos brillantes.\n" -"Rango: desde 0.1 hasta 8, por defecto: 1" +"Valor lógico que controla hasta qué punto se propaga el efecto de bloom\n" +"desde los objetos brillantes.\n" +"Rango: de 0.1 a 8, por defecto: 1" #: src/settings_translation_file.cpp msgid "Lower Y limit of dungeons." @@ -4675,7 +4680,9 @@ msgstr "Directorio de mapas" #: src/settings_translation_file.cpp msgid "Map generation attributes specific to Mapgen Carpathian." -msgstr "Atributos de generación de mapas específicos de Mapgen Carpathian." +msgstr "" +"Atributos de generación de mapas específicos al generador de mapas " +"Carpathian." #: src/settings_translation_file.cpp msgid "" @@ -4763,7 +4770,7 @@ msgstr "Limite del Mapblock" #: src/settings_translation_file.cpp msgid "Mapblock mesh generation delay" -msgstr "Retraso de generación de la malla del Mapblock" +msgstr "Retraso en la generación de malla de bloque de mapa" #: src/settings_translation_file.cpp msgid "Mapblock mesh generation threads" @@ -4779,7 +4786,7 @@ msgstr "Generador de mapas carpatiano" #: src/settings_translation_file.cpp msgid "Mapgen Carpathian specific flags" -msgstr "Indicadores específicos del generador de mapas \"Carpathian\"" +msgstr "Configuraciones del generador de mapas \"Carpathian\"" #: src/settings_translation_file.cpp msgid "Mapgen Flat" @@ -4847,7 +4854,7 @@ msgstr "Distancia máxima de envío de bloques" #: src/settings_translation_file.cpp msgid "Max liquids processed per step." -msgstr "Máxima cantidad de líquidos procesada por paso." +msgstr "Máxima cantidad de líquidos procesados por paso." #: src/settings_translation_file.cpp msgid "Max. clearobjects extra blocks" @@ -4875,16 +4882,15 @@ msgstr "Máximos bloques cargados a la fuerza" #: src/settings_translation_file.cpp msgid "Maximum hotbar width" -msgstr "Anchura máxima de la barra de acceso rápido" +msgstr "Ancho máximo de la barra de acceso rápido" #: src/settings_translation_file.cpp msgid "Maximum limit of random number of large caves per mapchunk." -msgstr "Límite máximo de grandes cuevas aleatorias por chunk." +msgstr "Límite máximo de número aleatorio de cuevas grandes por mapchunk." #: src/settings_translation_file.cpp msgid "Maximum limit of random number of small caves per mapchunk." -msgstr "" -"Límite máximo de número aleatorio de cavernas pequeñas por pedazo de mapa." +msgstr "Límite máximo de número aleatorio de cuevas pequeñas por mapchunk." #: src/settings_translation_file.cpp msgid "" @@ -5044,9 +5050,8 @@ msgid "Minimap scan height" msgstr "Altura de escaneo del minimapa" #: src/settings_translation_file.cpp -#, fuzzy msgid "Minimum dig repetition interval" -msgstr "Intervalo de repetición para colocar" +msgstr "Intervalo de repetición para cavar" #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." @@ -5059,7 +5064,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Mipmapping" -msgstr "Mapa mip" +msgstr "Mapeo MIP" #: src/settings_translation_file.cpp msgid "Miscellaneous" @@ -5130,8 +5135,8 @@ msgid "" "Multiplier for fall bobbing.\n" "For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." msgstr "" -"Multiplicador del balanceo de caída.\n" -"Por ejemplo: 0 para no ver balanceo; 1.0 para normal; 2.0 para doble." +"Multiplicador del cabeceo por caída.\n" +"Por ejemplo: 0 para no ver cabeceo; 1.0 para normal; 2.0 para doble." #: src/settings_translation_file.cpp msgid "Mute sound" @@ -5144,10 +5149,10 @@ msgid "" "Current mapgens in a highly unstable state:\n" "- The optional floatlands of v7 (disabled by default)." msgstr "" -"Nombre del generador de mapas que se utilizará al crear un nuevo mundo.\n" -"Crear un mundo en el menú principal anulará esto.\n" -"Los generadores de mapas actuales estan en un estado altamente inestable:\n" -"- …Las floatlands opcionales de la v7 (desactivado por defecto)." +"Nombre del generador de mapas que se utilizará al crear un mundo nuevo.\n" +"Crear un mundo desde el menú principal anulará esto.\n" +"Generadores de mapas actuales en un estado altamente inestable:\n" +"- Las islas flotantes opcionales de v7 (desactivadas por defecto)." #: src/settings_translation_file.cpp msgid "" @@ -5164,8 +5169,8 @@ msgstr "" msgid "" "Name of the server, to be displayed when players join and in the serverlist." msgstr "" -"Nombre del servior, será mostrado cuando los jugadores se unan y en la lista " -"de servidores." +"Nombre del servidor, que se mostrará cuando los jugadores se unan y en la " +"lista de servidores." #: src/settings_translation_file.cpp msgid "" @@ -5419,7 +5424,7 @@ msgstr "Proporción de cuevas grandes que contienen líquido." #: src/settings_translation_file.cpp msgid "Protocol version minimum" -msgstr "La versión del protocolo no coincide" +msgstr "Versión mínima de protocolo" #: src/settings_translation_file.cpp msgid "Punch gesture" @@ -5449,7 +5454,7 @@ msgstr "Orden aleatorio de carga de mods" #: src/settings_translation_file.cpp msgid "Recent Chat Messages" -msgstr "Mensajes Recientes del Chat" +msgstr "Mensajes de Chat Recientes" #: src/settings_translation_file.cpp msgid "Regular font path" @@ -5477,7 +5482,7 @@ msgstr "Sustituye el menú principal por defecto con uno personalizado." #: src/settings_translation_file.cpp msgid "Report path" -msgstr "Reportar ruta" +msgstr "Ruta de reportes" #: src/settings_translation_file.cpp msgid "" @@ -5528,7 +5533,7 @@ msgstr "Tamaño del ruido de las montañas acanaladas" #: src/settings_translation_file.cpp msgid "River channel depth" -msgstr "Profundidad del canal fluvial" +msgstr "Profundidad del canal del río" #: src/settings_translation_file.cpp msgid "River channel width" @@ -5544,11 +5549,11 @@ msgstr "Ruido de río" #: src/settings_translation_file.cpp msgid "River size" -msgstr "Tamaño del río" +msgstr "Tamaño de ríos" #: src/settings_translation_file.cpp msgid "River valley width" -msgstr "Anchura de los valles con ríos" +msgstr "Ancho de valles de ríos" #: src/settings_translation_file.cpp msgid "Rollback recording" @@ -5591,7 +5596,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Saving map received from server" -msgstr "Guardando el mapa recibido del servidor" +msgstr "Guardando mapa recibido del servidor" #: src/settings_translation_file.cpp msgid "" @@ -5619,11 +5624,11 @@ msgstr "Altura de la pantalla" #: src/settings_translation_file.cpp msgid "Screen width" -msgstr "Ancho de la pantalla" +msgstr "Ancho de pantalla" #: src/settings_translation_file.cpp msgid "Screenshot folder" -msgstr "Carpeta de captura de pantalla" +msgstr "Carpeta de capturas de pantalla" #: src/settings_translation_file.cpp msgid "Screenshot format" @@ -5639,7 +5644,7 @@ msgid "" "1 means worst quality; 100 means best quality.\n" "Use 0 for default quality." msgstr "" -"Calidad de captura de pantalla. Solo se utiliza para el formato JPEG.\n" +"Calidad de captura de pantalla. Solo se utiliza para formato JPEG.\n" "1 significa la peor calidad; 100 significa la mejor calidad.\n" "Utilice 0 para la calidad predeterminada." @@ -5712,7 +5717,7 @@ msgstr "Color del borde del cuadro de selección (R, G, B)." #: src/settings_translation_file.cpp msgid "Selection box color" -msgstr "Color del cuadro de selección" +msgstr "Color de la caja de selección" #: src/settings_translation_file.cpp msgid "Selection box width" @@ -5886,8 +5891,8 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Set to true to enable volumetric lighting effect (a.k.a. \"Godrays\")." msgstr "" -"Establézcalo a true para activar el efecto de iluminación volumétrica (" -"también conocido como \"Godrays\")." +"Establecer a verdadero para activar el efecto de iluminación volumétrica (" +"alias «Rayos de Dios»)." #: src/settings_translation_file.cpp msgid "Set to true to enable waving leaves." @@ -5922,9 +5927,9 @@ msgid "" "On false, 16 bits texture will be used.\n" "This can cause much more artifacts in the shadow." msgstr "" -"Establece la calidad de textura de las sombras a 32 bits.\n" -"Si es falso, se usarán texturas de 16 bits.\n" -"Esto puede causar muchos más artefactos visuales en las sobras." +"Establece la calidad de textura de la sombra a 32 bits.\n" +"Si es falso, se usará una textura de 16 bits.\n" +"Esto puede causar muchos más artefactos visuales en la sombra." #: src/settings_translation_file.cpp msgid "Shader path" @@ -5942,8 +5947,7 @@ msgid "" msgstr "" "Los sombreadores permiten efectos visuales avanzados y pueden aumentar el " "rendimiento\n" -"en algunas tarjetas de vídeo. Esto solo funciona con el motor de vídeo " -"OpenGL." +"en algunas tarjetas de vídeo." #: src/settings_translation_file.cpp msgid "Shadow filter quality" @@ -5975,11 +5979,11 @@ msgstr "Intensidad de la gama de las sombras" #: src/settings_translation_file.cpp msgid "Show debug info" -msgstr "Mostrar la informacion de la depuración" +msgstr "Mostrar información de depuración" #: src/settings_translation_file.cpp msgid "Show entity selection boxes" -msgstr "Mostrar cajas de selección de entidades" +msgstr "Mostrar cajas de selección en entidades" #: src/settings_translation_file.cpp msgid "" @@ -6045,11 +6049,11 @@ msgstr "La pendiente y el relleno trabajan juntos para modificar las alturas." #: src/settings_translation_file.cpp msgid "Small cave maximum number" -msgstr "Cantidad máxima de cuevas pequeñas" +msgstr "Número máximo de cuevas pequeñas" #: src/settings_translation_file.cpp msgid "Small cave minimum number" -msgstr "Cantidad mínima de cuevas pequeñas" +msgstr "Número mínimo de cuevas pequeñas" #: src/settings_translation_file.cpp msgid "Small-scale humidity variation for blending biomes on borders." @@ -6071,8 +6075,8 @@ msgid "" "Smooths rotation of camera when in cinematic mode, 0 to disable. Enter " "cinematic mode by using the key set in Controls." msgstr "" -"Suaviza la rotación de la cámara en modo cinemático, 0 para desactivar. " -"Entra en modo cinemático usando la tecla establecida en Controles." +"Suaviza la rotación de la cámara en modo cinematográfico, 0 para desactivar. " +"Entra en modo cinematográfico usando la tecla establecida en Controles." #: src/settings_translation_file.cpp msgid "" @@ -6219,7 +6223,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Synchronous SQLite" -msgstr "SQLite síncrono" +msgstr "SQLite sincrónico" #: src/settings_translation_file.cpp msgid "Temperature variation for biomes." @@ -6239,7 +6243,7 @@ msgstr "Altura del terreno" #: src/settings_translation_file.cpp msgid "Terrain higher noise" -msgstr "Mayor ruido del terreno" +msgstr "Terreno con mayor ruido" #: src/settings_translation_file.cpp msgid "Terrain noise" @@ -6424,9 +6428,9 @@ msgid "" "Shaders are supported by everything but OGLES1." msgstr "" "El back-end de renderizado.\n" -"Nota: ¡se requiere reinicio después de cambiar esto!\n" +"Nota: ¡se debe reiniciar después de cambiar esto!\n" "OpenGL es el predeterminado para PC, y OGLES2 para Android.\n" -"Los shaders son soportados por todo excepto OGLES1." +"Los shaders son compatibles con todos los sistemas excepto OGLES1." #: src/settings_translation_file.cpp msgid "" @@ -6576,7 +6580,7 @@ msgstr "Líquidos translúcidos" #: src/settings_translation_file.cpp msgid "Transparency Sorting Distance" -msgstr "" +msgstr "Distancia de Clasificación de Transparencia" #: src/settings_translation_file.cpp msgid "Trees noise" @@ -6598,7 +6602,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Trusted mods" -msgstr "Mods de fiar" +msgstr "Mods de confianza" #: src/settings_translation_file.cpp msgid "" @@ -6609,6 +6613,13 @@ msgid "" "\n" "This setting should only be changed if you have performance problems." msgstr "" +"Tipo de occlusion_culler\n" +"\n" +"\"loops\" es el algoritmo heredado con bucles anidados y complejidad O(n³)\n" +"\"bfs\" es el nuevo algoritmo basado en búsqueda en amplitud y selección " +"lateral\n" +"\n" +"Esta configuración solo debe cambiarse si tiene problemas de rendimiento." #: src/settings_translation_file.cpp msgid "" @@ -6616,6 +6627,9 @@ msgid "" "release\n" "If this is empty the engine will never check for updates." msgstr "" +"URL del archivo JSON que proporciona información sobre la última versión de " +"Minetest\n" +"Si está vacío, el motor nunca buscará actualizaciones." #: src/settings_translation_file.cpp msgid "URL to the server list displayed in the Multiplayer Tab." @@ -6633,10 +6647,17 @@ msgid "" "image.\n" "Higher values result in a less detailed image." msgstr "" +"El submuestreo es similar al uso de una resolución de pantalla más baja, " +"pero se aplica\n" +"solo al mundo del juego, manteniendo intacta la interfaz gráfica de usuario." +"\n" +"Debería proporcionar un aumento significativo del rendimiento a costa de una " +"imagen menos detallada.\n" +"Los valores más altos dan como resultado una imagen menos detallada." #: src/settings_translation_file.cpp msgid "Unlimited player transfer distance" -msgstr "" +msgstr "Distancia de transferencia de jugadores ilimitada" #: src/settings_translation_file.cpp msgid "Unload unused server data" @@ -6648,7 +6669,7 @@ msgstr "Actualizar información de URLs" #: src/settings_translation_file.cpp msgid "Upper Y limit of dungeons." -msgstr "Límite Y superior de las mazmorras." +msgstr "Límite superior Y de las mazmorras." #: src/settings_translation_file.cpp msgid "Upper Y limit of floatlands." @@ -6663,12 +6684,10 @@ msgid "Use a cloud animation for the main menu background." msgstr "Usar nubes con animaciones para el fondo del menú principal." #: src/settings_translation_file.cpp -#, fuzzy msgid "Use anisotropic filtering when looking at textures from an angle." -msgstr "Usar filtrado trilinear al escalar texturas." +msgstr "Usar filtrado anisotrópico al mirar texturas desde un ángulo." #: src/settings_translation_file.cpp -#, fuzzy msgid "Use bilinear filtering when scaling textures." msgstr "Usar filtrado bilinear al escalar texturas." @@ -6690,6 +6709,10 @@ msgid "" "especially when using a high-resolution texture pack.\n" "Gamma-correct downscaling is not supported." msgstr "" +"Usar mipmaps al escalar texturas. Esto puede mejorar levemente el " +"rendimiento,\n" +"especialmente cuando se utiliza un paquete de texturas de alta resolución.\n" +"No se admite downscaling con corrección de gamma." #: src/settings_translation_file.cpp msgid "" @@ -6697,6 +6720,10 @@ msgid "" "This flag enables use of raytraced occlusion culling test for\n" "client mesh sizes smaller than 4x4x4 map blocks." msgstr "" +"Usar oclusión selectiva mediante raytracing.\n" +"Esta configuración permite el uso de oclusión selectiva mediante trazado de " +"rayos\n" +"para tamaños de malla del cliente más pequeños que bloques de mapa de 4x4x4." #: src/settings_translation_file.cpp msgid "" @@ -6709,15 +6736,14 @@ msgstr "" "el filtro trilinear." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Use virtual joystick to trigger \"Aux1\" button.\n" "If enabled, virtual joystick will also tap \"Aux1\" button when out of main " "circle." msgstr "" -"(Android) Usar el joystick virtual para activar el botón \"Aux1\".\n" -"Si está activado, el joystick virtual también activará el botón \"Aux1\" " -"fuera del círculo principal." +"Usar el joystick virtual para activar el botón \"Aux1\".\n" +"Si está activado, el joystick virtual también activará el botón \"Aux1\" al " +"deslizarse fuera del círculo." #: src/settings_translation_file.cpp msgid "User Interfaces" @@ -6733,19 +6759,19 @@ msgstr "Profundidad del valle" #: src/settings_translation_file.cpp msgid "Valley fill" -msgstr "" +msgstr "Rellenado de valles" #: src/settings_translation_file.cpp msgid "Valley profile" -msgstr "" +msgstr "Perfil de valles" #: src/settings_translation_file.cpp msgid "Valley slope" -msgstr "" +msgstr "Pendiente de valles" #: src/settings_translation_file.cpp msgid "Variation of biome filler depth." -msgstr "" +msgstr "Variación de profundidad del relleno de bioma." #: src/settings_translation_file.cpp msgid "Variation of maximum mountain height (in nodes)." @@ -6772,6 +6798,9 @@ msgid "" "Varies roughness of terrain.\n" "Defines the 'persistence' value for terrain_base and terrain_alt noises." msgstr "" +"Varía la rugosidad del terreno.\n" +"Define el valor de \"persistencia\" para los ruidos terrain_base y " +"terrain_alt." #: src/settings_translation_file.cpp msgid "Varies steepness of cliffs." @@ -6786,12 +6815,12 @@ msgid "" "Vertical screen synchronization. Your system may still force VSync on even " "if this is disabled." msgstr "" -"Sincronización vertical de la pantalla. Tu sistema aún podría forzar la " -"sincronización vertical incluso si está desactivada." +"Sincronización vertical de pantalla. Tu sistema aún podría forzar la " +"sincronización vertical incluso si está deshabilitada." #: src/settings_translation_file.cpp msgid "Video driver" -msgstr "Driver de video" +msgstr "Controlador de video" #: src/settings_translation_file.cpp msgid "View bobbing factor" @@ -6803,11 +6832,11 @@ msgstr "Distancia de visión en nodos." #: src/settings_translation_file.cpp msgid "Viewing range" -msgstr "" +msgstr "Rango de visión" #: src/settings_translation_file.cpp msgid "Virtual joystick triggers Aux1 button" -msgstr "" +msgstr "Joystick virtual activa el botón Aux1" #: src/settings_translation_file.cpp msgid "Volume" @@ -6818,7 +6847,6 @@ msgid "Volume multiplier when the window is unfocused." msgstr "Multiplicador de volúmen cuando la ventana está desenfocada." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Volume of all sounds.\n" "Requires the sound system to be enabled." @@ -6827,14 +6855,12 @@ msgstr "" "Requiere que el sistema de sonido esté habilitado." #: src/settings_translation_file.cpp -#, fuzzy msgid "Volume when unfocused" -msgstr "FPS cuando está en segundo plano o pausado" +msgstr "Volumen en segundo plano" #: src/settings_translation_file.cpp -#, fuzzy msgid "Volumetric lighting" -msgstr "Iluminación suave" +msgstr "Iluminación volumétrica" #: src/settings_translation_file.cpp msgid "" @@ -6844,6 +6870,11 @@ msgid "" "Has no effect on 3D fractals.\n" "Range roughly -2 to 2." msgstr "" +"Coordenada W de la porción 3D generada de un fractal 4D.\n" +"Determina qué porción 3D de la forma 4D se genera.\n" +"Altera la forma del fractal.\n" +"No tiene efecto sobre los fractales 3D.\n" +"El rango es aproximadamente de -2 a 2." #: src/settings_translation_file.cpp msgid "Walking and flying speed, in nodes per second." @@ -6875,9 +6906,8 @@ msgid "Waving leaves" msgstr "Movimiento de hojas" #: src/settings_translation_file.cpp -#, fuzzy msgid "Waving liquids" -msgstr "Movimiento de líquidos" +msgstr "Oleaje en líquidos" #: src/settings_translation_file.cpp msgid "Waving liquids wave height" @@ -6905,6 +6935,10 @@ msgid "" "filtered in software, but some images are generated directly\n" "to hardware (e.g. render-to-texture for nodes in inventory)." msgstr "" +"Cuando gui_scaling_filter es verdadero, todas las imágenes del GUI\n" +"deben filtrarse por software, pero algunas imágenes se generan\n" +"directamente en el hardware (ej. render-to-texture para nodos en el " +"inventario)." #: src/settings_translation_file.cpp msgid "" @@ -6913,6 +6947,10 @@ msgid "" "to the old scaling method, for video drivers that don't\n" "properly support downloading textures back from hardware." msgstr "" +"Cuando gui_scaling_filter_txr2img es verdadero, copiar imágenes\n" +"del hardware al software para escalarlas. Cuando es falso,\n" +"vuelve al método de escalado anterior para controladores de video\n" +"que no admiten la descarga de texturas desde el hardware." #: src/settings_translation_file.cpp msgid "" @@ -6925,36 +6963,61 @@ msgid "" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." msgstr "" +"Al utilizar filtros bilineales/trilineales/anisotrópicos, las texturas de " +"baja resolución\n" +"pueden verse borrosas, por lo que se amplían automáticamente con " +"interpolación del\n" +"vecino más cercano para preservar la nitidez de los píxeles. Esto establece " +"el tamaño\n" +"mínimo de textura para las texturas ampliadas; valores más altos se ven más " +"nítidos,\n" +"pero requieren más memoria. Se recomienda usar potencias de 2. Esta " +"configuración\n" +"SÓLO se aplica si el filtrado bilineal/trilineal/anisotrópico está " +"habilitado.\n" +"Esto también se utiliza como el tamaño de textura del nodo base para el " +"escalado\n" +"automático de texturas alineadas con el mundo." #: src/settings_translation_file.cpp msgid "" "Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" +"Mostrar fondos de las etiquetas de forma predeterminada.\n" +"Los Mods aún podrían establecer un fondo." #: src/settings_translation_file.cpp msgid "Whether node texture animations should be desynchronized per mapblock." msgstr "" +"Si las animaciones de textura de nodo deben desincronizarse por bloque de " +"mapa." #: src/settings_translation_file.cpp msgid "" "Whether players are shown to clients without any range limit.\n" "Deprecated, use the setting player_transfer_distance instead." msgstr "" +"Si se muestran jugadores a los clientes sin ningún límite de rango.\n" +"Obsoleto, utilice la configuración player_transfer_distance en su lugar." #: src/settings_translation_file.cpp msgid "Whether the window is maximized." -msgstr "" +msgstr "Si la ventana está maximizada." #: src/settings_translation_file.cpp msgid "" "Whether to ask clients to reconnect after a (Lua) crash.\n" "Set this to true if your server is set up to restart automatically." msgstr "" +"Si se debe solicitar a los clientes que se vuelvan a conectar después de una " +"falla (Lua).\n" +"Establezca esta opción en verdadero si su servidor está configurado para " +"reiniciarse automáticamente." #: src/settings_translation_file.cpp msgid "Whether to fog out the end of the visible area." -msgstr "" +msgstr "Si se debe nublar el final del área visible." #: src/settings_translation_file.cpp msgid "" @@ -6963,18 +7026,23 @@ msgid "" "In-game, you can toggle the mute state with the mute key or by using the\n" "pause menu." msgstr "" +"Si deseas silenciar los sonidos. Puedes activar el sonido en cualquier " +"momento,\n" +"a menos que el sistema de sonido esté desactivado (enable_sound=false).\n" +"En el juego, puedes alternar el estado de silencio con la tecla de silencio " +"o\n" +"usando el menú de pausa." #: src/settings_translation_file.cpp msgid "" "Whether to show the client debug info (has the same effect as hitting F5)." msgstr "" +"Si desea mostrar la información de depuración del cliente (tiene el mismo " +"efecto que presionar F5)." #: src/settings_translation_file.cpp -#, fuzzy msgid "Width component of the initial window size." -msgstr "" -"Componente de altura del tamaño inicial de la ventana. Ignorado en el modo " -"de pantalla completa." +msgstr "Componente de ancho del tamaño inicial de la ventana." #: src/settings_translation_file.cpp msgid "Width of the selection box lines around nodes." @@ -6999,6 +7067,8 @@ msgid "" "World directory (everything in the world is stored here).\n" "Not needed if starting from the main menu." msgstr "" +"Directorio de mundo (todo lo que hay en el mundo se almacena aquí).\n" +"No es necesario si se inicia desde el menú principal." #: src/settings_translation_file.cpp msgid "World start time" @@ -7013,10 +7083,17 @@ msgid "" "See also texture_min_size.\n" "Warning: This option is EXPERIMENTAL!" msgstr "" +"Las texturas alineadas con el mundo pueden escalarse para abarcar\n" +"varios nodos. Sin embargo, es posible que el servidor no envíe la escala\n" +"que desea, especialmente si utiliza un paquete de texturas especialmente " +"diseñado;\n" +"con esta opción, el cliente intenta determinar la escala automáticamente en\n" +"función del tamaño de la textura. Consulte también texture_min_size.\n" +"Advertencia: ¡Esta opción es EXPERIMENTAL!" #: src/settings_translation_file.cpp msgid "World-aligned textures mode" -msgstr "" +msgstr "Modo de texturas alineadas con el mundo" #: src/settings_translation_file.cpp msgid "Y of flat ground." @@ -7027,6 +7104,8 @@ msgid "" "Y of mountain density gradient zero level. Used to shift mountains " "vertically." msgstr "" +"Y del gradiente de densidad de montañas de nivel cero. Se utiliza para mover " +"montañas verticalmente." #: src/settings_translation_file.cpp msgid "Y of upper limit of large caves." @@ -7044,6 +7123,12 @@ msgid "" "For a solid floatland layer, this controls the height of hills/mountains.\n" "Must be less than or equal to half the distance between the Y limits." msgstr "" +"Distancia Y sobre la cual las islas flotantes disminuyen de densidad total a " +"cero.\n" +"La disminución comienza a esta distancia desde el límite Y.\n" +"Para una capa sólida de islas flotantes, esto controla la altura de las " +"colinas/montañas.\n" +"Debe ser menor o igual a la mitad de la distancia entre los límites Y." #: src/settings_translation_file.cpp msgid "Y-level of average terrain surface." From ac224bd82c4008d0bb513e328d03c95fa04c6f55 Mon Sep 17 00:00:00 2001 From: Muhammad Rifqi Priyo Susanto Date: Sat, 5 Oct 2024 04:20:03 +0000 Subject: [PATCH 070/178] Translated using Weblate (Indonesian) Currently translated at 98.4% (1314 of 1335 strings) --- .../app/src/main/res/values-in/strings.xml | 2 + po/id/luanti.po | 91 ++++++++----------- 2 files changed, 42 insertions(+), 51 deletions(-) create mode 100644 android/app/src/main/res/values-in/strings.xml diff --git a/android/app/src/main/res/values-in/strings.xml b/android/app/src/main/res/values-in/strings.xml new file mode 100644 index 000000000..a6b3daec9 --- /dev/null +++ b/android/app/src/main/res/values-in/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/po/id/luanti.po b/po/id/luanti.po index d8cd40813..68f6afbf2 100644 --- a/po/id/luanti.po +++ b/po/id/luanti.po @@ -3,8 +3,9 @@ msgstr "" "Project-Id-Version: Indonesian (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-07-11 15:14+0200\n" -"PO-Revision-Date: 2024-03-29 15:47+0000\n" -"Last-Translator: Just Playing \n" +"PO-Revision-Date: 2024-10-06 05:16+0000\n" +"Last-Translator: Muhammad Rifqi Priyo Susanto " +"\n" "Language-Team: Indonesian \n" "Language: id\n" @@ -12,7 +13,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 5.5-dev\n" +"X-Generator: Weblate 5.8-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -71,9 +72,8 @@ msgid "Command not available: " msgstr "Perintah tidak tersedia: " #: builtin/common/chatcommands.lua -#, fuzzy msgid "Get help for commands (-t: output in chat)" -msgstr "Dapatkan bantuan untuk perintah-perintah" +msgstr "Dapatkan bantuan untuk perintah (-t: keluar di obrolan)" #: builtin/common/chatcommands.lua msgid "" @@ -83,9 +83,8 @@ msgstr "" "all' untuk menampilkan semuanya." #: builtin/common/chatcommands.lua -#, fuzzy msgid "[all | ] [-t]" -msgstr "[semua | ]" +msgstr "[semua | ] [-t]" #: builtin/fstk/ui.lua msgid "" @@ -185,7 +184,7 @@ msgstr "Mengunduh..." #: builtin/mainmenu/content/dlg_contentdb.lua msgid "Error getting dependencies for package" -msgstr "" +msgstr "Bermasalah dalam mengambil dependensi paket" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "Games" @@ -463,7 +462,7 @@ msgstr "Dekorasi" #: builtin/mainmenu/dlg_create_world.lua msgid "Desert temples" -msgstr "" +msgstr "Kuil gurun" #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." @@ -473,7 +472,7 @@ msgstr "Development Test ditujukan untuk para pengembang." msgid "" "Different dungeon variant generated in desert biomes (only if dungeons " "enabled)" -msgstr "" +msgstr "Variasi dungeon lain yang dibuat dalam bioma gurun" #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" @@ -1067,15 +1066,16 @@ msgid "Install games from ContentDB" msgstr "Pasang permainan dari ContentDB" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Minetest doesn't come with a game by default." -msgstr "Minetest Game tidak lagi dipasang secara bawaan" +msgstr "Minetest tidak berisi permainan secara bawaan." #: builtin/mainmenu/tab_local.lua msgid "" "Minetest is a game-creation platform that allows you to play many different " "games." msgstr "" +"Minetest adalah platform pembuatan permainan yang membuat Anda bisa bermain " +"banyak permainan berbeda." #: builtin/mainmenu/tab_local.lua msgid "New" @@ -1110,9 +1110,8 @@ msgid "Start Game" msgstr "Mulai Permainan" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "You need to install a game before you can create a world." -msgstr "Anda perlu pasang sebuah permainan sebelum pasang sebuah mod" +msgstr "Anda perlu pasang sebuah permainan sebelum bisa membuat dunia." #: builtin/mainmenu/tab_online.lua msgid "Address" @@ -1425,9 +1424,8 @@ msgid "Fog enabled" msgstr "Kabut dinyalakan" #: src/client/game.cpp -#, fuzzy msgid "Fog enabled by game or mod" -msgstr "Zum sedang dilarang oleh permainan atau mod" +msgstr "Kabut dinyalakan oleh permainan atau mod" #: src/client/game.cpp msgid "Game info:" @@ -1932,13 +1930,13 @@ msgid "Minimap in texture mode" msgstr "Peta mini mode tekstur" #: src/client/shader.cpp -#, fuzzy, c-format +#, c-format msgid "Failed to compile the \"%s\" shader." -msgstr "Gagal membuka laman web" +msgstr "Gagal mengompilasi shader \"%s\"." #: src/client/shader.cpp msgid "Shaders are enabled but GLSL is not supported by the driver." -msgstr "" +msgstr "Shader dinyalakan, tetapi GLSL tidak didukung oleh pengandar." #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp @@ -2135,16 +2133,15 @@ msgstr "tekan tombol" #: src/gui/guiOpenURL.cpp msgid "Open" -msgstr "" +msgstr "Buka" #: src/gui/guiOpenURL.cpp msgid "Open URL?" -msgstr "" +msgstr "Buka URL?" #: src/gui/guiOpenURL.cpp -#, fuzzy msgid "Unable to open URL" -msgstr "Gagal membuka laman web" +msgstr "Gagal membuka URL" #: src/gui/guiPasswordChange.cpp msgid "Change" @@ -2431,7 +2428,7 @@ msgstr "Lanjutan" #: src/settings_translation_file.cpp msgid "Allows liquids to be translucent." -msgstr "" +msgstr "Bolehkan cairan agak tembus pandang." #: src/settings_translation_file.cpp msgid "" @@ -3319,9 +3316,8 @@ msgstr "" "lain berarti menggunakan filter PCF." #: src/settings_translation_file.cpp -#, fuzzy msgid "Enable Post Processing" -msgstr "Pasca-Pengolahan" +msgstr "Nyalakan Pasca-Pengolahan" #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" @@ -3407,9 +3403,8 @@ msgstr "" "server baru, tetapi mungkin tidak mendukung semua fitur baru yang diharapkan." #: src/settings_translation_file.cpp -#, fuzzy msgid "Enable touchscreen" -msgstr "Layar Sentuh" +msgstr "Nyalakan layar sentuh" #: src/settings_translation_file.cpp msgid "" @@ -3462,16 +3457,17 @@ msgstr "Gunakan tembolok untuk facedir mesh yang diputar." #: src/settings_translation_file.cpp msgid "Enables debug and error-checking in the OpenGL driver." -msgstr "" +msgstr "Nyalakan awakutu dan pemeriksa-masalah dalam pengandar OpenGL." #: src/settings_translation_file.cpp msgid "Enables the post processing pipeline." -msgstr "" +msgstr "Nyalakan alur pasca-pengolahan." #: src/settings_translation_file.cpp msgid "" "Enables touchscreen mode, allowing you to play the game with a touchscreen." msgstr "" +"Nyalakan mode layar sentuh sehingga Anda bisa bermain dengan layar sentuh." #: src/settings_translation_file.cpp msgid "" @@ -4953,9 +4949,8 @@ msgid "Minimap scan height" msgstr "Ketinggian pemindaian peta mini" #: src/settings_translation_file.cpp -#, fuzzy msgid "Minimum dig repetition interval" -msgstr "Jeda waktu menaruh berulang" +msgstr "Jeda waktu menggali berulang minimum" #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." @@ -5026,9 +5021,8 @@ msgid "Mouse sensitivity multiplier." msgstr "Pengali kepekaan tetikus." #: src/settings_translation_file.cpp -#, fuzzy msgid "Movement threshold" -msgstr "Ambang batas gua besar" +msgstr "Ambang batas gerak" #: src/settings_translation_file.cpp msgid "Mud noise" @@ -5184,9 +5178,8 @@ msgstr "" "dibuka." #: src/settings_translation_file.cpp -#, fuzzy msgid "OpenGL debug" -msgstr "Awakutu pembuat peta" +msgstr "Awakutu OpenGL" #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." @@ -5320,13 +5313,12 @@ msgid "Proportion of large caves that contain liquid." msgstr "Perbandingan gua besar yang punya cairan." #: src/settings_translation_file.cpp -#, fuzzy msgid "Protocol version minimum" -msgstr "Versi protokol tidak sesuai. " +msgstr "Versi protokol minimum" #: src/settings_translation_file.cpp msgid "Punch gesture" -msgstr "" +msgstr "Gerakan memukul" #: src/settings_translation_file.cpp msgid "" @@ -5347,7 +5339,7 @@ msgstr "Masukan acak" #: src/settings_translation_file.cpp msgid "Random mod load order" -msgstr "" +msgstr "Acak urutan pemuatan mod" #: src/settings_translation_file.cpp msgid "Recent Chat Messages" @@ -5775,6 +5767,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Set to true to enable volumetric lighting effect (a.k.a. \"Godrays\")." msgstr "" +"Atur ke true untuk menyalakan efek pencahayaan volume (alias \"Godrays\")." #: src/settings_translation_file.cpp msgid "Set to true to enable waving leaves." @@ -5980,9 +5973,8 @@ msgid "Sound" msgstr "Suara" #: src/settings_translation_file.cpp -#, fuzzy msgid "Sound Extensions Blacklist" -msgstr "Daftar Hitam Flag ContentDB" +msgstr "Daftar Hitam Ekstensi Suara" #: src/settings_translation_file.cpp msgid "" @@ -6189,7 +6181,7 @@ msgstr "" msgid "" "The delay in milliseconds after which a touch interaction is considered a " "long tap." -msgstr "" +msgstr "Jeda dalam milidetik setelah ketuk/sentuh agar dianggap ketuk lama." #: src/settings_translation_file.cpp msgid "" @@ -6359,7 +6351,7 @@ msgstr "Noise 2D ketiga dari empat yang mengatur ketinggian bukit/gunung." #: src/settings_translation_file.cpp msgid "Threshold for long taps" -msgstr "" +msgstr "Ambang batas ketuk lama" #: src/settings_translation_file.cpp msgid "" @@ -6420,9 +6412,8 @@ msgid "Tradeoffs for performance" msgstr "Pertukaran untuk kinerja" #: src/settings_translation_file.cpp -#, fuzzy msgid "Translucent liquids" -msgstr "Cairan opak" +msgstr "Cairan agak tembus pandang" #: src/settings_translation_file.cpp msgid "Transparency Sorting Distance" @@ -6687,7 +6678,7 @@ msgstr "Volume" #: src/settings_translation_file.cpp msgid "Volume multiplier when the window is unfocused." -msgstr "" +msgstr "Pengali volume saat jendela tidak difokuskan." #: src/settings_translation_file.cpp msgid "" @@ -6698,14 +6689,12 @@ msgstr "" "Perlu menyalakan sistem suara." #: src/settings_translation_file.cpp -#, fuzzy msgid "Volume when unfocused" -msgstr "FPS saat dijeda atau tidak difokuskan" +msgstr "Volume saat tidak difokuskan" #: src/settings_translation_file.cpp -#, fuzzy msgid "Volumetric lighting" -msgstr "Pencahayaan halus" +msgstr "Pencahayaan volume" #: src/settings_translation_file.cpp msgid "" From e12f0c4216ccfab4b3c3d9dadacc924d05f9ab19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joaqu=C3=ADn=20Villalba?= Date: Sun, 6 Oct 2024 02:58:21 +0000 Subject: [PATCH 071/178] Translated using Weblate (Catalan) Currently translated at 21.7% (290 of 1335 strings) --- po/ca/luanti.po | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/po/ca/luanti.po b/po/ca/luanti.po index 05110e062..8ff60b0ff 100644 --- a/po/ca/luanti.po +++ b/po/ca/luanti.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Catalan (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-07-11 15:14+0200\n" -"PO-Revision-Date: 2023-11-20 05:12+0000\n" -"Last-Translator: Spurnita \n" +"PO-Revision-Date: 2024-10-06 05:16+0000\n" +"Last-Translator: Joaquín Villalba \n" "Language-Team: Catalan \n" "Language: ca\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.2\n" +"X-Generator: Weblate 5.8-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -3028,9 +3028,8 @@ msgid "ContentDB Max Concurrent Downloads" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "ContentDB URL" -msgstr "Continuar" +msgstr "URL de ContentDB" #: src/settings_translation_file.cpp #, fuzzy From 076c1d1623854915a5108bb882eebf895ff33f4b Mon Sep 17 00:00:00 2001 From: Soupborshfe5e4d4ba7c349aa Date: Sat, 5 Oct 2024 06:34:31 +0000 Subject: [PATCH 072/178] Translated using Weblate (Kazakh) Currently translated at 4.1% (56 of 1335 strings) --- po/kk/luanti.po | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/po/kk/luanti.po b/po/kk/luanti.po index b93a16b3b..ed4a5a512 100644 --- a/po/kk/luanti.po +++ b/po/kk/luanti.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Kazakh (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-07-11 15:14+0200\n" -"PO-Revision-Date: 2020-09-09 01:23+0000\n" -"Last-Translator: Fontan 030 \n" +"PO-Revision-Date: 2024-10-06 05:16+0000\n" +"Last-Translator: Soupborshfe5e4d4ba7c349aa \n" "Language-Team: Kazakh \n" "Language: kk\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.3-dev\n" +"X-Generator: Weblate 5.8-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -20,7 +20,7 @@ msgstr "" #: builtin/client/chatcommands.lua msgid "Empty command." -msgstr "" +msgstr "Бос пәрмен." #: builtin/client/chatcommands.lua #, fuzzy @@ -29,21 +29,19 @@ msgstr "Мәзірге шығу" #: builtin/client/chatcommands.lua msgid "Invalid command: " -msgstr "" +msgstr "Жарамсыз пәрмен: " #: builtin/client/chatcommands.lua msgid "Issued command: " -msgstr "" +msgstr "Берілген пәрмен: " #: builtin/client/chatcommands.lua -#, fuzzy msgid "List online players" -msgstr "Бір ойыншы" +msgstr "Онлайн ойыншыларды атап шығу" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Online players: " -msgstr "Бір ойыншы" +msgstr "Онлайн ойыншылар: " #: builtin/client/chatcommands.lua msgid "The out chat queue is now empty." @@ -51,15 +49,15 @@ msgstr "" #: builtin/client/chatcommands.lua msgid "This command is disabled by server." -msgstr "" +msgstr "Бұл пәрмен сервер арқылы алып тастаған." #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" -msgstr "" +msgstr "Тірілу" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "You died" -msgstr "" +msgstr "Сіз өліп қалдыңыз" #: builtin/common/chatcommands.lua msgid "Available commands:" @@ -71,11 +69,11 @@ msgstr "" #: builtin/common/chatcommands.lua msgid "Command not available: " -msgstr "" +msgstr "Қожетімсіз пәрмен: " #: builtin/common/chatcommands.lua msgid "Get help for commands (-t: output in chat)" -msgstr "" +msgstr "Пәрмендер бойынша көмек алыңыз (-t: чатқа шығару)" #: builtin/common/chatcommands.lua msgid "" From bf8655dfdc3085966bcda010d064e87fb860cd24 Mon Sep 17 00:00:00 2001 From: Pexauteau Santander Date: Sat, 5 Oct 2024 09:06:11 +0000 Subject: [PATCH 073/178] Translated using Weblate (Slovak) Currently translated at 96.7% (1291 of 1335 strings) --- po/sk/luanti.po | 71 +++++++++++++++++++++---------------------------- 1 file changed, 31 insertions(+), 40 deletions(-) diff --git a/po/sk/luanti.po b/po/sk/luanti.po index b32577c18..bb2279357 100644 --- a/po/sk/luanti.po +++ b/po/sk/luanti.po @@ -3,16 +3,16 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-07-11 15:14+0200\n" -"PO-Revision-Date: 2023-12-17 18:35+0000\n" -"Last-Translator: Marian \n" +"PO-Revision-Date: 2024-10-06 05:16+0000\n" +"Last-Translator: Pexauteau Santander \n" "Language-Team: Slovak \n" "Language: sk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -"X-Generator: Weblate 5.3\n" +"Plural-Forms: nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2);\n" +"X-Generator: Weblate 5.8-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -71,9 +71,8 @@ msgid "Command not available: " msgstr "Príkaz nie je k dispozícií: " #: builtin/common/chatcommands.lua -#, fuzzy msgid "Get help for commands (-t: output in chat)" -msgstr "Zobraz pomocníka k príkazom" +msgstr "Zobraz pomocníka k príkazom (-t: output in chat)" #: builtin/common/chatcommands.lua msgid "" @@ -83,9 +82,8 @@ msgstr "" "zobrazenie všetkého." #: builtin/common/chatcommands.lua -#, fuzzy msgid "[all | ] [-t]" -msgstr "[all | ]" +msgstr "[all | ] [-t]" #: builtin/fstk/ui.lua msgid "" @@ -148,13 +146,12 @@ msgid "Failed to download $1" msgstr "Nepodarilo sa stiahnuť $1" #: builtin/mainmenu/content/contentdb.lua -#, fuzzy msgid "" "Failed to extract \"$1\" (insufficient disk space, unsupported file type or " "broken archive)" msgstr "" -"Nepodarilo sa rozbaliť \"$1\" (nepodporovaný typ súboru, alebo poškodený " -"archív)" +"Nepodarilo sa rozbaliť \"$1\" (nedostatok miesta na disku, nepodporovaný typ " +"súboru, alebo poškodený archív)" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "" @@ -186,7 +183,7 @@ msgstr "Sťahujem..." #: builtin/mainmenu/content/dlg_contentdb.lua msgid "Error getting dependencies for package" -msgstr "" +msgstr "Chyba pri zisťovaní závislostí pre balíček" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "Games" @@ -448,7 +445,7 @@ msgstr "Ekosystémy" #: builtin/mainmenu/dlg_create_world.lua msgid "Caverns" -msgstr "Jaskyne" +msgstr "Veľké jaskyne" #: builtin/mainmenu/dlg_create_world.lua msgid "Caves" @@ -464,7 +461,7 @@ msgstr "Dekorácie" #: builtin/mainmenu/dlg_create_world.lua msgid "Desert temples" -msgstr "" +msgstr "Púštne chrámy" #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." @@ -1071,15 +1068,16 @@ msgid "Install games from ContentDB" msgstr "Inštaluj hry z ContentDB" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Minetest doesn't come with a game by default." -msgstr "Hra Minetest už nie je predvolene nainštalovaná" +msgstr "Hra Minetest už nie je štandardne dodávaná." #: builtin/mainmenu/tab_local.lua msgid "" "Minetest is a game-creation platform that allows you to play many different " "games." msgstr "" +"Minetest je platforma pre vytváranie hier, čo ti umožňuje hrať mnoho " +"rozličných hier." #: builtin/mainmenu/tab_local.lua msgid "New" @@ -1114,9 +1112,8 @@ msgid "Start Game" msgstr "Spusti hru" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "You need to install a game before you can create a world." -msgstr "Pred inštaláciou rozšírenia musíš nainštalovať hru" +msgstr "Pred vytvorením sveta musíš nainštalovať hru." #: builtin/mainmenu/tab_online.lua msgid "Address" @@ -1935,9 +1932,9 @@ msgid "Minimap in texture mode" msgstr "Minimapa v móde textúry" #: src/client/shader.cpp -#, fuzzy, c-format +#, c-format msgid "Failed to compile the \"%s\" shader." -msgstr "Nepodarilo sa otvoriť web stránku" +msgstr "Nepodarilo sa vytvoriť \"%s\" tieňovač." #: src/client/shader.cpp msgid "Shaders are enabled but GLSL is not supported by the driver." @@ -2478,11 +2475,11 @@ msgstr "Zverejni v zozname serverov." #: src/settings_translation_file.cpp msgid "Anti-aliasing scale" -msgstr "Rozsah vyhladzovania:" +msgstr "Rozsah vyhladzovania" #: src/settings_translation_file.cpp msgid "Antialiasing method" -msgstr "Metóda vyhladzovania:" +msgstr "Metóda vyhladzovania" #: src/settings_translation_file.cpp msgid "Append item name" @@ -2524,7 +2521,6 @@ msgid "Ask to reconnect after crash" msgstr "Ponúkni obnovu pripojenia po páde" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "At this distance the server will aggressively optimize which blocks are sent " "to\n" @@ -2536,18 +2532,17 @@ msgid "" "optimization.\n" "Stated in MapBlocks (16 nodes)." msgstr "" -"V tento vzdialenosti bude server agresívne optimalizovať, ktoré\n" -"bloky pošle klientovi.\n" +"V tejto vzdialenosti bude server agresívne optimalizovať, ktoré bloky pošle\n" +"klientom.\n" "Malé hodnoty potenciálne výrazne zvýšia výkon, za cenu viditeľných\n" -"chýb renderovania (niektoré bloky nebudú vyrenderované pod vodou a v " -"jaskyniach,\n" -"prípadne niekedy aj na súši).\n" -"Nastavenie hodnoty vyššej ako max_block_send_distance deaktivuje túto\n" +"chýb vykresľovania (niektoré bloky nebudú vygenerované pod vodou a v " +"jaskyniach).\n" +"Nastavenie tejto hodnoty vyššie než stanovuje max_block_send_distance " +"zablokuje túto\n" "optimalizáciu.\n" -"Udávane v blokoch mapy (16 kociek)." +"Uvedené v MapBlocks (16 kociek)." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "At this distance the server will perform a simpler and cheaper occlusion " "check.\n" @@ -2557,15 +2552,11 @@ msgid "" "This is especially useful for very large viewing range (upwards of 500).\n" "Stated in MapBlocks (16 nodes)." msgstr "" -"V tento vzdialenosti bude server agresívne optimalizovať, ktoré\n" -"bloky pošle klientovi.\n" -"Malé hodnoty potenciálne výrazne zvýšia výkon, za cenu viditeľných\n" -"chýb renderovania (niektoré bloky nebudú vyrenderované pod vodou a v " -"jaskyniach,\n" -"prípadne niekedy aj na súši).\n" -"Nastavenie hodnoty vyššej ako max_block_send_distance deaktivuje túto\n" -"optimalizáciu.\n" -"Udávane v blokoch mapy (16 kociek)." +"V tejto vzdialenosť server prevedie jednoduchšiu a nižšiu kontrolu oklúzie.\n" +"Menšie hodnoty možno zvýšia výkonnosť, ale za cenu dočasne viditeľných\n" +"vykreslených závad (chýbajúcich blokov).\n" +"Toto je zvlášť užitočné pri veľmi veľkých rozpätiach viditeľnost (nad 500).\n" +"Uvedené v MapBlocks (16 kociek)." #: src/settings_translation_file.cpp msgid "Audio" From 8ac443d650bcca090eb408e7953304c410e9b50d Mon Sep 17 00:00:00 2001 From: Luna Date: Sun, 6 Oct 2024 16:48:44 +0000 Subject: [PATCH 074/178] Translated using Weblate (Danish) Currently translated at 47.6% (636 of 1335 strings) --- po/da/luanti.po | 89 ++++++++++++++++++++++++------------------------- 1 file changed, 43 insertions(+), 46 deletions(-) diff --git a/po/da/luanti.po b/po/da/luanti.po index e1ddc1c39..2519986d6 100644 --- a/po/da/luanti.po +++ b/po/da/luanti.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Danish (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-07-11 15:14+0200\n" -"PO-Revision-Date: 2023-01-11 21:48+0000\n" -"Last-Translator: Kristian \n" +"PO-Revision-Date: 2024-10-06 23:41+0000\n" +"Last-Translator: Luna \n" "Language-Team: Danish \n" "Language: da\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.15.1-dev\n" +"X-Generator: Weblate 5.8-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -20,11 +20,11 @@ msgstr "Ryd chatkøen" #: builtin/client/chatcommands.lua msgid "Empty command." -msgstr "Tøm kommando,." +msgstr "Tøm kommando." #: builtin/client/chatcommands.lua msgid "Exit to main menu" -msgstr "Afslut til menu" +msgstr "Afslut til hovedmenu" #: builtin/client/chatcommands.lua msgid "Invalid command: " @@ -48,7 +48,7 @@ msgstr "Udgående chatkøe er nu tom." #: builtin/client/chatcommands.lua msgid "This command is disabled by server." -msgstr "Kommandoen er slået fra af serveren." +msgstr "Denne kommando er slået fra af serveren." #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -68,24 +68,22 @@ msgstr "Tilgængelige kommandoer: " #: builtin/common/chatcommands.lua msgid "Command not available: " -msgstr "Kommando ikke tilgængelig; " +msgstr "Kommando ikke tilgængelig: " #: builtin/common/chatcommands.lua -#, fuzzy msgid "Get help for commands (-t: output in chat)" -msgstr "Få hjælp til kommandoer" +msgstr "Få hjælp til kommandoer (-t: output i chat)" #: builtin/common/chatcommands.lua msgid "" "Use '.help ' to get more information, or '.help all' to list everything." msgstr "" -"Brug .'help' for at få mere information, eller 'help all' for at vise " +"Brug '.help ' for at få mere information eller '.help all' for at vise " "alt." #: builtin/common/chatcommands.lua -#, fuzzy msgid "[all | ] [-t]" -msgstr "[all | j" +msgstr "[all | ] [-t]" #: builtin/fstk/ui.lua msgid "" @@ -93,7 +91,7 @@ msgstr "" #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" -msgstr "Der skete en fejl i et Lua script:" +msgstr "Der skete en fejl i et Lua-script:" #: builtin/fstk/ui.lua msgid "An error occurred:" @@ -117,7 +115,7 @@ msgstr "Serveren har anmodet om at forbinde igen:" #: builtin/mainmenu/common.lua msgid "Protocol version mismatch. " -msgstr "Protokol versionerne matchede ikke. " +msgstr "Mismatch mellem protokolversioner. " #: builtin/mainmenu/common.lua msgid "Server enforces protocol version $1. " @@ -125,19 +123,19 @@ msgstr "Serveren kræver protokol version $1. " #: builtin/mainmenu/common.lua msgid "Server supports protocol versions between $1 and $2. " -msgstr "Serveren understøtter protokol versioner mellem $1 og $2. " +msgstr "Serveren understøtter protokolversioner mellem $1 og $2. " #: builtin/mainmenu/common.lua msgid "We only support protocol version $1." -msgstr "Vi understøtter kun protokol version $1." +msgstr "Vi understøtter kun protokolversion $1." #: builtin/mainmenu/common.lua msgid "We support protocol versions between version $1 and $2." -msgstr "Vi understøtter protokol versioner mellem $1 og $2." +msgstr "Vi understøtter protokolversioner mellem $1 og $2." #: builtin/mainmenu/content/contentdb.lua msgid "Error installing \"$1\": $2" -msgstr "Fejl ved installation af \"$1\":$2" +msgstr "Fejl ved installation af \"$1\": $2" #: builtin/mainmenu/content/contentdb.lua msgid "Failed to download \"$1\"" @@ -148,19 +146,19 @@ msgid "Failed to download $1" msgstr "Kunne ikke hente $1" #: builtin/mainmenu/content/contentdb.lua -#, fuzzy msgid "" "Failed to extract \"$1\" (insufficient disk space, unsupported file type or " "broken archive)" msgstr "" -"Kunne ikke pakke \"$1\" ud (ikke-understøttet filtype eller korrupt arkiv)" +"Kunne ikke udpakke \"$1\" (utilstrækkelig diskplads, ikke-understøttet " +"filtype eller beskadiget arkiv)" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "" "$1 downloading,\n" "$2 queued" msgstr "" -"$1 downloader.\n" +"$1 henter,\n" "$2 i kø" #: builtin/mainmenu/content/dlg_contentdb.lua @@ -173,11 +171,11 @@ msgstr "Alle pakker" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "Back to Main Menu" -msgstr "Tilbage til hovedmenuen" +msgstr "Tilbage til Hovedmenu" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "ContentDB er ikke tilgængelig når Minetest blev compileret uden cURL" +msgstr "ContentDB er ikke tilgængelig, når Minetest blev kompileret uden cURL" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "Downloading..." @@ -185,7 +183,7 @@ msgstr "Henter..." #: builtin/mainmenu/content/dlg_contentdb.lua msgid "Error getting dependencies for package" -msgstr "" +msgstr "Fejl ved hentning af afhængigheder for pakken" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "Games" @@ -207,12 +205,12 @@ msgstr "Mods" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "No packages could be retrieved" -msgstr "Der var ingen pakker at hente" +msgstr "Ingen pakker kunne hentes" #: builtin/mainmenu/content/dlg_contentdb.lua #: builtin/mainmenu/settings/dlg_settings.lua msgid "No results" -msgstr "Der er ingen resultater at vise" +msgstr "Ingen resultater" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "No updates" @@ -228,7 +226,7 @@ msgstr "Teksturpakker" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "The package $1 was not found." -msgstr "" +msgstr "Pakken $1 blev ikke fundet." #: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua msgid "Uninstall" @@ -240,7 +238,7 @@ msgstr "Opdater" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "Update All [$1]" -msgstr "Opdater alle [$1]" +msgstr "Opdater Alle [$1]" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "View more information in a web browser" @@ -248,7 +246,7 @@ msgstr "Se mere information i en webbrowser" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "You need to install a game before you can install a mod" -msgstr "" +msgstr "Du skal installere et spil, før du kan installere en mod" #: builtin/mainmenu/content/dlg_install.lua msgid "$1 and $2 dependencies will be installed." @@ -256,7 +254,7 @@ msgstr "Påkrævet grundlag for $1 og $2 vl blive installeret." #: builtin/mainmenu/content/dlg_install.lua msgid "$1 by $2" -msgstr "$1 med $2" +msgstr "$1 af $2" #: builtin/mainmenu/content/dlg_install.lua msgid "$1 required dependencies could not be found." @@ -286,7 +284,7 @@ msgstr "Basisspil:" #: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp #: src/gui/guiPasswordChange.cpp msgid "Cancel" -msgstr "Anuller" +msgstr "Annuller" #: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua @@ -295,11 +293,11 @@ msgstr "Afhængigheder:" #: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" -msgstr "Installér $1" +msgstr "Installer $1" #: builtin/mainmenu/content/dlg_install.lua msgid "Install missing dependencies" -msgstr "Installér manglende grundlag" +msgstr "Installer manglende afhængigheder" #: builtin/mainmenu/content/dlg_install.lua msgid "Not found" @@ -307,7 +305,7 @@ msgstr "Ikke fundet" #: builtin/mainmenu/content/dlg_install.lua msgid "Please check that the base game is correct." -msgstr "Kontrollér venlist, at basisspillet er korrekt." +msgstr "Tjek venligst, at basisspillet er korrekt." #: builtin/mainmenu/content/dlg_overwrite.lua msgid "\"$1\" already exists. Would you like to overwrite it?" @@ -335,7 +333,7 @@ msgstr "Installation: Kunne ikke finde passende mappenavn til $1" #: builtin/mainmenu/content/pkgmgr.lua msgid "Unable to find a valid mod, modpack, or game" -msgstr "Kan ikke finde en gyldigt mod, samling af mods eller spil" +msgstr "Kan ikke finde en gyldig mod, modpakke eller spil" #: builtin/mainmenu/content/pkgmgr.lua msgid "Unable to install a $1 as a $2" @@ -347,7 +345,7 @@ msgstr "Kan ikke installere $1 som en teksturpakke" #: builtin/mainmenu/dlg_config_world.lua msgid "(Enabled, has error)" -msgstr "(Slået til, fejler)" +msgstr "(Aktiveret. Har fejl)" #: builtin/mainmenu/dlg_config_world.lua msgid "(Unsatisfied)" @@ -359,7 +357,7 @@ msgstr "Deaktivér alle" #: builtin/mainmenu/dlg_config_world.lua msgid "Disable modpack" -msgstr "Deaktiver samlingen af mods" +msgstr "Deaktivér modpakke" #: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" @@ -367,7 +365,7 @@ msgstr "Aktivér alle" #: builtin/mainmenu/dlg_config_world.lua msgid "Enable modpack" -msgstr "Aktiver samlingen af mods" +msgstr "Aktivér modpakke" #: builtin/mainmenu/dlg_config_world.lua msgid "" @@ -379,7 +377,7 @@ msgstr "" #: builtin/mainmenu/dlg_config_world.lua msgid "Find More Mods" -msgstr "Find flere mods" +msgstr "Find Flere Mods" #: builtin/mainmenu/dlg_config_world.lua msgid "Mod:" @@ -391,7 +389,7 @@ msgstr "Ingen (valgfrie) afhængigheder" #: builtin/mainmenu/dlg_config_world.lua msgid "No game description provided." -msgstr "Der er ikke nogen beskrivelse af tilgængelig af det valgte spil." +msgstr "Ingen beskrivelse af spillet." #: builtin/mainmenu/dlg_config_world.lua msgid "No hard dependencies" @@ -399,12 +397,11 @@ msgstr "Ingen tvungne grundlag" #: builtin/mainmenu/dlg_config_world.lua msgid "No modpack description provided." -msgstr "" -"Der er ikke nogen beskrivelse af tilgængelig af den valgte samling af mods." +msgstr "Ingen beskrivelse af modpakken." #: builtin/mainmenu/dlg_config_world.lua msgid "No optional dependencies" -msgstr "Ingen valgfrie grundlag" +msgstr "Ingen valgfrie afhængigheder" #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Optional dependencies:" @@ -426,7 +423,7 @@ msgstr "aktiveret" #: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" -msgstr "En verden med navnet »$1« findes allerede" +msgstr "En verden ved navn \"$1\" findes allerede" #: builtin/mainmenu/dlg_create_world.lua msgid "Additional terrain" @@ -462,7 +459,7 @@ msgstr "Skab" #: builtin/mainmenu/dlg_create_world.lua msgid "Decorations" -msgstr "Udsmykninger" +msgstr "Dekorationer" #: builtin/mainmenu/dlg_create_world.lua msgid "Desert temples" @@ -512,7 +509,7 @@ msgstr "Øger fugtigheden omkring floder" #: builtin/mainmenu/dlg_create_world.lua msgid "Install another game" -msgstr "Installér et andet spil" +msgstr "Installer et andet spil" #: builtin/mainmenu/dlg_create_world.lua msgid "Lakes" From 135f30913a3b873209a6cef3f37bab01c4f4e309 Mon Sep 17 00:00:00 2001 From: ludemys Date: Sun, 6 Oct 2024 19:58:21 +0000 Subject: [PATCH 075/178] Translated using Weblate (Spanish) Currently translated at 100.0% (1335 of 1335 strings) --- po/es/luanti.po | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/po/es/luanti.po b/po/es/luanti.po index 67d499f64..ba2e02efd 100644 --- a/po/es/luanti.po +++ b/po/es/luanti.po @@ -4,7 +4,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-07-11 15:14+0200\n" "PO-Revision-Date: 2024-10-06 23:41+0000\n" -"Last-Translator: Joaquín Villalba \n" +"Last-Translator: ludemys \n" "Language-Team: Spanish \n" "Language: es\n" @@ -4921,8 +4921,8 @@ msgid "" "Maximum number of blocks to be queued that are to be generated.\n" "This limit is enforced per player." msgstr "" -"Número máximo de bloques para ser añadidos a la cola para ser generados.\n" -"Este límite se cumple por jugador." +"Número máximo de bloques para ser añadidos a la cola que deben generarse.\n" +"Este límite se aplica por jugador." #: src/settings_translation_file.cpp msgid "" @@ -4931,7 +4931,7 @@ msgid "" msgstr "" "Número máximo de bloques para ser añadidos a a cola para cargarse desde un " "archivo.\n" -"Este límite se cumple por jugador." +"Este límite se aplica por jugador." #: src/settings_translation_file.cpp msgid "" @@ -4948,8 +4948,7 @@ msgid "" "Maximum number of mapblocks for client to be kept in memory.\n" "Set to -1 for unlimited amount." msgstr "" -"Número máximo de bloques de mapa para el cliente para ser mantenidos en la " -"memoria.\n" +"Número máximo de bloques de mapa por cliente para guardarse en memoria.\n" "Establecer a -1 para cantidad ilimitada." #: src/settings_translation_file.cpp From 28c2e587e5b89400f271380ce02768ac1fb80060 Mon Sep 17 00:00:00 2001 From: Jynweythek Vordhosbn Date: Sun, 6 Oct 2024 19:53:34 +0000 Subject: [PATCH 076/178] Translated using Weblate (Spanish) Currently translated at 100.0% (1335 of 1335 strings) --- po/es/luanti.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/po/es/luanti.po b/po/es/luanti.po index ba2e02efd..9f6c07e63 100644 --- a/po/es/luanti.po +++ b/po/es/luanti.po @@ -4,7 +4,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-07-11 15:14+0200\n" "PO-Revision-Date: 2024-10-06 23:41+0000\n" -"Last-Translator: ludemys \n" +"Last-Translator: Jynweythek Vordhosbn \n" "Language-Team: Spanish \n" "Language: es\n" @@ -4762,7 +4762,7 @@ msgstr "Intervalo de guardado de mapa" #: src/settings_translation_file.cpp msgid "Map shadows update frames" -msgstr "Intervalo de actualización de las sombras del mapa" +msgstr "Cuadros de actualización de las sombras del mapa" #: src/settings_translation_file.cpp msgid "Mapblock limit" From 1fc4f22a7ac5a503a775d3358025c74120560129 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Sun, 6 Oct 2024 21:00:45 +0000 Subject: [PATCH 077/178] Translated using Weblate (Spanish) Currently translated at 100.0% (1335 of 1335 strings) --- po/es/luanti.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/po/es/luanti.po b/po/es/luanti.po index 9f6c07e63..dffe43490 100644 --- a/po/es/luanti.po +++ b/po/es/luanti.po @@ -4,7 +4,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-07-11 15:14+0200\n" "PO-Revision-Date: 2024-10-06 23:41+0000\n" -"Last-Translator: Jynweythek Vordhosbn \n" +"Last-Translator: Jordan Irwin \n" "Language-Team: Spanish \n" "Language: es\n" @@ -5337,7 +5337,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Pause on lost window focus" -msgstr "Pausar cuando se pierda el foco de la ventana" +msgstr "Pausar al perder el foco de la ventana" #: src/settings_translation_file.cpp msgid "Per-player limit of queued blocks load from disk" From d37e6bc1de7672e93df9f382e56b2ee5cb123563 Mon Sep 17 00:00:00 2001 From: joserene-007 Date: Sun, 6 Oct 2024 21:02:53 +0000 Subject: [PATCH 078/178] Translated using Weblate (Spanish) Currently translated at 100.0% (1335 of 1335 strings) --- po/es/luanti.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/po/es/luanti.po b/po/es/luanti.po index dffe43490..c5d19df2d 100644 --- a/po/es/luanti.po +++ b/po/es/luanti.po @@ -4,7 +4,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-07-11 15:14+0200\n" "PO-Revision-Date: 2024-10-06 23:41+0000\n" -"Last-Translator: Jordan Irwin \n" +"Last-Translator: joserene-007 \n" "Language-Team: Spanish \n" "Language: es\n" @@ -5520,7 +5520,7 @@ msgstr "Extensión del ruido de las crestas de las montañas" #: src/settings_translation_file.cpp msgid "Ridge noise" -msgstr "Ruido en cresta" +msgstr "Ruido en la cresta" #: src/settings_translation_file.cpp msgid "Ridge underwater noise" From 5ab12d33a493a09950bbbdf0512c8ddacefd97ef Mon Sep 17 00:00:00 2001 From: gallegonovato Date: Sun, 6 Oct 2024 23:41:23 +0000 Subject: [PATCH 079/178] Translated using Weblate (Spanish) Currently translated at 100.0% (1335 of 1335 strings) --- po/es/luanti.po | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/po/es/luanti.po b/po/es/luanti.po index c5d19df2d..25a5d2c35 100644 --- a/po/es/luanti.po +++ b/po/es/luanti.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Spanish (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-07-11 15:14+0200\n" -"PO-Revision-Date: 2024-10-06 23:41+0000\n" -"Last-Translator: joserene-007 \n" +"PO-Revision-Date: 2024-10-12 03:08+0000\n" +"Last-Translator: gallegonovato \n" "Language-Team: Spanish \n" "Language: es\n" @@ -5453,7 +5453,7 @@ msgstr "Orden aleatorio de carga de mods" #: src/settings_translation_file.cpp msgid "Recent Chat Messages" -msgstr "Mensajes de Chat Recientes" +msgstr "Mensajes recientes del chat" #: src/settings_translation_file.cpp msgid "Regular font path" @@ -5643,9 +5643,9 @@ msgid "" "1 means worst quality; 100 means best quality.\n" "Use 0 for default quality." msgstr "" -"Calidad de captura de pantalla. Solo se utiliza para formato JPEG.\n" +"Calidad de la captura de pantalla. Solo se utiliza para el formato JPEG.\n" "1 significa la peor calidad; 100 significa la mejor calidad.\n" -"Utilice 0 para la calidad predeterminada." +"Utilice 0 para la calidad por defecto." #: src/settings_translation_file.cpp msgid "Screenshots" @@ -5653,7 +5653,7 @@ msgstr "Capturas de pantalla" #: src/settings_translation_file.cpp msgid "Seabed noise" -msgstr "Ruido del lecho marino" +msgstr "Ruido del fondo marino" #: src/settings_translation_file.cpp msgid "Second of 4 2D noises that together define hill/mountain range height." @@ -6052,7 +6052,7 @@ msgstr "Número máximo de cuevas pequeñas" #: src/settings_translation_file.cpp msgid "Small cave minimum number" -msgstr "Número mínimo de cuevas pequeñas" +msgstr "Cantidad mínima de cuevas pequeñas" #: src/settings_translation_file.cpp msgid "Small-scale humidity variation for blending biomes on borders." @@ -6730,9 +6730,10 @@ msgid "" "If both bilinear and trilinear filtering are enabled, trilinear filtering\n" "is applied." msgstr "" -"Usar filtro trilinear al escalar texturas.\n" -"Si tanto los filtros bilinear y trilinear están activos, se aplica\n" -"el filtro trilinear." +"Utilice filtrado trilineal al escalar texturas.\n" +"Si están habilitados tanto el filtrado bilineal como el trilineal, el " +"filtrado trilineal\n" +"se aplica." #: src/settings_translation_file.cpp msgid "" @@ -6740,9 +6741,9 @@ msgid "" "If enabled, virtual joystick will also tap \"Aux1\" button when out of main " "circle." msgstr "" -"Usar el joystick virtual para activar el botón \"Aux1\".\n" -"Si está activado, el joystick virtual también activará el botón \"Aux1\" al " -"deslizarse fuera del círculo." +"Utilice el joystick virtual para activar el botón \"Aux1\".\n" +"Si está activado, el joystick virtual también pulsará el botón \"Aux1\" " +"cuando esté fuera del círculo principal." #: src/settings_translation_file.cpp msgid "User Interfaces" @@ -6814,8 +6815,8 @@ msgid "" "Vertical screen synchronization. Your system may still force VSync on even " "if this is disabled." msgstr "" -"Sincronización vertical de pantalla. Tu sistema aún podría forzar la " -"sincronización vertical incluso si está deshabilitada." +"Sincronización vertical de pantalla. El sistema puede forzar VSync aunque " +"esté desactivado." #: src/settings_translation_file.cpp msgid "Video driver" From 934f5ca87efbfff2bcd1a4846fce1e994254357e Mon Sep 17 00:00:00 2001 From: Hugo Date: Mon, 7 Oct 2024 16:07:53 +0000 Subject: [PATCH 080/178] Translated using Weblate (Esperanto) Currently translated at 85.3% (1139 of 1335 strings) --- po/eo/luanti.po | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/po/eo/luanti.po b/po/eo/luanti.po index 19c22d4c6..1ad384905 100644 --- a/po/eo/luanti.po +++ b/po/eo/luanti.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Esperanto (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-07-11 15:14+0200\n" -"PO-Revision-Date: 2024-06-23 19:09+0000\n" -"Last-Translator: Va Milushnikov \n" +"PO-Revision-Date: 2024-10-08 00:16+0000\n" +"Last-Translator: Hugo \n" "Language-Team: Esperanto \n" "Language: eo\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.6-rc\n" +"X-Generator: Weblate 5.8-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -1077,6 +1077,8 @@ msgid "" "Minetest is a game-creation platform that allows you to play many different " "games." msgstr "" +"Minetest estas lud-krea platformo, kiu permesas vin ludi multajn malsamajn " +"ludojn." #: builtin/mainmenu/tab_local.lua msgid "New" @@ -2134,11 +2136,11 @@ msgstr "premi klavon" #: src/gui/guiOpenURL.cpp msgid "Open" -msgstr "" +msgstr "Malfermi" #: src/gui/guiOpenURL.cpp msgid "Open URL?" -msgstr "" +msgstr "Ĉu malfermi URL?" #: src/gui/guiOpenURL.cpp #, fuzzy @@ -2431,7 +2433,7 @@ msgstr "Specialaj" #: src/settings_translation_file.cpp msgid "Allows liquids to be translucent." -msgstr "" +msgstr "Permesas al likvaĵoj esti travideblaj." #: src/settings_translation_file.cpp msgid "" From c02c855b734f77bcb666811459008343779b5b0b Mon Sep 17 00:00:00 2001 From: alasa ala Date: Thu, 10 Oct 2024 02:23:28 +0000 Subject: [PATCH 081/178] Translated using Weblate (Korean) Currently translated at 52.2% (698 of 1335 strings) --- po/ko/luanti.po | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/po/ko/luanti.po b/po/ko/luanti.po index 09b215697..383476ad2 100644 --- a/po/ko/luanti.po +++ b/po/ko/luanti.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Korean (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-07-11 15:14+0200\n" -"PO-Revision-Date: 2024-01-11 09:06+0000\n" -"Last-Translator: dog \n" +"PO-Revision-Date: 2024-10-10 21:04+0000\n" +"Last-Translator: alasa ala \n" "Language-Team: Korean \n" "Language: ko\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 5.4-dev\n" +"X-Generator: Weblate 5.8-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -5555,7 +5555,7 @@ msgstr "쉐이더 경로" #: src/settings_translation_file.cpp msgid "Shaders" -msgstr "쉐이더" +msgstr "셰이더" #: src/settings_translation_file.cpp #, fuzzy From 5e17ce8c81afc67249985b1196fb32a3d5b6ab0e Mon Sep 17 00:00:00 2001 From: "Yaya - Nurul Azeera Hidayah @ Muhammad Nur Hidayat Yasuyoshi" Date: Wed, 16 Oct 2024 01:51:30 +0000 Subject: [PATCH 082/178] Translated using Weblate (Malay) Currently translated at 100.0% (1335 of 1335 strings) --- .../app/src/main/res/values-ms/strings.xml | 2 + po/ms/luanti.po | 254 +++++++++--------- 2 files changed, 134 insertions(+), 122 deletions(-) create mode 100644 android/app/src/main/res/values-ms/strings.xml diff --git a/android/app/src/main/res/values-ms/strings.xml b/android/app/src/main/res/values-ms/strings.xml new file mode 100644 index 000000000..a6b3daec9 --- /dev/null +++ b/android/app/src/main/res/values-ms/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/po/ms/luanti.po b/po/ms/luanti.po index 0eefd8642..10fb8550a 100644 --- a/po/ms/luanti.po +++ b/po/ms/luanti.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: Malay (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-07-11 15:14+0200\n" -"PO-Revision-Date: 2023-12-04 21:13+0000\n" +"PO-Revision-Date: 2024-10-17 02:15+0000\n" "Last-Translator: \"Yaya - Nurul Azeera Hidayah @ Muhammad Nur Hidayat " "Yasuyoshi\" \n" "Language-Team: Malay ] [-t]" -msgstr "[all | ]" +msgstr "[all | ] [-t]" #: builtin/fstk/ui.lua msgid "" @@ -149,12 +147,12 @@ msgid "Failed to download $1" msgstr "Gagal memuat turun $1" #: builtin/mainmenu/content/contentdb.lua -#, fuzzy msgid "" "Failed to extract \"$1\" (insufficient disk space, unsupported file type or " "broken archive)" msgstr "" -"Gagal untuk menyari \"$1\" (jenis fail tidak disokong atau arkib rosak)" +"Gagak untuk menyari \"$1\" (ruang cakera tidak cukup, jenis fail tidak " +"disokong atau arkib rosak)" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "" @@ -186,7 +184,7 @@ msgstr "Memuat turun..." #: builtin/mainmenu/content/dlg_contentdb.lua msgid "Error getting dependencies for package" -msgstr "" +msgstr "Ralat ketika mendapatkan kebergantungan untuk pakej" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "Games" @@ -464,7 +462,7 @@ msgstr "Hiasan" #: builtin/mainmenu/dlg_create_world.lua msgid "Desert temples" -msgstr "" +msgstr "Kuil gurun" #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." @@ -475,6 +473,8 @@ msgid "" "Different dungeon variant generated in desert biomes (only if dungeons " "enabled)" msgstr "" +"Varian kurungan bawah tanah berlainan yang dijana dalam biom gurun (hanya " +"jika sifat kurungan bawah tanah dibolehkan)" #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" @@ -1069,15 +1069,17 @@ msgid "Install games from ContentDB" msgstr "Pasangkan permainan daripada ContentDB" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Minetest doesn't come with a game by default." -msgstr "Minetest Game sudah tidak dipasang secara lalainya" +msgstr "" +"Minetest sudah tidak didatangkan dengan sebuah permainan secara lalainya." #: builtin/mainmenu/tab_local.lua msgid "" "Minetest is a game-creation platform that allows you to play many different " "games." msgstr "" +"Minetest ialah platform penciptaan permainan yang membolehkan anda memainkan " +"pelbagai permainan yang berlainan." #: builtin/mainmenu/tab_local.lua msgid "New" @@ -1112,9 +1114,10 @@ msgid "Start Game" msgstr "Mulakan Permainan" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "You need to install a game before you can create a world." -msgstr "Anda perlu pasang permainan sebelum anda boleh pasang mods" +msgstr "" +"Anda perlu memasang sebuah permainan sebelum anda boleh mencipta sebuah " +"dunia." #: builtin/mainmenu/tab_online.lua msgid "Address" @@ -1329,7 +1332,6 @@ msgid "Continue" msgstr "Teruskan" #: src/client/game.cpp -#, fuzzy msgid "" "Controls:\n" "No menu open:\n" @@ -1347,14 +1349,14 @@ msgstr "" "Kawalan:\n" "Tiada menu dibuka:\n" "- tarik dengan jari: lihat sekeliling\n" -"- ketik: letak/guna\n" -"- ketik dan tahan: gali/ketuk/guna\n" +"- ketik: letak/ketuk/guna (lalai)\n" +"- ketik dan tahan: gali/guna (lalai)\n" "Menu/inventori dibuka:\n" "- ketik berganda (di luar):\n" " --> tutup\n" "- sentuh tindanan, sentuh slot:\n" " --> pindah tindanan\n" -"- sentuh & seret, ketik dengan jari kedua\n" +"- sentuh&seret, ketik dengan jari ke2\n" " --> letak satu item dalam slot\n" #: src/client/game.cpp @@ -1430,9 +1432,8 @@ msgid "Fog enabled" msgstr "Kabut dibolehkan" #: src/client/game.cpp -#, fuzzy msgid "Fog enabled by game or mod" -msgstr "Zum dilumpuhkan oleh permainan atau mods ketika ini" +msgstr "Kabut dibolehkan oleh permainan atau mods" #: src/client/game.cpp msgid "Game info:" @@ -1464,7 +1465,7 @@ msgstr "Peta mini dilumpuhkan oleh permainan atau mods ketika ini" #: src/client/game.cpp msgid "Multiplayer" -msgstr "Pemain Ramai" +msgstr "Multipemain" #: src/client/game.cpp msgid "Noclip mode disabled" @@ -1516,7 +1517,7 @@ msgstr "Sedang menutup..." #: src/client/game.cpp msgid "Singleplayer" -msgstr "Pemain Perseorangan" +msgstr "Ekapemain" #: src/client/game.cpp msgid "Sound Volume" @@ -1936,13 +1937,13 @@ msgid "Minimap in texture mode" msgstr "Peta mini dalam mod tekstur" #: src/client/shader.cpp -#, fuzzy, c-format +#, c-format msgid "Failed to compile the \"%s\" shader." -msgstr "Gagal buka laman sesawang" +msgstr "Gagal untuk kompil pembayang \"%s\"." #: src/client/shader.cpp msgid "Shaders are enabled but GLSL is not supported by the driver." -msgstr "" +msgstr "Pembayang dibolehkan tetapi GLSL tidak disokong oleh pemacu." #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp @@ -2139,16 +2140,15 @@ msgstr "tekan kekunci" #: src/gui/guiOpenURL.cpp msgid "Open" -msgstr "" +msgstr "Buka" #: src/gui/guiOpenURL.cpp msgid "Open URL?" -msgstr "" +msgstr "Buka URL?" #: src/gui/guiOpenURL.cpp -#, fuzzy msgid "Unable to open URL" -msgstr "Gagal buka laman sesawang" +msgstr "Gagal buka URL" #: src/gui/guiPasswordChange.cpp msgid "Change" @@ -2437,7 +2437,7 @@ msgstr "Lanjutan" #: src/settings_translation_file.cpp msgid "Allows liquids to be translucent." -msgstr "" +msgstr "Membolehkan cecair untuk menjadi lut cahaya." #: src/settings_translation_file.cpp msgid "" @@ -2507,6 +2507,14 @@ msgid "" "With OpenGL ES, dithering only works if the shader supports high\n" "floating-point precision and it may have a higher performance impact." msgstr "" +"Menerapkan penditeran untuk mengurangkan artifak penjalur warna\n" +"Penditeran meningkatkan saiz tangkap layar yang dimampatkan secara\n" +"tak hilang dengan ketara dan ia tidak berfungsi dengan betul sekiranya\n" +"paparan atau sistem pengoperasian melakukan penditeran tambahan\n" +"atau sekiranya saluran warna tidak dikuantumkan ke 8 bit.\n" +"Dengan OpenGL ES, penditeran hanya berfungsi sekiranya pembayang menyokong\n" +"ketepatan titik terapung dan ia boleh menyebabkan hentaman prestasi yang " +"lebih tinggi." #: src/settings_translation_file.cpp msgid "Arm inertia" @@ -2525,7 +2533,6 @@ msgid "Ask to reconnect after crash" msgstr "Minta sambung semula selepas keruntuhan" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "At this distance the server will aggressively optimize which blocks are sent " "to\n" @@ -2537,19 +2544,19 @@ msgid "" "optimization.\n" "Stated in MapBlocks (16 nodes)." msgstr "" -"Pada jarak ini, pelayan akan mengoptimumkan secara agresif blok yang mana\n" -"akan dihantar kepada klien.\n" -"Nilai lebih kecil berkemungkinan boleh meningkatkan prestasi dengan banyak,\n" -"dengan mengorbankan glic kemas gabung tampak (sesetengah blok tidak akan\n" -"dikemas gabung di bawah air dan dalam gua, kekadang turut berlaku atas " -"daratan).\n" -"Menetapkan nilai ini lebih besar daripada nilai max_block_send_distance " -"akan\n" -"melumpuhkan pengoptimuman ini.\n" -"Nyatakan dalam unit blokpeta (16 nod)." +"Pada jarak ini pelayan akan mengoptimumkan secara agresif blok mana yang " +"akan dihantar\n" +"ke klien.\n" +"Nilai lebih kecil berkemungkinan boleh meningkatkan prestasi dengan banyak, " +"dengan mengorbankan\n" +"glic kemas gabung tampak (sesetengah blok tidak akan dikemas gabung dengan " +"betul di dalam gua).\n" +"Menetapkan nilai ini lebih besar daripada nilai max_block_send_distance akan " +"melumpuhkan\n" +"pengoptimuman ini.\n" +"Dinyatakan dalam unit BlokPeta (16 nod)." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "At this distance the server will perform a simpler and cheaper occlusion " "check.\n" @@ -2559,16 +2566,14 @@ msgid "" "This is especially useful for very large viewing range (upwards of 500).\n" "Stated in MapBlocks (16 nodes)." msgstr "" -"Pada jarak ini, pelayan akan mengoptimumkan secara agresif blok yang mana\n" -"akan dihantar kepada klien.\n" -"Nilai lebih kecil berkemungkinan boleh meningkatkan prestasi dengan banyak,\n" -"dengan mengorbankan glic kemas gabung tampak (sesetengah blok tidak akan\n" -"dikemas gabung di bawah air dan dalam gua, kekadang turut berlaku atas " -"daratan).\n" -"Menetapkan nilai ini lebih besar daripada nilai max_block_send_distance " -"akan\n" -"melumpuhkan pengoptimuman ini.\n" -"Nyatakan dalam unit blokpeta (16 nod)." +"Pada jarak ini pelayan akan melakukan pemeriksaan oklusi yang lebih mudah " +"dan murah.\n" +"Nilai lebih kecil berkemungkinan boleh meningkatkan prestasi, dengan " +"mengorbankan\n" +"glic kemas gabung yang tampak secara sementara (blok menghilang).\n" +"Ini berguna khususnya untuk jarak pandangan yang sangat besar (melebihi 500)." +"\n" +"Dinyatakan dalam unit BlokPeta (16 nod)." #: src/settings_translation_file.cpp msgid "Audio" @@ -2631,9 +2636,8 @@ msgid "Biome noise" msgstr "Hingar biom" #: src/settings_translation_file.cpp -#, fuzzy msgid "Block cull optimize distance" -msgstr "Jarak optimum penghantaran blok" +msgstr "Jarak untuk mengoptimumkan penakaian blok" #: src/settings_translation_file.cpp msgid "Block send optimize distance" @@ -2856,6 +2860,10 @@ msgid "" "Comma-separated list of AL and ALC extensions that should not be used.\n" "Useful for testing. See al_extensions.[h,cpp] for details." msgstr "" +"Senarai berpisahkan koma bagi sambungan AL dan ALC yang tidak patut " +"digunakan.\n" +"Berguna untuk percubaan. Sila lihat al_extensions.[h,cpp] untuk maklumat " +"lanjut." #: src/settings_translation_file.cpp msgid "" @@ -3079,7 +3087,6 @@ msgstr "" "PCF atau cakera Poisson tetapi turut menggunakan lebih banyak sumber." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Define the oldest clients allowed to connect.\n" "Older clients are compatible in the sense that they will not crash when " @@ -3091,11 +3098,16 @@ msgid "" "Minetest still enforces its own internal minimum, and enabling\n" "strict_protocol_version_checking will effectively override this." msgstr "" -"Bolehkan tetapan untuk melarang klien lama daripada menyambung.\n" -"Klien lama masih sesuai digunakan jika mereka tidak runtuh (crash) apabila " -"cuba untuk menyambung ke pelayan baharu,\n" -"tetapi mereka mungkin tidak mampu menyokong semua sifat baharu yang anda " -"sangkakan." +"Mentakrifkan klien paling lama yang dibenarkan untuk menyambung.\n" +"Klien lebih lama itu serasi dari segi di mana mereka tidak akan runtuh " +"apabila menyambung\n" +"ke pelayan baharu, tetapi mereka mungkin tidak sokong semua sifat baharu " +"yang anda jangkakan.\n" +"Tetapan ini membolehkan kawalan lebih halus berbanding tetapan " +"strict_protocol_version_checking.\n" +"Minetest masih menguatkuasakan minimum dalamnya sendiri, dan membolehkan\n" +"tetapan strict_protocol_version_checking akan mengatasi tetapan ini secara " +"berkesannya." #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." @@ -3303,9 +3315,8 @@ msgid "Enable Bloom Debug" msgstr "Membolehkan Nyahpepijat Seri" #: src/settings_translation_file.cpp -#, fuzzy msgid "Enable Debanding" -msgstr "Boleh Cedera" +msgstr "Membolehkan Nyahpenjalur" #: src/settings_translation_file.cpp msgid "" @@ -3334,9 +3345,8 @@ msgstr "" "Jika tidak, gunakan penapisan PCF." #: src/settings_translation_file.cpp -#, fuzzy msgid "Enable Post Processing" -msgstr "Pascapemprosesan" +msgstr "Membolehkan Pascapemprosesan" #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" @@ -3388,13 +3398,14 @@ msgid "Enable mouse wheel (scroll) for item selection in hotbar." msgstr "Membolehkan roda tetikus (tatal) untuk pemilihan item dalam hotbar." #: src/settings_translation_file.cpp -#, fuzzy msgid "Enable random mod loading (mainly used for testing)." -msgstr "Membolehkan input pengguna secara rawak (hanya untuk percubaan)." +msgstr "" +"Membolehkan pemuatan mods secara rawak (utamanya digunakan untuk percubaan)." #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." -msgstr "Membolehkan input pengguna secara rawak (hanya untuk percubaan)." +msgstr "" +"Membolehkan input pengguna secara rawak (hanya digunakan untuk percubaan)." #: src/settings_translation_file.cpp msgid "" @@ -3423,9 +3434,8 @@ msgstr "" "sangkakan." #: src/settings_translation_file.cpp -#, fuzzy msgid "Enable touchscreen" -msgstr "Skrin Sentuh" +msgstr "Membolehkan skrin sentuh" #: src/settings_translation_file.cpp msgid "" @@ -3480,16 +3490,18 @@ msgstr "Membolehkan pengagregatan jejaring yang diputar di paksi Y (facedir)." #: src/settings_translation_file.cpp msgid "Enables debug and error-checking in the OpenGL driver." -msgstr "" +msgstr "Membolehkan nyahpepijat dan pemeriksaan ralat dalam pemacu OpenGL." #: src/settings_translation_file.cpp msgid "Enables the post processing pipeline." -msgstr "" +msgstr "Membolehkan talian paip pascapemprosesan." #: src/settings_translation_file.cpp msgid "" "Enables touchscreen mode, allowing you to play the game with a touchscreen." msgstr "" +"Membolehkan mod skrin sentuh, membenarkan anda bermain permainan menggunakan " +"skrin sentuh." #: src/settings_translation_file.cpp msgid "" @@ -3576,7 +3588,7 @@ msgid "" "Multiplayer Tab." msgstr "" "Fail dalam laluan client/serverlist/ yang mengandungi senarai\n" -"pelayan kegemaran yang dipaparkan dalam Tab Pemain Ramai." +"pelayan kegemaran yang dipaparkan dalam Tab Multipemain." #: src/settings_translation_file.cpp msgid "Filler depth" @@ -4100,7 +4112,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "If enabled, disable cheat prevention in multiplayer." msgstr "" -"Jika dibolehkan, ia akan melumpuhkan pencegahan penipuan dalam pemain ramai." +"Jika dibolehkan, ia akan melumpuhkan pencegahan penipuan dalam multipemain." #: src/settings_translation_file.cpp msgid "" @@ -4437,16 +4449,15 @@ msgstr "" "- Legap: melumpuhkan lut sinar" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Length of a server tick (the interval at which everything is generally " "updated),\n" "stated in seconds.\n" "Does not apply to sessions hosted from the client menu." msgstr "" -"Panjang setiap detik pelayan dan selang masa ketika mana objek-objek " -"selalunya\n" -"dikemaskini menerusi rangkaian, dinyatakan dalam saat." +"Panjang setiap detik pelayan (selang masa ketika mana semua benda\n" +"selalunya dikemaskini), dinyatakan dalam saat.\n" +"Tidak diterapkan kepada sesi yang dihoskan daripada menu klien." #: src/settings_translation_file.cpp msgid "Length of liquid waves." @@ -4676,7 +4687,6 @@ msgid "Map generation attributes specific to Mapgen v5." msgstr "Atribut penjanaan peta khusus untuk janapeta v5." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Map generation attributes specific to Mapgen v6.\n" "The 'snowbiomes' flag enables the new 5 biome system.\n" @@ -4688,7 +4698,9 @@ msgstr "" "Atribut penjanaan peta khusus untuk Janapeta v6.\n" "Bendera 'snowbiomes' membolehkan sistem 5 biom baharu.\n" "Apabila bendera 'snowbiomes' dibolehkan, hutan akan dibolehkan secara\n" -"automatik dan bendera 'jungles' diabaikan." +"automatik dan bendera 'jungles' diabaikan.\n" +"Bendera 'temples' melumpuhkan penjanaan kuil gurun. Kurungan bawah tanah " +"yang biasa akan muncul sebagai ganti." #: src/settings_translation_file.cpp msgid "" @@ -4997,9 +5009,8 @@ msgid "Minimap scan height" msgstr "Ketinggian imbasan peta mini" #: src/settings_translation_file.cpp -#, fuzzy msgid "Minimum dig repetition interval" -msgstr "Selang pengulangan perbuatan letak" +msgstr "Selang pengulangan gali minimum" #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." @@ -5070,9 +5081,8 @@ msgid "Mouse sensitivity multiplier." msgstr "Pendarab kepekaan tetikus." #: src/settings_translation_file.cpp -#, fuzzy msgid "Movement threshold" -msgstr "Nilai ambang gua" +msgstr "Nilai ambang pergerakan" #: src/settings_translation_file.cpp msgid "Mud noise" @@ -5180,8 +5190,7 @@ msgstr "" "enjin, tetapi\n" "ia boleh memberi kesan buruk kepada prestasi permainan dengan mengganggu " "proses-proses\n" -"lain, terutamanya dalam mod pemain perseorangan dan/atau apabila menjalankan " -"kod Lua\n" +"lain, terutamanya dalam mod ekapemain dan/atau apabila menjalankan kod Lua\n" "dalam fungsi 'on_generated'. Untuk kebanyakan pengguna, tetapan optimum " "ialah '1'." @@ -5233,9 +5242,8 @@ msgstr "" "Tidak jeda jika formspec dibuka." #: src/settings_translation_file.cpp -#, fuzzy msgid "OpenGL debug" -msgstr "Nyahpepijat janapeta" +msgstr "Nyahpepijat OpenGL" #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." @@ -5373,13 +5381,12 @@ msgid "Proportion of large caves that contain liquid." msgstr "Perkadaran gua besar yang mengandungi cecair." #: src/settings_translation_file.cpp -#, fuzzy msgid "Protocol version minimum" -msgstr "Versi protokol tidak serasi. " +msgstr "Versi protokol minimum" #: src/settings_translation_file.cpp msgid "Punch gesture" -msgstr "" +msgstr "Gerak isyarat ketuk" #: src/settings_translation_file.cpp msgid "" @@ -5401,7 +5408,7 @@ msgstr "Input rawak" #: src/settings_translation_file.cpp msgid "Random mod load order" -msgstr "" +msgstr "Tertib muatan mods rawak" #: src/settings_translation_file.cpp msgid "Recent Chat Messages" @@ -5616,7 +5623,6 @@ msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous" msgstr "Lihat http://www.sqlite.org/pragma.html#pragma_synchronous" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Select the antialiasing method to apply.\n" "\n" @@ -5641,8 +5647,8 @@ msgstr "" "\n" "* None - Tiada antialias (lalai)\n" "\n" -"* FSAA - Antialias skrin penuh disediakan oleh perkakasan (tidak serasi " -"dengan pembayang)\n" +"* FSAA - Antialias skrin penuh disediakan oleh perkakasan\n" +"(tidak serasi dengan Pascapemprosesan dan Pensampelan Pengurangan)\n" "Juga dikenali sebagai antialias pelbagai sampel (MSAA)\n" "Melembutkan sisi blok tetapi tidak memberi kesan kepada bahagian dalam " "tekstur.\n" @@ -5785,12 +5791,11 @@ msgstr "" "Julat: dari -1 ke 1.0" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Set the language. By default, the system language is used.\n" "A restart is required after changing this." msgstr "" -"Menetapkan bahasa. Biarkan kosong untuk menggunakan bahasa sistem.\n" +"Menetapkan bahasa. Secara lalainya, bahasa sistem akan digunakan.\n" "Sebuah mula semula diperlukan selepas menukar tetapan ini." #: src/settings_translation_file.cpp @@ -5837,6 +5842,8 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Set to true to enable volumetric lighting effect (a.k.a. \"Godrays\")." msgstr "" +"Tetapkan ke true untuk membolehkan kesan pencahayaan isi padu (juga dikenali " +"sebagai \"Sinar Senja\")." #: src/settings_translation_file.cpp msgid "Set to true to enable waving leaves." @@ -5883,15 +5890,13 @@ msgid "Shaders" msgstr "Pembayang" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" "cards." msgstr "" "Pembayang membolehkan kesan visual lanjutan dan boleh meningkatkan prestasi\n" -"untuk sesetengah kad video.\n" -"Namun ia hanya berfungsi dengan pembahagian belakang video OpenGL." +"untuk sesetengah kad video." #: src/settings_translation_file.cpp msgid "Shadow filter quality" @@ -6011,14 +6016,13 @@ msgid "Smooth lighting" msgstr "Pencahayaan lembut" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Smooths rotation of camera when in cinematic mode, 0 to disable. Enter " "cinematic mode by using the key set in Controls." msgstr "" "Melembutkan pemutaran kamera ketika dalam mod sinematik, nilai 0 untuk " "melumpuhkannya. Masuk mod sinematik menggunakan kekunci yang ditetapkan " -"dalam Tukar Kekunci." +"dalam Kawalan." #: src/settings_translation_file.cpp msgid "" @@ -6045,9 +6049,8 @@ msgid "Sound" msgstr "Bunyi" #: src/settings_translation_file.cpp -#, fuzzy msgid "Sound Extensions Blacklist" -msgstr "Senarai Hitam Bendera ContentDB" +msgstr "Senarai Hitam Sambungan Bunyi" #: src/settings_translation_file.cpp msgid "" @@ -6264,6 +6267,8 @@ msgid "" "The delay in milliseconds after which a touch interaction is considered a " "long tap." msgstr "" +"Lengah masa dalam milisaat selepas mana interaksi sentuhan dikira sebagai " +"ketik dan tahan." #: src/settings_translation_file.cpp msgid "" @@ -6284,17 +6289,27 @@ msgid "" "Known from the classic Minetest mobile controls.\n" "Combat is more or less impossible." msgstr "" +"Gerak isyarat untuk mengetuk pemain/entiti.\n" +"Tetapan ini boleh diatasi oleh permainan dan mods.\n" +"\n" +"* short_tap (ketik)\n" +"Mudah digunakan dan amat terkenal daripada permainan lain yang tidak harus " +"dinamakan.\n" +"\n" +"* long_tap (ketik dan tahan)\n" +"Terkenal daripada kawalan mudah alih Minetest yang lama.\n" +"Pertempuran itu agak mustahil untuk dilakukan." #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" msgstr "Pengenal pasti kayu bedik yang digunakan" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The length in pixels after which a touch interaction is considered movement." msgstr "" -"Panjang dalam piksel yang diperlukan untuk interaksi skrin sentuh dimulakan." +"Panjang dalam piksel selepas mana interaksi sentuh akan dikira sebagai " +"pergerakan." #: src/settings_translation_file.cpp msgid "" @@ -6309,13 +6324,12 @@ msgstr "" "Nilai lalainya 1.0 (1/2 nod)." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The minimum time in seconds it takes between digging nodes when holding\n" "the dig button." msgstr "" -"Jumlah masa dalam saat diambil untuk meletakan nod yang berulang apabila\n" -"pemain menekan butang letak tanpa melepaskannya." +"Jumlah masa minimum dalam saat yang diambil di antara penggalian nod\n" +"apabila pemain menekan butang gali tanpa melepaskannya." #: src/settings_translation_file.cpp msgid "The network interface that the server listens on." @@ -6348,7 +6362,6 @@ msgstr "" "Nilai ini patut ditetapkan bersama nilai active_object_send_range_blocks." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The rendering back-end.\n" "Note: A restart is required after changing this!\n" @@ -6359,7 +6372,7 @@ msgstr "" "Nota: Mula semula diperlukan selepas mengubah tetapan ini!\n" "OpenGL ialah bahagian belakang lalai untuk komputer, dan OGLES2 untuk " "Android.\n" -"Pembayang disokong oleh OpenGL dan OGLES2 (dalam uji kaji)." +"Pembayang disokong oleh kesemua kecuali OGLES1." #: src/settings_translation_file.cpp msgid "" @@ -6438,7 +6451,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Threshold for long taps" -msgstr "" +msgstr "Nilai ambang untuk ketik dan tahan" #: src/settings_translation_file.cpp msgid "" @@ -6501,9 +6514,8 @@ msgid "Tradeoffs for performance" msgstr "Keseimbangan untuk prestasi" #: src/settings_translation_file.cpp -#, fuzzy msgid "Translucent liquids" -msgstr "Cecair legap" +msgstr "Cecair berlut cahaya" #: src/settings_translation_file.cpp msgid "Transparency Sorting Distance" @@ -6550,18 +6562,18 @@ msgstr "" "Tetapan ini hanya patut diubah jika anda mempunyai masalah prestasi." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "URL to JSON file which provides information about the newest Minetest " "release\n" "If this is empty the engine will never check for updates." msgstr "" -"URL kepada fail JSON yang menyediakan maklumat mengenai terbitan Minetest " -"terbaru" +"URL ke fail JSON yang menyediakan maklumat mengenai terbitan Minetest " +"terbaru\n" +"Sekiranya nilai ini kosong maka enjin tidak akan memeriksa kemas kini lagi." #: src/settings_translation_file.cpp msgid "URL to the server list displayed in the Multiplayer Tab." -msgstr "URL kepada senarai pelayan yang dipaparkan dalam Tab Permainan Ramai." +msgstr "URL kepada senarai pelayan yang dipaparkan dalam Tab Multipemain." #: src/settings_translation_file.cpp msgid "Undersampling" @@ -6773,7 +6785,7 @@ msgstr "Kekuatan bunyi" #: src/settings_translation_file.cpp msgid "Volume multiplier when the window is unfocused." -msgstr "" +msgstr "Pendarab kekuatan bunyi apabila tetingkap tidak difokuskan." #: src/settings_translation_file.cpp msgid "" @@ -6784,14 +6796,12 @@ msgstr "" "Memerlukan sistem bunyi dibolehkan." #: src/settings_translation_file.cpp -#, fuzzy msgid "Volume when unfocused" -msgstr "Bingkai per saat (FPS) apabila permainan hilang fokus atau dijedakan" +msgstr "Kekuatan bunyi apabila tidak difokuskan" #: src/settings_translation_file.cpp -#, fuzzy msgid "Volumetric lighting" -msgstr "Pencahayaan lembut" +msgstr "Pencahayaan isi padu" #: src/settings_translation_file.cpp msgid "" From 0f4f56d76837997ea70163e6a377504753ea6cac Mon Sep 17 00:00:00 2001 From: BlackImpostor Date: Fri, 18 Oct 2024 16:30:49 +0000 Subject: [PATCH 083/178] Translated using Weblate (Russian) Currently translated at 100.0% (1335 of 1335 strings) --- po/ru/luanti.po | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/po/ru/luanti.po b/po/ru/luanti.po index 047cd70fe..38284e98f 100644 --- a/po/ru/luanti.po +++ b/po/ru/luanti.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: Russian (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-07-11 15:14+0200\n" -"PO-Revision-Date: 2024-07-16 12:09+0000\n" +"PO-Revision-Date: 2024-10-19 17:16+0000\n" "Last-Translator: BlackImpostor \n" "Language-Team: Russian \n" @@ -13,7 +13,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: Weblate 5.7-dev\n" +"X-Generator: Weblate 5.8-rc\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -873,7 +873,7 @@ msgstr "Основной" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Movement" -msgstr "Перемещение" +msgstr "Движение" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Reset setting to default" @@ -946,7 +946,7 @@ msgstr "Очень низкие" #: builtin/mainmenu/tab_about.lua msgid "About" -msgstr "Подробнее" +msgstr "Узнать подробнее" #: builtin/mainmenu/tab_about.lua msgid "Active Contributors" From 218f3da4b88c7953e6238133b9fbe052d20c823e Mon Sep 17 00:00:00 2001 From: Honzapkcz Date: Mon, 21 Oct 2024 17:35:27 +0000 Subject: [PATCH 084/178] Translated using Weblate (Czech) Currently translated at 94.1% (1257 of 1335 strings) --- po/cs/luanti.po | 291 +++++++++++++++++++++--------------------------- 1 file changed, 127 insertions(+), 164 deletions(-) diff --git a/po/cs/luanti.po b/po/cs/luanti.po index 5675eb55f..2f7d22aa0 100644 --- a/po/cs/luanti.po +++ b/po/cs/luanti.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: Czech (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-07-11 15:14+0200\n" -"PO-Revision-Date: 2024-08-02 22:09+0000\n" +"PO-Revision-Date: 2024-10-22 09:40+0000\n" "Last-Translator: Honzapkcz \n" "Language-Team: Czech \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2);\n" -"X-Generator: Weblate 5.7-dev\n" +"X-Generator: Weblate 5.8-rc\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -71,9 +71,8 @@ msgid "Command not available: " msgstr "Příkaz není k dispozici: " #: builtin/common/chatcommands.lua -#, fuzzy msgid "Get help for commands (-t: output in chat)" -msgstr "Získat nápovědu pro příkazy" +msgstr "Získat nápovědu pro příkazy (-t: výstup v chatu)" #: builtin/common/chatcommands.lua msgid "" @@ -83,9 +82,8 @@ msgstr "" "pro celý výpis." #: builtin/common/chatcommands.lua -#, fuzzy msgid "[all | ] [-t]" -msgstr "[all | ]" +msgstr "[all | ] [-t]" #: builtin/fstk/ui.lua msgid "" @@ -148,13 +146,12 @@ msgid "Failed to download $1" msgstr "Selhalo stažení $1" #: builtin/mainmenu/content/contentdb.lua -#, fuzzy msgid "" "Failed to extract \"$1\" (insufficient disk space, unsupported file type or " "broken archive)" msgstr "" -"Nepodařilo se rozbalit „$1“ (nepodporovaný typ souboru, nebo poškozený " -"archiv)" +"Nepodařilo se rozbalit „$1“ (nedostatek místa na disku, nepodporovaný typ " +"souboru, nebo poškozený archiv)" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "" @@ -697,9 +694,8 @@ msgid "Minetest Game is no longer installed by default" msgstr "Minetest Hra už není instalována jako výchozí" #: builtin/mainmenu/dlg_reinstall_mtg.lua -#, fuzzy msgid "Reinstall Minetest Game" -msgstr "Nainstalovat jinou hru" +msgstr "Přeinstalovat Minetest Game" #: builtin/mainmenu/dlg_rename_modpack.lua msgid "Accept" @@ -876,14 +872,12 @@ msgid "General" msgstr "Obecné" #: builtin/mainmenu/settings/dlg_settings.lua -#, fuzzy msgid "Movement" -msgstr "Turbo režim pohybu" +msgstr "Pohyb" #: builtin/mainmenu/settings/dlg_settings.lua -#, fuzzy msgid "Reset setting to default" -msgstr "Obnovit výchozí" +msgstr "Obnovit výchozí nastavení" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Reset setting to default ($1)" @@ -1003,18 +997,16 @@ msgid "Browse online content" msgstr "Procházet online obsah" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Browse online content [$1]" -msgstr "Procházet online obsah" +msgstr "Procházet online obsah [$1]" #: builtin/mainmenu/tab_content.lua msgid "Content" msgstr "Obsah" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Content [$1]" -msgstr "Obsah" +msgstr "Obsah [$1]" #: builtin/mainmenu/tab_content.lua msgid "Disable Texture Pack" @@ -1037,9 +1029,8 @@ msgid "Rename" msgstr "Přejmenovat" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Update available?" -msgstr "" +msgstr "Dostupná aktualizace?" #: builtin/mainmenu/tab_content.lua msgid "Use Texture Pack" @@ -1086,6 +1077,8 @@ msgid "" "Minetest is a game-creation platform that allows you to play many different " "games." msgstr "" +"Minetest je vývojová herní platforma, která ti umožňuje hrát spoustu různých " +"her." #: builtin/mainmenu/tab_local.lua msgid "New" @@ -1296,9 +1289,8 @@ msgid "Camera update enabled" msgstr "Aktualizace kamery povolena" #: src/client/game.cpp -#, fuzzy msgid "Can't show block bounds (disabled by game or mod)" -msgstr "Nelze zobrazit hranice bloku (zakázáno modem, nebo hrou)" +msgstr "Nelze zobrazit hranice bloků (zakázáno modem nebo hrou)" #: src/client/game.cpp msgid "Change Password" @@ -1337,7 +1329,6 @@ msgid "Continue" msgstr "Pokračovat" #: src/client/game.cpp -#, fuzzy msgid "" "Controls:\n" "No menu open:\n" @@ -1354,16 +1345,16 @@ msgid "" msgstr "" "Výchozí ovládání:\n" "Bez menu:\n" -"- klik: aktivace tlačítka\n" -"- dvojklik: položit/použít\n" -"- pohyb prstem: rozhlížení\n" -"Menu/Inventář zobrazen:\n" +"- tah prstem: rozhlédnout se\n" +"- dotek: položit/udeřit/použít\n" +"- dlouhý dotek: vytěžit/použít\n" +"Menu/Otevřený inventář:\n" "- dvojklik (mimo):\n" " -->zavřít\n" -"- stisk hromádky, přihrádky :\n" +"- dotek hromádky a přihrádky :\n" " --> přesunutí hromádky\n" "- stisk a přesun, klik druhým prstem\n" -" --> umístit samostatnou věc do přihrádky\n" +" --> umístit jednu věc do přihrádky\n" #: src/client/game.cpp #, c-format @@ -1436,9 +1427,8 @@ msgid "Fog enabled" msgstr "Mlha je povolena" #: src/client/game.cpp -#, fuzzy msgid "Fog enabled by game or mod" -msgstr "Přiblížení je aktuálně zakázáno" +msgstr "Mlha zapnuta hrou nebo módem" #: src/client/game.cpp msgid "Game info:" @@ -1560,49 +1550,47 @@ msgid "Unable to listen on %s because IPv6 is disabled" msgstr "Není možné poslouchat na %s protože IPv6 je zakázán" #: src/client/game.cpp -#, fuzzy msgid "Unlimited viewing range disabled" -msgstr "Neomezený pohled povolen" +msgstr "Neomezený rozhled zakázán" #: src/client/game.cpp -#, fuzzy msgid "Unlimited viewing range enabled" -msgstr "Neomezený pohled povolen" +msgstr "Neomezený rozhled povolen" #: src/client/game.cpp msgid "Unlimited viewing range enabled, but forbidden by game or mod" -msgstr "" +msgstr "Neomezený rozhled povolen, ale zakázán hrou nebo módem" #: src/client/game.cpp -#, fuzzy, c-format +#, c-format msgid "Viewing changed to %d (the minimum)" -msgstr "Omezení dohlédnutí na minimu: %d" +msgstr "Rozhled nastaven na %d (minimum)" #: src/client/game.cpp #, c-format msgid "Viewing changed to %d (the minimum), but limited to %d by game or mod" -msgstr "" +msgstr "Rozhled nastaven na %d (minimum), ale limitován na %d hrou nebo módem" #: src/client/game.cpp #, c-format msgid "Viewing range changed to %d" -msgstr "Omezení dohlédnutí upraveno na %d" +msgstr "Rozhled nastaven na %d" #: src/client/game.cpp -#, fuzzy, c-format +#, c-format msgid "Viewing range changed to %d (the maximum)" -msgstr "Omezení dohlédnutí upraveno na %d" +msgstr "Rozhled nastaven na %d (maximum)" #: src/client/game.cpp #, c-format msgid "" "Viewing range changed to %d (the maximum), but limited to %d by game or mod" -msgstr "" +msgstr "Rozhled nastaven na %d (maximum), ale limitován na %d hrou nebo módem" #: src/client/game.cpp -#, fuzzy, c-format +#, c-format msgid "Viewing range changed to %d, but limited to %d by game or mod" -msgstr "Omezení dohlédnutí upraveno na %d" +msgstr "Rozhled nastaven na %d, ale limitován na %d hrou nebo módem" #: src/client/game.cpp #, c-format @@ -1656,28 +1644,24 @@ msgstr "Backspace" #. ~ Usually paired with the Pause key #: src/client/keycode.cpp -#, fuzzy msgid "Break Key" -msgstr "Klávesa plížení" +msgstr "Klávesa Break" #: src/client/keycode.cpp msgid "Caps Lock" msgstr "Caps Lock" #: src/client/keycode.cpp -#, fuzzy msgid "Clear Key" -msgstr "Vyčistit" +msgstr "Klávesa Clear" #: src/client/keycode.cpp -#, fuzzy msgid "Control Key" -msgstr "Control" +msgstr "Ctrl" #: src/client/keycode.cpp -#, fuzzy msgid "Delete Key" -msgstr "Vymazat" +msgstr "Delete" #: src/client/keycode.cpp msgid "Down Arrow" @@ -1728,9 +1712,8 @@ msgid "Insert" msgstr "Insert" #: src/client/keycode.cpp -#, fuzzy msgid "Left Arrow" -msgstr "Levý Control" +msgstr "Šipka Vlevo" #: src/client/keycode.cpp msgid "Left Button" @@ -1831,14 +1814,12 @@ msgid "OEM Clear" msgstr "„OEM Clear“" #: src/client/keycode.cpp -#, fuzzy msgid "Page Down" -msgstr "Klávesa Page Down" +msgstr "Page Down" #: src/client/keycode.cpp -#, fuzzy msgid "Page Up" -msgstr "Klávesa Page Up" +msgstr "Page Up" #. ~ Usually paired with the Break key #: src/client/keycode.cpp @@ -1861,9 +1842,8 @@ msgid "Return Key" msgstr "Vrátit" #: src/client/keycode.cpp -#, fuzzy msgid "Right Arrow" -msgstr "Pravý Control" +msgstr "Šipka Vpravo" #: src/client/keycode.cpp msgid "Right Button" @@ -1895,7 +1875,6 @@ msgid "Select" msgstr "Vybrat" #: src/client/keycode.cpp -#, fuzzy msgid "Shift Key" msgstr "Shift" @@ -1951,9 +1930,9 @@ msgid "Minimap in texture mode" msgstr "Minimapa v režimu Textura" #: src/client/shader.cpp -#, fuzzy, c-format +#, c-format msgid "Failed to compile the \"%s\" shader." -msgstr "Nepodařilo se otevřít webovou stránku" +msgstr "Nepodařil se přeložit \"%s\" shader." #: src/client/shader.cpp msgid "Shaders are enabled but GLSL is not supported by the driver." @@ -2160,9 +2139,8 @@ msgid "Open URL?" msgstr "Otevřít odkaz?" #: src/gui/guiOpenURL.cpp -#, fuzzy msgid "Unable to open URL" -msgstr "Nepodařilo se otevřít webovou stránku" +msgstr "Nepodařilo se otevřít odkaz" #: src/gui/guiPasswordChange.cpp msgid "Change" @@ -2213,9 +2191,9 @@ msgid "Name is taken. Please choose another name" msgstr "Jméno je obsazeno. Zvolte prosím jiné jméno" #: src/server.cpp -#, fuzzy, c-format +#, c-format msgid "%s while shutting down: " -msgstr "Vypínání..." +msgstr "%s během vypínání: " #: src/settings_translation_file.cpp msgid "" @@ -2341,7 +2319,6 @@ msgid "3D noise that determines number of dungeons per mapchunk." msgstr "3D šum definující počet žalářů na kusu mapy." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "3D support.\n" "Currently supported:\n" @@ -2356,12 +2333,12 @@ msgstr "" "Podpora 3D.\n" "V současné době podporovány:\n" "- none: žádný 3D výstup.\n" -"- anaglyph: azurové/purpurové barevné 3D.\n" +"- anaglyph: azurově/purpurové barevné 3D.\n" "- interlaced: pro obrazovky s polarizací lichý/sudý řádek.\n" "- topbottom: rozdělení obrazovky na horní a dolní část.\n" "- sidebyside: rozdělení obrazovky na levou a pravou část.\n" "- crossview: Zkřížení očí 3d\n" -"Pozn.: Režim 'interlaced' vyžaduje zapnutí 'shaderů'." +"Pozn.: Režim 'interlaced' vyžaduje zapnutí shaderů." #: src/settings_translation_file.cpp msgid "" @@ -2492,14 +2469,12 @@ msgid "Announce to this serverlist." msgstr "Zapsat do tohoto seznamu serverů." #: src/settings_translation_file.cpp -#, fuzzy msgid "Anti-aliasing scale" -msgstr "Antialiasing:" +msgstr "Velikost Antialiasingu" #: src/settings_translation_file.cpp -#, fuzzy msgid "Antialiasing method" -msgstr "Antialiasing:" +msgstr "Metoda Antialiasingu" #: src/settings_translation_file.cpp msgid "Append item name" @@ -2523,6 +2498,13 @@ msgid "" "With OpenGL ES, dithering only works if the shader supports high\n" "floating-point precision and it may have a higher performance impact." msgstr "" +"Použije šrafování pro snížení barevné hloubky.\n" +"Šrafování výrazně zvyšuje velikost bezztrátově zkomprimovaných\n" +"snímků obrazovky a nefunguje správně pokud monitor nebo operační systém\n" +"provádí další šrafování nebo když barevné kanály nejsou rozděleny\n" +"po 8 bitech.\n" +"Šrafování s OpenGL ES funguje pouze pokud shader podporuje desetiná čísla\n" +"s vysokou přesností a navíc může zvýšit dopad na výkon." #: src/settings_translation_file.cpp msgid "Arm inertia" @@ -2541,7 +2523,6 @@ msgid "Ask to reconnect after crash" msgstr "Zeptat se na znovupřipojení po havárii" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "At this distance the server will aggressively optimize which blocks are sent " "to\n" @@ -2555,15 +2536,13 @@ msgid "" msgstr "" "V této vzdálenosti bude server razantně optimalizovat výběr bloků,\n" "které pošle klientům.\n" -"Malé hodnoty mohou zlepšit výkon, však mohou také způsobit chyby\n" -"ve vykreslování (některé bloky, zvláště pod vodou, v jeskyních\n" -"a někdy i na zemi, nebudou vykresleny).\n" -"Nastavení této hodnoty vyšší než max_block_send_distance zakáže vypne\n" +"Malé hodnoty mohou zlepšit výkon, za cenu viditelných chyb\n" +"ve vykreslování (některé bloky nebudou správně vykresleny v jeskynních).\n" +"Nastavení této hodnoty vyšší než max_block_send_distance zakáže\n" "tuto optimalizaci.\n" "Jednotkou je mapblok (16 bloků)." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "At this distance the server will perform a simpler and cheaper occlusion " "check.\n" @@ -2573,13 +2552,10 @@ msgid "" "This is especially useful for very large viewing range (upwards of 500).\n" "Stated in MapBlocks (16 nodes)." msgstr "" -"V této vzdálenosti bude server razantně optimalizovat výběr bloků,\n" -"které pošle klientům.\n" -"Malé hodnoty mohou zlepšit výkon, však mohou také způsobit chyby\n" -"ve vykreslování (některé bloky, zvláště pod vodou, v jeskyních\n" -"a někdy i na zemi, nebudou vykresleny).\n" -"Nastavení této hodnoty vyšší než max_block_send_distance zakáže vypne\n" -"tuto optimalizaci.\n" +"V této vzdálenosti bude server razantně optimalizovat výběr bloků.\n" +"Malé hodnoty mohou zlepšit výkon, za cenu dočasných chyb\n" +"ve vykreslování (mizející bloky).\n" +"Velice užitečné pro velké rozhledové vzdálenosti (od 500 nahoru)\n" "Jednotkou je mapblok (16 bloků)." #: src/settings_translation_file.cpp @@ -2611,9 +2587,8 @@ msgid "Base terrain height." msgstr "Základní výška terénu." #: src/settings_translation_file.cpp -#, fuzzy msgid "Base texture size" -msgstr "Minimální velikost textury" +msgstr "Základní velikost textury" #: src/settings_translation_file.cpp msgid "Basic privileges" @@ -2636,18 +2611,16 @@ msgid "Bind address" msgstr "Svázat adresu" #: src/settings_translation_file.cpp -#, fuzzy msgid "Biome API" -msgstr "Biomy" +msgstr "API Biomů" #: src/settings_translation_file.cpp msgid "Biome noise" msgstr "Šum biomů" #: src/settings_translation_file.cpp -#, fuzzy msgid "Block cull optimize distance" -msgstr "Optimalizace vzdálenosti vysílání bloku" +msgstr "Optimalizace vzdálenosti výběru bloků" #: src/settings_translation_file.cpp msgid "Block send optimize distance" @@ -2851,9 +2824,8 @@ msgid "Clouds" msgstr "Mraky" #: src/settings_translation_file.cpp -#, fuzzy msgid "Clouds are a client-side effect." -msgstr "Mraky jsou pouze lokální efekt." +msgstr "Mraky jsou pouze efekt na klientovi." #: src/settings_translation_file.cpp msgid "Clouds in menu" @@ -3095,7 +3067,6 @@ msgstr "" "ale také využívá více prostředků počítače." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Define the oldest clients allowed to connect.\n" "Older clients are compatible in the sense that they will not crash when " @@ -3107,10 +3078,13 @@ msgid "" "Minetest still enforces its own internal minimum, and enabling\n" "strict_protocol_version_checking will effectively override this." msgstr "" -"Zapněte pro zakázání připojení starých klientů.\n" +"Nastaví nejstarší klienty, kteří se mohou připojit.\n" "Starší klienti jsou kompatibilní v takovém smyslu, že při připojení k novým " "serverům\n" -"nehavarují, ale nemusí podporovat všechny vlastnosti, které byste očekával/a." +"nespadnou, ale nemusí podporovat všechny nové funkce, které očekáváš.\n" +"Poskytuje větší kontrolu než strict_protocol_version_checking.\n" +"Minetest stále vyžaduje svoje minimum a povolení\n" +"strict_protocol_version_checking toto nastavení přepíše." #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." @@ -3178,6 +3152,8 @@ msgid "" "methods.\n" "Value of 2 means taking 2x2 = 4 samples." msgstr "" +"Definuje velikost snímkovací mřížky pro FSAA a SSAA antialising metody.\n" +"Hosnota 2 znamená 2x2 = 4 snímky." #: src/settings_translation_file.cpp msgid "Defines the width of the river channel." @@ -3395,7 +3371,7 @@ msgstr "Zapnout zabezpečení módů" #: src/settings_translation_file.cpp msgid "Enable mouse wheel (scroll) for item selection in hotbar." -msgstr "" +msgstr "Povolí použít kolečko myši pro vybírání předmětů v hotbaru." #: src/settings_translation_file.cpp #, fuzzy @@ -3487,16 +3463,16 @@ msgstr "Zapnout cachování geom. sítí otočených pomocí facedir." #: src/settings_translation_file.cpp msgid "Enables debug and error-checking in the OpenGL driver." -msgstr "" +msgstr "Povolí ladění a hledání chyb v OpenGL driveru." #: src/settings_translation_file.cpp msgid "Enables the post processing pipeline." -msgstr "" +msgstr "Povolí pipeline pro post-zpracování." #: src/settings_translation_file.cpp msgid "" "Enables touchscreen mode, allowing you to play the game with a touchscreen." -msgstr "" +msgstr "Povolí hrát hru s dotykovou obrazovkou." #: src/settings_translation_file.cpp msgid "" @@ -3997,25 +3973,23 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Hotbar: Enable mouse wheel for selection" -msgstr "" +msgstr "Povolí použít kolečko pro výběr" #: src/settings_translation_file.cpp msgid "Hotbar: Invert mouse wheel direction" -msgstr "" +msgstr "Hotbar: Obrácený směr kolečka myši" #: src/settings_translation_file.cpp msgid "How deep to make rivers." msgstr "Jak hluboké dělat řeky." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "How fast liquid waves will move. Higher = faster.\n" "If negative, liquid waves will move backwards." msgstr "" "Rychlost pohybu vln v kapalinách. Vyšší = rychlejší.\n" -"Záporné hodnoty vytvoří vlny jdoucí pozpátku.\n" -"Vyžaduje zapnuté vlnění kapalin." +"Při negativních hodnotách se vlny vlní pozpátku." #: src/settings_translation_file.cpp msgid "" @@ -4255,7 +4229,7 @@ msgstr "Invertovat myš" #: src/settings_translation_file.cpp msgid "Invert mouse wheel (scroll) direction for item selection in hotbar." -msgstr "" +msgstr "Obrátí směr kolečka myši pro výběr předmětů v hotbaru." #: src/settings_translation_file.cpp msgid "Invert vertical mouse movement." @@ -4433,21 +4407,19 @@ msgstr "" "- Neprůhledné: vypne průhlednost" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Length of a server tick (the interval at which everything is generally " "updated),\n" "stated in seconds.\n" "Does not apply to sessions hosted from the client menu." msgstr "" -"Délka „tiku“ serveru a interval, ve kterém jsou objekty obecně " -"aktualizovány \n" -"po síti, vyjádřeno ve vteřinách." +"Délka ticku serveru (interval, ve kterém se objekty mění svůj stav), \n" +"vyjádřeno ve vteřinách.\n" +"Nevztahuje se na hry hostované z menu klienta." #: src/settings_translation_file.cpp -#, fuzzy msgid "Length of liquid waves." -msgstr "Rychlost vln vlnících se kapalin" +msgstr "Délka vln vlnících se kapalin." #: src/settings_translation_file.cpp msgid "" @@ -4670,7 +4642,6 @@ msgid "Map generation attributes specific to Mapgen v5." msgstr "Parametry generování mapy pro Generátor mapy v5." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Map generation attributes specific to Mapgen v6.\n" "The 'snowbiomes' flag enables the new 5 biome system.\n" @@ -4679,10 +4650,12 @@ msgid "" "The 'temples' flag disables generation of desert temples. Normal dungeons " "will appear instead." msgstr "" -"Parametry generování mapy pro Generátor mapy v6.\n" -"Nastavení \"snowbiomes\" umožňuje systém 5 biomů.\n" +"Parametry generování mapy pro Generátor v6.\n" +"Nastavení \"snowbiomes\" umožňuje nový 5 biomový systém.\n" "Pokud je nastavení \"snowbiomes\" zapnuto, džungle jsou automaticky\n" -"zapnuty a nastavení \"jungles\" je ignorováno." +"zapnuty a nastavení \"jungles\" je ignorováno.\n" +"Nastavení \"temples\" vypne generování pouštních chrámů. Místo nich se " +"objeví bežné chrámy." #: src/settings_translation_file.cpp msgid "" @@ -5010,7 +4983,7 @@ msgstr "Mip-mapování" #: src/settings_translation_file.cpp msgid "Miscellaneous" -msgstr "" +msgstr "Ostatní" #: src/settings_translation_file.cpp msgid "Mod Profiler" @@ -5206,7 +5179,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Occlusion Culler" -msgstr "" +msgstr "Uříznutí neviditelných ploch" #: src/settings_translation_file.cpp #, fuzzy @@ -5314,15 +5287,15 @@ msgid "Post Processing" msgstr "Post processing" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Prevent digging and placing from repeating when holding the respective " "buttons.\n" "Enable this when you dig or place too often by accident.\n" "On touchscreens, this only affects digging." msgstr "" -"Zabraňte opakování kopání a pokládání při držení tlačítek myši. \n" -"Povolte to, když kopáte nebo umisťujete příliš často omylem." +"Zabrání opakovanému kopání a pokládání při držení tlačítek myši.\n" +"Povolte, když kopáte nebo pokládáte příliš často omylem.\n" +"Na dotykových obrazovkých ovlivní pouze kopání." #: src/settings_translation_file.cpp msgid "Prevent mods from doing insecure things like running shell commands." @@ -5367,13 +5340,12 @@ msgid "Proportion of large caves that contain liquid." msgstr "Poměr velkých jeskyní s kapalinami." #: src/settings_translation_file.cpp -#, fuzzy msgid "Protocol version minimum" -msgstr "Neshoda verze protokolu. " +msgstr "Minimální verze protokolu" #: src/settings_translation_file.cpp msgid "Punch gesture" -msgstr "" +msgstr "Gesto úderu" #: src/settings_translation_file.cpp msgid "" @@ -5395,7 +5367,7 @@ msgstr "Náhodný vstup" #: src/settings_translation_file.cpp msgid "Random mod load order" -msgstr "" +msgstr "Náhodné pořadí načítání módů" #: src/settings_translation_file.cpp msgid "Recent Chat Messages" @@ -5406,9 +5378,8 @@ msgid "Regular font path" msgstr "Standardní cesta k písmu" #: src/settings_translation_file.cpp -#, fuzzy msgid "Remember screen size" -msgstr "Automaticky ukládat velikost obrazovky" +msgstr "Zapamatovat velikost obrazovky" #: src/settings_translation_file.cpp msgid "Remote media" @@ -5528,6 +5499,11 @@ msgid "" "is maximized is stored in window_maximized.\n" "(Autosaving window_maximized only works if compiled with SDL.)" msgstr "" +"Automaticky uloží velikost okna.\n" +"Pokud povoleno, velikost okna je uložena ve screen_w a screen_h, a jestli je " +"okno\n" +"maximalizované je uloženo ve window_maximalized.\n" +"(Autoukládání windows_maximalized funguje pouze pokud zkompilované s SDL.)" #: src/settings_translation_file.cpp msgid "Saving map received from server" @@ -5787,11 +5763,8 @@ msgstr "" "Minimální hodnota: 1.0; maximální hodnota: 15.0" #: src/settings_translation_file.cpp -#, fuzzy msgid "Set to true to enable Shadow Mapping." -msgstr "" -"Nastavením na hodnotu true se aktivuje Mapování stínů.\n" -"Nastavení vyžaduje zapnuté shadery." +msgstr "Zapnutím se aktivuje Mapování stínů." #: src/settings_translation_file.cpp msgid "" @@ -5803,28 +5776,19 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Set to true to enable volumetric lighting effect (a.k.a. \"Godrays\")." -msgstr "" +msgstr "Povolí efekt volumetrického osvětlení (tj. \"Boží paprsky\")." #: src/settings_translation_file.cpp -#, fuzzy msgid "Set to true to enable waving leaves." -msgstr "" -"Nastavením na hodnotu true povolíte vlnění listů. \n" -"Vyžaduje, aby byly povoleny shadery." +msgstr "Zapnutím povolí vlnění listů." #: src/settings_translation_file.cpp -#, fuzzy msgid "Set to true to enable waving liquids (like water)." -msgstr "" -"Nastavením na hodnotu true povolíte vlnění kapalin (tedy vody apod.). \n" -"Vyžaduje, aby byly povoleny shadery." +msgstr "Zapnutím povolí vlnění kapalin (voda apod.)." #: src/settings_translation_file.cpp -#, fuzzy msgid "Set to true to enable waving plants." -msgstr "" -"Nastavením na hodnotu true povolíte vlnící se rostliny.\n" -"Nastavení vyžaduje zapnuté shadery." +msgstr "Zapnutím povolí vlnění rostlin." #: src/settings_translation_file.cpp msgid "" @@ -5858,16 +5822,14 @@ msgid "Shaders" msgstr "Shadery" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Shaders allow advanced visual effects and may increase performance on some " "video\n" "cards." msgstr "" -"Shadery umožňují pokročilé obrazové efekty a mohou zvýšit výkon u některých " +"Shadery umožňují pokročilé videoefekty a mohou zvýšit výkon u některých " "grafických \n" -"karet. \n" -"Toto funguje pouze s platformou OpenGL." +"karet." #: src/settings_translation_file.cpp msgid "Shadow filter quality" @@ -5954,7 +5916,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" -msgstr "" +msgstr "Naklonění Orbity Oblohy" #: src/settings_translation_file.cpp msgid "Slice w" @@ -6234,6 +6196,8 @@ msgid "" "The delay in milliseconds after which a touch interaction is considered a " "long tap." msgstr "" +"Doba v milisekundách za kterou je dotyk na obrazovku považovám za dlouhý " +"dotek." #: src/settings_translation_file.cpp #, fuzzy @@ -6268,7 +6232,6 @@ msgstr "" "obrazovkou." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The maximum height of the surface of waving liquids.\n" "4.0 = Wave height is two nodes.\n" @@ -6278,8 +6241,7 @@ msgstr "" "Maximální výška hladiny vlnících se kapalin. \n" "4.0 = Výška vlny jsou dva bloky. \n" "0.0 = Vlna se vůbec nepohybuje. \n" -"Výchozí hodnota je 1.0 (1/2 uzlu). \n" -"Vyžaduje, aby byla povoleny vlnící se kapaliny." +"Výchozí hodnota je 1.0 (1/2 bloku)." #: src/settings_translation_file.cpp #, fuzzy @@ -6410,7 +6372,7 @@ msgstr "Třetí ze 4 2D šumů, které společně určují výšku kopců / poho #: src/settings_translation_file.cpp msgid "Threshold for long taps" -msgstr "" +msgstr "Doba pro dlouhý dotek" #: src/settings_translation_file.cpp msgid "" @@ -6514,13 +6476,14 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "URL to JSON file which provides information about the newest Minetest " "release\n" "If this is empty the engine will never check for updates." msgstr "" -"URL k souboru JSON, který poskytuje informace o nejnovější verzi Minetestu" +"Odkaz k souboru JSON, který poskytuje informace o nejnovější verzi " +"Minetestu\n" +"Pokud je prázdné tak Minetest nebude kontrolovat nové aktualizace." #: src/settings_translation_file.cpp msgid "URL to the server list displayed in the Multiplayer Tab." @@ -6606,14 +6569,14 @@ msgstr "" "Zmenšování rozlišení gama korekce není podporována." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Use raytraced occlusion culling in the new culler.\n" "This flag enables use of raytraced occlusion culling test for\n" "client mesh sizes smaller than 4x4x4 map blocks." msgstr "" -"Použijte raytraced occlusion culling v novém culleru. \n" -"Tento příznak umožňuje použití testu raytraced occlusion culling" +"Použijte raytracing v novém occlusion culleru. \n" +"Umožňuje testování occlusion cullingu metodou raytracing pro\n" +"meshe klienta menší než 4x4x4 map bloků." #: src/settings_translation_file.cpp msgid "" @@ -6886,7 +6849,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Whether the window is maximized." -msgstr "" +msgstr "Maximalizuje okno." #: src/settings_translation_file.cpp msgid "" @@ -6930,7 +6893,7 @@ msgstr "Tloušťka čar výběrového rámečku kolem bloků." #: src/settings_translation_file.cpp msgid "Window maximized" -msgstr "" +msgstr "Maximalizované okno" #: src/settings_translation_file.cpp msgid "" From e7bb7b2fc1237952231d1243c7377420a0e67c9c Mon Sep 17 00:00:00 2001 From: grorp Date: Tue, 22 Oct 2024 11:40:31 +0200 Subject: [PATCH 085/178] Added translation using Weblate (German) --- android/app/src/main/res/values-de/strings.xml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 android/app/src/main/res/values-de/strings.xml diff --git a/android/app/src/main/res/values-de/strings.xml b/android/app/src/main/res/values-de/strings.xml new file mode 100644 index 000000000..a6b3daec9 --- /dev/null +++ b/android/app/src/main/res/values-de/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file From 009e04fb63e2527dc46b2a4aa339bc14af3b9799 Mon Sep 17 00:00:00 2001 From: grorp Date: Tue, 22 Oct 2024 09:40:44 +0000 Subject: [PATCH 086/178] Translated using Weblate (German) Currently translated at 100.0% (8 of 8 strings) Translation: Minetest/Minetest Android Translate-URL: https://hosted.weblate.org/projects/minetest/minetest-android/de/ --- android/app/src/main/res/values-de/strings.xml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/android/app/src/main/res/values-de/strings.xml b/android/app/src/main/res/values-de/strings.xml index a6b3daec9..e5d7e21de 100644 --- a/android/app/src/main/res/values-de/strings.xml +++ b/android/app/src/main/res/values-de/strings.xml @@ -1,2 +1,11 @@ - \ No newline at end of file + + Minetest + Lädt… + Minetest lädt + Weniger als 1 Minute… + Fertig + Kein Web-Browser gefunden + Allgemeine Benachrichtigung + Benachrichtigungen von Minetest + \ No newline at end of file From 0cf3df7f3eced93ab0ee5399aa03845ef55a5ba5 Mon Sep 17 00:00:00 2001 From: Linerly Date: Tue, 22 Oct 2024 10:16:06 +0000 Subject: [PATCH 087/178] Translated using Weblate (Indonesian) Currently translated at 100.0% (8 of 8 strings) Translation: Minetest/Minetest Android Translate-URL: https://hosted.weblate.org/projects/minetest/minetest-android/id/ --- android/app/src/main/res/values-in/strings.xml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/android/app/src/main/res/values-in/strings.xml b/android/app/src/main/res/values-in/strings.xml index a6b3daec9..ddd1bf59d 100644 --- a/android/app/src/main/res/values-in/strings.xml +++ b/android/app/src/main/res/values-in/strings.xml @@ -1,2 +1,11 @@ - \ No newline at end of file + + Tidak ada peramban web yang ditemukan + Selesai + Minetest + Memuat… + Notifikasi umum + Kurang dari 1 menit… + Notifikasi dari Minetest + Memuat Minetest… + \ No newline at end of file From 10b0d45ec91b820200e0ce40c87be83afa43331e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Allan=20Nordh=C3=B8y?= Date: Tue, 22 Oct 2024 12:34:01 +0200 Subject: [PATCH 088/178] =?UTF-8?q?Added=20translation=20using=20Weblate?= =?UTF-8?q?=20(Norwegian=20Bokm=C3=A5l)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/app/src/main/res/values-nb-rNO/strings.xml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 android/app/src/main/res/values-nb-rNO/strings.xml diff --git a/android/app/src/main/res/values-nb-rNO/strings.xml b/android/app/src/main/res/values-nb-rNO/strings.xml new file mode 100644 index 000000000..a6b3daec9 --- /dev/null +++ b/android/app/src/main/res/values-nb-rNO/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file From 8f2a6863a81b76501b1fbd808c2d19c75c035843 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Allan=20Nordh=C3=B8y?= Date: Tue, 22 Oct 2024 10:36:26 +0000 Subject: [PATCH 089/178] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegi?= =?UTF-8?q?an=20Bokm=C3=A5l)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 53.5% (715 of 1335 strings) --- android/app/src/main/res/values-nb-rNO/strings.xml | 11 ++++++++++- po/nb/luanti.po | 11 ++++++----- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/android/app/src/main/res/values-nb-rNO/strings.xml b/android/app/src/main/res/values-nb-rNO/strings.xml index a6b3daec9..1d3e0427c 100644 --- a/android/app/src/main/res/values-nb-rNO/strings.xml +++ b/android/app/src/main/res/values-nb-rNO/strings.xml @@ -1,2 +1,11 @@ - \ No newline at end of file + + Minetest + Laster inn … + Generell merknad + Merknader fra Minetest + Mindre enn ett minutt … + Ferdig + Fant ingen nettleser + Laster inn Minetest … + \ No newline at end of file diff --git a/po/nb/luanti.po b/po/nb/luanti.po index 508c1a9f6..c60ac6027 100644 --- a/po/nb/luanti.po +++ b/po/nb/luanti.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Norwegian Bokmål (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-07-11 15:14+0200\n" -"PO-Revision-Date: 2024-05-04 14:07+0000\n" -"Last-Translator: XqcD445 \n" +"PO-Revision-Date: 2024-10-22 11:01+0000\n" +"Last-Translator: Allan Nordhøy \n" "Language-Team: Norwegian Bokmål \n" "Language: nb\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.5.3\n" +"X-Generator: Weblate 5.8-rc\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -184,8 +184,9 @@ msgid "Downloading..." msgstr "Laster ned..." #: builtin/mainmenu/content/dlg_contentdb.lua +#, fuzzy msgid "Error getting dependencies for package" -msgstr "" +msgstr "Kunne ikke hente pakkens avhengigheter" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "Games" @@ -464,7 +465,7 @@ msgstr "Dekorasjoner" #: builtin/mainmenu/dlg_create_world.lua msgid "Desert temples" -msgstr "" +msgstr "Ørken-maler" #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." From 9f910ab8730d9cd443d0b0230d054e155bf9a6de Mon Sep 17 00:00:00 2001 From: Muhammad Rifqi Priyo Susanto Date: Tue, 22 Oct 2024 22:35:37 +0000 Subject: [PATCH 090/178] Translated using Weblate (Indonesian) Currently translated at 100.0% (8 of 8 strings) Translation: Minetest/Minetest Android Translate-URL: https://hosted.weblate.org/projects/minetest/minetest-android/id/ --- android/app/src/main/res/values-in/strings.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/android/app/src/main/res/values-in/strings.xml b/android/app/src/main/res/values-in/strings.xml index ddd1bf59d..cb7092f58 100644 --- a/android/app/src/main/res/values-in/strings.xml +++ b/android/app/src/main/res/values-in/strings.xml @@ -1,11 +1,11 @@ - Tidak ada peramban web yang ditemukan + Tidak ditemukan peramban web Selesai Minetest Memuat… - Notifikasi umum + Pemberitahuan umum Kurang dari 1 menit… - Notifikasi dari Minetest + Pemberitahuan dari Minetest Memuat Minetest… \ No newline at end of file From cd81b4db7e71115ee183ad10c5565ff1430713e0 Mon Sep 17 00:00:00 2001 From: "Yaya - Nurul Azeera Hidayah @ Muhammad Nur Hidayat Yasuyoshi" Date: Tue, 22 Oct 2024 11:31:08 +0000 Subject: [PATCH 091/178] Translated using Weblate (Malay) Currently translated at 100.0% (8 of 8 strings) Translation: Minetest/Minetest Android Translate-URL: https://hosted.weblate.org/projects/minetest/minetest-android/ms/ --- android/app/src/main/res/values-ms/strings.xml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/android/app/src/main/res/values-ms/strings.xml b/android/app/src/main/res/values-ms/strings.xml index a6b3daec9..d19b4e168 100644 --- a/android/app/src/main/res/values-ms/strings.xml +++ b/android/app/src/main/res/values-ms/strings.xml @@ -1,2 +1,11 @@ - \ No newline at end of file + + Minetest + Pemberitahuan dari Minetest + Memuatkan Minetest… + Kurang dari 1 minit… + Tiada pelayar sesawang dijumpai + Memuatkan… + Pemberitahuan umum + Selesai + \ No newline at end of file From cb5723e409cc5aae58f05995a1f327d049bb40db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jiri=20Gr=C3=B6nroos?= Date: Wed, 23 Oct 2024 17:44:39 +0000 Subject: [PATCH 092/178] Translated using Weblate (Finnish) Currently translated at 25.6% (343 of 1335 strings) --- po/fi/luanti.po | 111 +++++++++++++++++++++--------------------------- 1 file changed, 49 insertions(+), 62 deletions(-) diff --git a/po/fi/luanti.po b/po/fi/luanti.po index 4d4adb71a..8cccc3284 100644 --- a/po/fi/luanti.po +++ b/po/fi/luanti.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-07-11 15:14+0200\n" -"PO-Revision-Date: 2022-09-07 21:01+0000\n" -"Last-Translator: Hraponssi \n" +"PO-Revision-Date: 2024-10-24 18:15+0000\n" +"Last-Translator: Jiri Grönroos \n" "Language-Team: Finnish \n" "Language: fi\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.14.1-dev\n" +"X-Generator: Weblate 5.8.2-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -137,12 +137,11 @@ msgstr "Tuemme protokollaversioita välillä $1 ja $2." #: builtin/mainmenu/content/contentdb.lua msgid "Error installing \"$1\": $2" -msgstr "" +msgstr "Virhe asentaessa \"$1\": $2" #: builtin/mainmenu/content/contentdb.lua -#, fuzzy msgid "Failed to download \"$1\"" -msgstr "Epäonnistui ladata $1" +msgstr "Kohteen \"$1\" lataaminen epäonnistui" #: builtin/mainmenu/content/contentdb.lua msgid "Failed to download $1" @@ -228,7 +227,7 @@ msgstr "Tekstuuripaketit" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "The package $1 was not found." -msgstr "" +msgstr "Pakettia $1 ei löytynyt." #: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua msgid "Uninstall" @@ -248,7 +247,7 @@ msgstr "Katso lisätietoja verkkoselaimessa" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "You need to install a game before you can install a mod" -msgstr "" +msgstr "Sinun tulee asentaa peli, ennen kuin voit asentaa modin" #: builtin/mainmenu/content/dlg_install.lua msgid "$1 and $2 dependencies will be installed." @@ -668,7 +667,7 @@ msgstr "Rekisteröidy" #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "Dismiss" -msgstr "" +msgstr "Hylkää" #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "" @@ -688,9 +687,8 @@ msgid "Minetest Game is no longer installed by default" msgstr "" #: builtin/mainmenu/dlg_reinstall_mtg.lua -#, fuzzy msgid "Reinstall Minetest Game" -msgstr "Asenna toinen peli" +msgstr "Asenna Minetest Game uudelleen" #: builtin/mainmenu/dlg_rename_modpack.lua msgid "Accept" @@ -766,7 +764,7 @@ msgstr "Valitse tiedosto" #: builtin/mainmenu/settings/components.lua msgid "Set" -msgstr "" +msgstr "Aseta" #: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua msgid "(No description of setting given)" @@ -835,16 +833,15 @@ msgstr "" #: builtin/mainmenu/settings/dlg_settings.lua msgid "(Use system language)" -msgstr "" +msgstr "(Käytä järjestelmän kieltä)" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Accessibility" -msgstr "" +msgstr "Esteettömyys" #: builtin/mainmenu/settings/dlg_settings.lua -#, fuzzy msgid "Back" -msgstr "Taakse" +msgstr "Takaisin" #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/settings_translation_file.cpp @@ -862,20 +859,19 @@ msgstr "Ohjaimet" #: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp msgid "General" -msgstr "" +msgstr "Yleiset" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Movement" -msgstr "" +msgstr "Liikkuminen" #: builtin/mainmenu/settings/dlg_settings.lua -#, fuzzy msgid "Reset setting to default" -msgstr "Palauta oletus" +msgstr "Palauta oletusarvoon" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Reset setting to default ($1)" -msgstr "" +msgstr "Palauta oletusarvoon ($1)" #: builtin/mainmenu/settings/dlg_settings.lua builtin/mainmenu/tab_online.lua msgid "Search" @@ -883,7 +879,7 @@ msgstr "Etsi" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Show advanced settings" -msgstr "" +msgstr "Näytä lisäasetukset" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Show technical names" @@ -989,18 +985,16 @@ msgid "Browse online content" msgstr "Selaa sisältöä verkossa" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Browse online content [$1]" -msgstr "Selaa sisältöä verkossa" +msgstr "Selaa sisältöä verkossa [$1]" #: builtin/mainmenu/tab_content.lua msgid "Content" msgstr "Sisältö" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Content [$1]" -msgstr "Sisältö" +msgstr "Sisältö [$1]" #: builtin/mainmenu/tab_content.lua msgid "Disable Texture Pack" @@ -1065,13 +1059,15 @@ msgstr "Asenna pelejä ContentDB:stä" #: builtin/mainmenu/tab_local.lua msgid "Minetest doesn't come with a game by default." -msgstr "" +msgstr "Minetest ei sisällä oletuksena peliä." #: builtin/mainmenu/tab_local.lua msgid "" "Minetest is a game-creation platform that allows you to play many different " "games." msgstr "" +"Minetest on pelinluontialusta, joka mahdollistaa monien erilaisten pelien " +"pelaamisen." #: builtin/mainmenu/tab_local.lua msgid "New" @@ -1107,7 +1103,7 @@ msgstr "Aloita peli" #: builtin/mainmenu/tab_local.lua msgid "You need to install a game before you can create a world." -msgstr "" +msgstr "Sinun tulee asentaa peli, ennen kuin voit luoda maailman." #: builtin/mainmenu/tab_online.lua msgid "Address" @@ -2590,13 +2586,12 @@ msgid "Builtin" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Camera" -msgstr "Vaihda kameraa" +msgstr "Kamera" #: src/settings_translation_file.cpp msgid "Camera smoothing" -msgstr "" +msgstr "Kameran sulavoittaminen" #: src/settings_translation_file.cpp msgid "Camera smoothing in cinematic mode" @@ -2663,7 +2658,7 @@ msgstr "Chat-komennnot" #: src/settings_translation_file.cpp msgid "Chat font size" -msgstr "" +msgstr "Keskustelun fontin koko" #: src/settings_translation_file.cpp msgid "Chat log level" @@ -2745,7 +2740,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Clouds in menu" -msgstr "" +msgstr "Pilvet valikossa" #: src/settings_translation_file.cpp msgid "Colored fog" @@ -2826,7 +2821,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Content Repository" -msgstr "" +msgstr "Sisällön tietovarasto" #: src/settings_translation_file.cpp msgid "ContentDB Flag Blacklist" @@ -3164,9 +3159,8 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Enable Post Processing" -msgstr "Käytä konsoli-ikkunaa" +msgstr "Ota jälkikäsittely käyttöön" #: src/settings_translation_file.cpp msgid "Enable Raytraced Culling" @@ -3238,9 +3232,8 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Enable touchscreen" -msgstr "Koko näyttö" +msgstr "Ota kosketusnäyttö käyttöön" #: src/settings_translation_file.cpp msgid "" @@ -3464,7 +3457,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Font size" -msgstr "" +msgstr "Fontin koko" #: src/settings_translation_file.cpp msgid "Font size divisible by" @@ -3504,7 +3497,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Format of screenshots." -msgstr "" +msgstr "Kuvakaappausten muoto." #: src/settings_translation_file.cpp msgid "Formspec Full-Screen Background Color" @@ -3931,7 +3924,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Invert mouse" -msgstr "" +msgstr "Käänteinen hiiri" #: src/settings_translation_file.cpp msgid "Invert mouse wheel (scroll) direction for item selection in hotbar." @@ -4040,7 +4033,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Keyboard and Mouse" -msgstr "" +msgstr "Näppäimistö ja hiiri" #: src/settings_translation_file.cpp msgid "Kick players who sent more than X messages per 10 seconds." @@ -4805,7 +4798,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Pause on lost window focus" -msgstr "" +msgstr "Keskeytä jos ikkunan kohdistus katoaa" #: src/settings_translation_file.cpp msgid "Per-player limit of queued blocks load from disk" @@ -4833,7 +4826,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Post Processing" -msgstr "" +msgstr "Jälkikäsittely" #: src/settings_translation_file.cpp msgid "" @@ -4914,9 +4907,8 @@ msgid "Regular font path" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Remember screen size" -msgstr "Tallenna näytön koko automaattisesti" +msgstr "Muista näytön koko" #: src/settings_translation_file.cpp msgid "Remote media" @@ -5037,9 +5029,8 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Screen" -msgstr "Näyttö:" +msgstr "Näyttö" #: src/settings_translation_file.cpp msgid "Screen height" @@ -5069,9 +5060,8 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Screenshots" -msgstr "Kuvakaappaus" +msgstr "Kuvakaappaukset" #: src/settings_translation_file.cpp msgid "Seabed noise" @@ -5572,7 +5562,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "The URL for the content repository" -msgstr "" +msgstr "Sisällön tietovaraston URL-osoite" #: src/settings_translation_file.cpp msgid "The dead zone of the joystick" @@ -5750,22 +5740,19 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Tooltip delay" -msgstr "" +msgstr "Työkaluvihjeen viive" #: src/settings_translation_file.cpp -#, fuzzy msgid "Touchscreen" -msgstr "Koko näyttö" +msgstr "Kosketusnäyttö" #: src/settings_translation_file.cpp -#, fuzzy msgid "Touchscreen sensitivity" -msgstr "Hiiren herkkyys" +msgstr "Kosketusnäytön herkkyys" #: src/settings_translation_file.cpp -#, fuzzy msgid "Touchscreen sensitivity multiplier." -msgstr "Hiiren herkkyys" +msgstr "Kosketusnäytön herkkyyden kerroin." #: src/settings_translation_file.cpp msgid "Tradeoffs for performance" @@ -5994,7 +5981,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Volume" -msgstr "" +msgstr "Äänenvoimakkuus" #: src/settings_translation_file.cpp msgid "Volume multiplier when the window is unfocused." @@ -6008,7 +5995,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Volume when unfocused" -msgstr "" +msgstr "Äänenvoimakkuus kun ei kohdistettu" #: src/settings_translation_file.cpp msgid "Volumetric lighting" @@ -6120,7 +6107,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Whether the window is maximized." -msgstr "" +msgstr "Onko ikkuna suurennettu." #: src/settings_translation_file.cpp msgid "" @@ -6155,7 +6142,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Window maximized" -msgstr "" +msgstr "Suurennettu ikkuna" #: src/settings_translation_file.cpp msgid "" From 2633f8547329dec3a97da8a4c76b6e14655e8c32 Mon Sep 17 00:00:00 2001 From: Unacceptium Date: Fri, 25 Oct 2024 10:22:42 +0200 Subject: [PATCH 093/178] Added translation using Weblate (Hungarian) --- android/app/src/main/res/values-hu/strings.xml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 android/app/src/main/res/values-hu/strings.xml diff --git a/android/app/src/main/res/values-hu/strings.xml b/android/app/src/main/res/values-hu/strings.xml new file mode 100644 index 000000000..a6b3daec9 --- /dev/null +++ b/android/app/src/main/res/values-hu/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file From 67740b0e59aefe86892bebeccb22f8e35d896eaf Mon Sep 17 00:00:00 2001 From: Unacceptium Date: Fri, 25 Oct 2024 08:27:40 +0000 Subject: [PATCH 094/178] Translated using Weblate (Hungarian) Currently translated at 97.2% (1298 of 1335 strings) --- .../app/src/main/res/values-hu/strings.xml | 11 +++- po/hu/luanti.po | 62 ++++++++++++++----- 2 files changed, 55 insertions(+), 18 deletions(-) diff --git a/android/app/src/main/res/values-hu/strings.xml b/android/app/src/main/res/values-hu/strings.xml index a6b3daec9..4cf74bc4e 100644 --- a/android/app/src/main/res/values-hu/strings.xml +++ b/android/app/src/main/res/values-hu/strings.xml @@ -1,2 +1,11 @@ - \ No newline at end of file + + Betöltés… + Általános értesítés + Értesítések a Minetest-től + Minetest betöltése… + Kész + Nem található webböngésző + Minetest + Kevesebb, mint 1 perc… + \ No newline at end of file diff --git a/po/hu/luanti.po b/po/hu/luanti.po index 50ab03fed..59d2f2cd5 100644 --- a/po/hu/luanti.po +++ b/po/hu/luanti.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Hungarian (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-07-11 15:14+0200\n" -"PO-Revision-Date: 2024-06-28 05:09+0000\n" -"Last-Translator: Kisbenedek Márton \n" +"PO-Revision-Date: 2024-10-26 09:15+0000\n" +"Last-Translator: Unacceptium \n" "Language-Team: Hungarian \n" "Language: hu\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.7-dev\n" +"X-Generator: Weblate 5.8.2-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -185,7 +185,7 @@ msgstr "Letöltés…" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "Error getting dependencies for package" -msgstr "" +msgstr "Hiba történt a csomag függőségeinek beszerzésekor" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "Games" @@ -463,7 +463,7 @@ msgstr "Dekorációk" #: builtin/mainmenu/dlg_create_world.lua msgid "Desert temples" -msgstr "" +msgstr "Sivatag sablonok" #: builtin/mainmenu/dlg_create_world.lua msgid "Development Test is meant for developers." @@ -474,6 +474,8 @@ msgid "" "Different dungeon variant generated in desert biomes (only if dungeons " "enabled)" msgstr "" +"Különböző tömlöc változatok sivatag biomokban (csak ha a tömlöcök " +"engedélyezettek)" #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" @@ -1080,6 +1082,8 @@ msgid "" "Minetest is a game-creation platform that allows you to play many different " "games." msgstr "" +"A Minetest egy játék-létrehozó felület, amely lehetővé teszi sok különböző " +"játék játszását." #: builtin/mainmenu/tab_local.lua msgid "New" @@ -1943,6 +1947,7 @@ msgstr "Weblap megnyitása nem sikerült" #: src/client/shader.cpp msgid "Shaders are enabled but GLSL is not supported by the driver." msgstr "" +"Az árnyalók engedélyezve vannak, de a GLSL nem támogatott a meghajtó által." #. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" #: src/content/mod_configuration.cpp @@ -2139,11 +2144,11 @@ msgstr "Nyomj meg egy gombot" #: src/gui/guiOpenURL.cpp msgid "Open" -msgstr "" +msgstr "Nyitás" #: src/gui/guiOpenURL.cpp msgid "Open URL?" -msgstr "" +msgstr "URL megnyitása?" #: src/gui/guiOpenURL.cpp #, fuzzy @@ -2442,7 +2447,7 @@ msgstr "Haladó" #: src/settings_translation_file.cpp msgid "Allows liquids to be translucent." -msgstr "" +msgstr "A folyadékok áttetszőségét teszi lehetővé." #: src/settings_translation_file.cpp msgid "" @@ -2503,6 +2508,7 @@ msgid "Apple trees noise" msgstr "Almafa zaj" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Apply dithering to reduce color banding artifacts.\n" "Dithering significantly increases the size of losslessly-compressed\n" @@ -2512,6 +2518,15 @@ msgid "" "With OpenGL ES, dithering only works if the shader supports high\n" "floating-point precision and it may have a higher performance impact." msgstr "" +"DITHERING-et alkalmaz a színsávosodás csökkentéséhez.\n" +"a DITHERING feltűnően növeli a veszteségmentesen\n" +"tömörített képernyőképek méretét, de hibásan\n" +"működik, ha a kijelző, vagy az operációs rendszer\n" +"önmagától is DITHERING-et alkalmaz, vagy ha a\n" +"színcsatornák nem hozzávetőlegesek 8 bithez.\n" +"OpenGL ES-el a DITHERING csak akkor működik, ha\n" +"az árnyalók támogatják a precíz lebegő-pontos számítást, így tőbb erőforrást " +"használ." #: src/settings_translation_file.cpp msgid "Arm inertia" @@ -2861,6 +2876,9 @@ msgid "" "Comma-separated list of AL and ALC extensions that should not be used.\n" "Useful for testing. See al_extensions.[h,cpp] for details." msgstr "" +"Vesszővel elválasztott lista az AL és ALC bővítményekről, amiket nem akar " +"használni.\n" +"Tesztelésnél hasznos. nézze az al_extensions.[h,cpp]-t leírásért." #: src/settings_translation_file.cpp msgid "" @@ -3492,16 +3510,17 @@ msgstr "Az elforgatott hálók irányának gyorsítótárazásának engedélyez #: src/settings_translation_file.cpp msgid "Enables debug and error-checking in the OpenGL driver." -msgstr "" +msgstr "Engedélyezi a debug-ot és a hibakeresést az OpenGL meghajtón." #: src/settings_translation_file.cpp msgid "Enables the post processing pipeline." -msgstr "" +msgstr "Engedélyezi az utófeldogozó motort (post-processing)." #: src/settings_translation_file.cpp msgid "" "Enables touchscreen mode, allowing you to play the game with a touchscreen." msgstr "" +"Engedélyezi az érintőkijelzős módot, ami által érintőkijelzővel is játszhat." #: src/settings_translation_file.cpp msgid "" @@ -5407,13 +5426,12 @@ msgid "Proportion of large caves that contain liquid." msgstr "Nagy barlangok aránya amelyek folyadékot tartalmaznak." #: src/settings_translation_file.cpp -#, fuzzy msgid "Protocol version minimum" -msgstr "Protokollverzió-eltérés. " +msgstr "Minimum Protokollverzió" #: src/settings_translation_file.cpp msgid "Punch gesture" -msgstr "" +msgstr "Ütési gesztus" #: src/settings_translation_file.cpp msgid "" @@ -5434,7 +5452,7 @@ msgstr "Véletlenszerű bemenet" #: src/settings_translation_file.cpp msgid "Random mod load order" -msgstr "" +msgstr "Véletlenszerű mod betőltési sorrend" #: src/settings_translation_file.cpp msgid "Recent Chat Messages" @@ -6295,7 +6313,7 @@ msgstr "" msgid "" "The delay in milliseconds after which a touch interaction is considered a " "long tap." -msgstr "" +msgstr "A késleltetés, ami után egy rövid érintés hosszú nyomásnak minősül." #: src/settings_translation_file.cpp msgid "" @@ -6315,6 +6333,15 @@ msgid "" "Known from the classic Minetest mobile controls.\n" "Combat is more or less impossible." msgstr "" +"A játékos/entitás ütési gesztus.\n" +"Felülírhatják modok és játék is.\n" +"\n" +"*rövid_érintés\n" +"Könnyű használni, ismert sok más játékból, amit nem nevezünk meg.\n" +"\n" +"*hosszú_érintés\n" +"ismert a klasszikus Minetest telefonos irányitásból.\n" +"az ütés valamivel nehezebb lessz." #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" @@ -6477,7 +6504,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Threshold for long taps" -msgstr "" +msgstr "A hosszú érintés küszöbe" #: src/settings_translation_file.cpp msgid "" @@ -6803,8 +6830,9 @@ msgid "Volume" msgstr "Hangerő" #: src/settings_translation_file.cpp +#, fuzzy msgid "Volume multiplier when the window is unfocused." -msgstr "" +msgstr "Hangerő többszörös kifókuszált ablak esetén." #: src/settings_translation_file.cpp msgid "" From 47d551d7800fb1dff25675556b7fabaecd1c93af Mon Sep 17 00:00:00 2001 From: "updatepo.sh" Date: Mon, 28 Oct 2024 19:57:02 +0100 Subject: [PATCH 095/178] Update minetest.conf.example and settings_translation_file.cpp --- minetest.conf.example | 226 ++++++++++++++++-------------- src/settings_translation_file.cpp | 105 +++++++------- 2 files changed, 182 insertions(+), 149 deletions(-) diff --git a/minetest.conf.example b/minetest.conf.example index efe9c19bd..6e3e698be 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -7,7 +7,7 @@ # ../minetest.conf # ../../minetest.conf # Any other path can be chosen by passing the path as a parameter -# to the program, eg. "minetest.exe --config ../minetest.conf.example". +# to the program, eg. "luanti.exe --config ../minetest.conf.example". # Further documentation: # https://wiki.minetest.net/ @@ -85,9 +85,11 @@ ## Touchscreen -# Enables touchscreen mode, allowing you to play the game with a touchscreen. -# type: bool -# enable_touch = true +# Enables the touchscreen controls, allowing you to play the game with a touchscreen. +# "auto" means that the touchscreen controls will be enabled and disabled +# automatically depending on the last used input method. +# type: enum values: auto, true, false +# touch_controls = auto # Touchscreen sensitivity multiplier. # type: float min: 0.001 max: 10 @@ -123,7 +125,7 @@ # Easy to use and well-known from other games that shall not be named. # # * long_tap -# Known from the classic Minetest mobile controls. +# Known from the classic Luanti mobile controls. # Combat is more or less impossible. # type: enum values: short_tap, long_tap # touch_punch_gesture = short_tap @@ -190,37 +192,6 @@ # type: int min: 1 max: 8 # undersampling = 1 -### Graphics Effects - -# Allows liquids to be translucent. -# type: bool -# translucent_liquids = true - -# Leaves style: -# - Fancy: all faces visible -# - Simple: only outer faces, if defined special_tiles are used -# - Opaque: disable transparency -# type: enum values: fancy, simple, opaque -# leaves_style = fancy - -# Connects glass if supported by node. -# type: bool -# connected_glass = false - -# Enable smooth lighting with simple ambient occlusion. -# Disable for speed or for different looks. -# type: bool -# smooth_lighting = true - -# Enables tradeoffs that reduce CPU load or increase rendering performance -# at the expense of minor visual glitches that do not impact game playability. -# type: bool -# performance_tradeoffs = false - -# Adds particles when digging a node. -# type: bool -# enable_particles = true - ### 3D # 3D support. @@ -347,6 +318,10 @@ # type: bool # enable_3d_clouds = true +# Use smooth cloud shading. +# type: bool +# soft_clouds = false + ### Filtering and Antialiasing # Use mipmaps when scaling textures. May slightly increase performance, @@ -411,12 +386,35 @@ # type: bool # enable_raytraced_culling = true -## Shaders +## Effects -# Shaders allow advanced visual effects and may increase performance on some video -# cards. +# Allows liquids to be translucent. # type: bool -# enable_shaders = true +# translucent_liquids = true + +# Leaves style: +# - Fancy: all faces visible +# - Simple: only outer faces +# - Opaque: disable transparency +# type: enum values: fancy, simple, opaque +# leaves_style = fancy + +# Connects glass if supported by node. +# type: bool +# connected_glass = false + +# Enable smooth lighting with simple ambient occlusion. +# type: bool +# smooth_lighting = true + +# Enables tradeoffs that reduce CPU load or increase rendering performance +# at the expense of minor visual glitches that do not impact game playability. +# type: bool +# performance_tradeoffs = false + +# Adds particles when digging a node. +# type: bool +# enable_particles = true ### Waving Nodes @@ -547,41 +545,29 @@ # type: bool # debanding = true -### Bloom - # Set to true to enable bloom effect. # Bright colors will bleed over the neighboring objects. # type: bool # enable_bloom = false -# Set to true to render debugging breakdown of the bloom effect. -# In debug mode, the screen is split into 4 quadrants: -# top-left - processed base image, top-right - final image -# bottom-left - raw base image, bottom-right - bloom texture. -# type: bool -# enable_bloom_debug = false - -# Defines how much bloom is applied to the rendered image -# Smaller values make bloom more subtle -# Range: from 0.01 to 1.0, default: 0.05 -# type: float min: 0.01 max: 1 -# bloom_intensity = 0.05 - -# Defines the magnitude of bloom overexposure. -# Range: from 0.1 to 10.0, default: 1.0 -# type: float min: 0.1 max: 10 -# bloom_strength_factor = 1.0 - -# Logical value that controls how far the bloom effect spreads -# from the bright objects. -# Range: from 0.1 to 8, default: 1 -# type: float min: 0.1 max: 8 -# bloom_radius = 1 - # Set to true to enable volumetric lighting effect (a.k.a. "Godrays"). # type: bool # enable_volumetric_lighting = false +### Other Effects + +# Simulate translucency when looking at foliage in the sunlight. +# type: bool +# enable_translucent_foliage = false + +# Apply specular shading to nodes. +# type: bool +# enable_node_specular = false + +# When enabled, liquid reflections are simulated. +# type: bool +# enable_water_reflections = false + ## Audio # Volume of all sounds. @@ -609,6 +595,11 @@ ### GUI +# When enabled, the GUI is optimized to be more usable on touchscreens. +# Whether this is enabled by default depends on your hardware form-factor. +# type: bool +# touch_gui = false + # Scale GUI by a user specified value. # Use a nearest-neighbor-anti-alias filter to scale the GUI. # This will smooth over some of the rough edges, and blend @@ -617,6 +608,10 @@ # type: float min: 0.5 max: 20 # gui_scaling = 1.0 +# Enables smooth scrolling. +# type: bool +# smooth_scrolling = true + # Enables animation of inventory items. # type: bool # inventory_items_animations = false @@ -665,6 +660,19 @@ # type: bool # show_nametag_backgrounds = true +# Whether to show the client debug info (has the same effect as hitting F5). +# type: bool +# show_debug = false + +# Radius to use when the block bounds HUD feature is set to near blocks. +# type: int min: 0 max: 1000 +# show_block_bounds_radius_near = 4 + +# Maximum proportion of current window to be used for hotbar. +# Useful if there's something to be displayed right or left of hotbar. +# type: float min: 0.001 max: 1 +# hud_hotbar_max_width = 1.0 + ### Chat # Maximum number of recent chat messages to show @@ -683,11 +691,6 @@ # type: int min: 0 max: 255 # console_alpha = 200 -# Maximum proportion of current window to be used for hotbar. -# Useful if there's something to be displayed right or left of hotbar. -# type: float min: 0.001 max: 1 -# hud_hotbar_max_width = 1.0 - # Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console output. # type: bool # clickable_chat_weblinks = true @@ -707,7 +710,7 @@ # type: string # contentdb_url = https://content.minetest.net -# If enabled and you have ContentDB packages installed, Minetest may contact ContentDB to +# If enabled and you have ContentDB packages installed, Luanti may contact ContentDB to # check for package updates when opening the mainmenu. # type: bool # contentdb_enable_updates_indicator = true @@ -716,7 +719,7 @@ # "nonfree" can be used to hide packages which do not qualify as 'free software', # as defined by the Free Software Foundation. # You can also specify content ratings. -# These flags are independent from Minetest versions, +# These flags are independent from Luanti versions, # so see a full list at https://content.minetest.net/help/content_flags/ # type: string # contentdb_flag_blacklist = nonfree, desktop_default @@ -745,7 +748,7 @@ # type: bool # enable_split_login_register = true -# URL to JSON file which provides information about the newest Minetest release. +# URL to JSON file which provides information about the newest Luanti release. # If this is empty the engine will never check for updates. # type: string # update_information_url = https://www.minetest.net/release_info.json @@ -762,7 +765,7 @@ # Name of the server, to be displayed when players join and in the serverlist. # type: string -# server_name = Minetest server +# server_name = Luanti server # Description of server, to be displayed when players join and in the serverlist. # type: string @@ -780,6 +783,10 @@ # type: bool # server_announce = false +# Send names of online players to the serverlist. If disabled only the player count is revealed. +# type: bool +# server_announce_send_players = true + # Announce to this serverlist. # type: string # serverlist_url = servers.minetest.net @@ -817,7 +824,7 @@ # Older clients are compatible in the sense that they will not crash when connecting # to new servers, but they may not support all new features that you are expecting. # This allows for more fine-grained control than strict_protocol_version_checking. -# Minetest still enforces its own internal minimum, and enabling +# Luanti still enforces its own internal minimum, and enabling # strict_protocol_version_checking will effectively override this. # type: int min: 1 max: 65535 # protocol_version_min = 1 @@ -854,9 +861,15 @@ # type: string # basic_privs = interact, shout -# If enabled, disable cheat prevention in multiplayer. -# type: bool -# disable_anticheat = false +# Server anticheat configuration. +# Flags are positive. Uncheck the flag to disable corresponding anticheat module. +# type: flags possible values: digging, interaction, movement +# anticheat_flags = digging,interaction,movement + +# Tolerance of movement cheat detector. +# Increase the value if players experience stuttery movement. +# type: float min: 1 +# anticheat_movement_tolerance = 1.0 # If enabled, actions are recorded for rollback. # This option is only read when server starts. @@ -1013,7 +1026,7 @@ # Global map generation attributes. # In Mapgen v6 the 'decorations' flag controls all decorations except trees # and jungle grass, in all other mapgens this flag controls all decorations. -# type: flags possible values: caves, dungeons, light, decorations, biomes, ores, nocaves, nodungeons, nolight, nodecorations, nobiomes, noores +# type: flags possible values: caves, dungeons, light, decorations, biomes, ores # mg_flags = caves,dungeons,light,decorations,biomes,ores ## Biome API @@ -1073,7 +1086,7 @@ ## Mapgen V5 # Map generation attributes specific to Mapgen v5. -# type: flags possible values: caverns, nocaverns +# type: flags possible values: caverns # mgv5_spflags = caverns # Controls width of tunnels, a smaller value creates wider tunnels. @@ -1240,7 +1253,7 @@ # When the 'snowbiomes' flag is enabled jungles are automatically enabled and # the 'jungles' flag is ignored. # The 'temples' flag disables generation of desert temples. Normal dungeons will appear instead. -# type: flags possible values: jungles, biomeblend, mudflow, snowbiomes, flat, trees, temples, nojungles, nobiomeblend, nomudflow, nosnowbiomes, noflat, notrees, notemples +# type: flags possible values: jungles, biomeblend, mudflow, snowbiomes, flat, trees, temples # mgv6_spflags = jungles,biomeblend,mudflow,snowbiomes,noflat,trees,temples # Deserts occur when np_biome exceeds this value. @@ -1411,7 +1424,7 @@ # 'ridges': Rivers. # 'floatlands': Floating land masses in the atmosphere. # 'caverns': Giant caves deep underground. -# type: flags possible values: mountains, ridges, floatlands, caverns, nomountains, noridges, nofloatlands, nocaverns +# type: flags possible values: mountains, ridges, floatlands, caverns # mgv7_spflags = mountains,ridges,nofloatlands,caverns # Y of mountain density gradient zero level. Used to shift mountains vertically. @@ -1705,7 +1718,7 @@ ## Mapgen Carpathian # Map generation attributes specific to Mapgen Carpathian. -# type: flags possible values: caverns, rivers, nocaverns, norivers +# type: flags possible values: caverns, rivers # mgcarpathian_spflags = caverns,norivers # Defines the base ground level. @@ -2001,7 +2014,7 @@ # Map generation attributes specific to Mapgen Flat. # Occasional lakes and hills can be added to the flat world. -# type: flags possible values: lakes, hills, caverns, nolakes, nohills, nocaverns +# type: flags possible values: lakes, hills, caverns # mgflat_spflags = nolakes,nohills,nocaverns # Y of flat ground. @@ -2163,7 +2176,7 @@ # Map generation attributes specific to Mapgen Fractal. # 'terrain' enables the generation of non-fractal terrain: # ocean, islands and underground. -# type: flags possible values: terrain, noterrain +# type: flags possible values: terrain # mgfractal_spflags = terrain # Controls width of tunnels, a smaller value creates wider tunnels. @@ -2366,7 +2379,7 @@ # 'vary_river_depth': If enabled, low humidity and high heat causes rivers # to become shallower and occasionally dry. # 'altitude_dry': Reduces humidity with altitude. -# type: flags possible values: altitude_chill, humid_rivers, vary_river_depth, altitude_dry, noaltitude_chill, nohumid_rivers, novary_river_depth, noaltitude_dry +# type: flags possible values: altitude_chill, humid_rivers, vary_river_depth, altitude_dry # mgvalleys_spflags = altitude_chill,humid_rivers,vary_river_depth,altitude_dry # The vertical distance over which heat drops by 20 if 'altitude_chill' is @@ -2687,7 +2700,7 @@ # instrument.chatcommand = true # Instrument global callback functions on registration. -# (anything you pass to a minetest.register_*() function) +# (anything you pass to a core.register_*() function) # type: bool # instrument.global_callback = true @@ -2724,6 +2737,10 @@ ### Graphics +# Shaders are a fundamental part of rendering and enable advanced visual effects. +# type: bool +# enable_shaders = true + # Path to shader directory. If no path is defined, default location will be used. # type: path # shader_path = @@ -2731,12 +2748,12 @@ # The rendering back-end. # Note: A restart is required after changing this! # OpenGL is the default for desktop, and OGLES2 for Android. -# Shaders are supported by everything but OGLES1. -# type: enum values: , opengl, opengl3, ogles1, ogles2 +# type: enum values: , opengl, opengl3, ogles2 # video_driver = -# Distance in nodes at which transparency depth sorting is enabled -# Use this to limit the performance impact of transparency depth sorting +# Distance in nodes at which transparency depth sorting is enabled. +# Use this to limit the performance impact of transparency depth sorting. +# Set to 0 to disable it entirely. # type: int min: 0 max: 128 # transparency_sorting_distance = 16 @@ -2750,6 +2767,7 @@ # desynchronize_mapblock_texture_animation = false # Enables caching of facedir rotated meshes. +# This is only effective with shaders disabled. # type: bool # enable_mesh_cache = false @@ -2759,7 +2777,7 @@ # mesh_generation_interval = 0 # Number of threads to use for mesh generation. -# Value of 0 (default) will let Minetest autodetect the number of available threads. +# Value of 0 (default) will let Luanti autodetect the number of available threads. # type: int min: 0 max: 8 # mesh_generation_threads = 0 @@ -2810,6 +2828,13 @@ # type: bool # opengl_debug = false +# Set to true to render debugging breakdown of the bloom effect. +# In debug mode, the screen is split into 4 quadrants: +# top-left - processed base image, top-right - final image +# bottom-left - raw base image, bottom-right - bloom texture. +# type: bool +# enable_bloom_debug = false + ### Sound # Comma-separated list of AL and ALC extensions that should not be used. @@ -2920,7 +2945,7 @@ ### Networking # Prometheus listener address. -# If Minetest is compiled with ENABLE_PROMETHEUS option enabled, +# If Luanti is compiled with ENABLE_PROMETHEUS option enabled, # enable metrics listener for Prometheus on that address. # Metrics can be fetched on http://127.0.0.1:30000/metrics # type: string @@ -2940,10 +2965,6 @@ # type: int min: -1 max: 2147483647 # client_mapblock_limit = 7500 -# Whether to show the client debug info (has the same effect as hitting F5). -# type: bool -# show_debug = false - # Maximum number of blocks that are simultaneously sent per client. # The maximum total count is calculated dynamically: # max_total = ceil((#clients + max_users) * per_client / 4) @@ -2955,9 +2976,8 @@ # type: float min: 0 # full_block_send_enable_min_time_from_building = 2.0 -# Maximum number of packets sent per send step, if you have a slow connection -# try reducing it, but don't reduce it to a number below double of targeted -# client number. +# Maximum number of packets sent per send step in the low-level networking code. +# You generally don't need to change this, however busy servers may benefit from a higher number. # type: int min: 1 max: 65535 # max_packets_per_iteration = 1024 @@ -2998,6 +3018,8 @@ # Length of a server tick (the interval at which everything is generally updated), # stated in seconds. # Does not apply to sessions hosted from the client menu. +# This is a lower bound, i.e. server steps may not be shorter than this, but +# they are often longer. # type: float min: 0 max: 1 # dedicated_server_step = 0.09 @@ -3174,7 +3196,7 @@ # type: float min: 0.5 max: 5 # display_density_factor = 1 -# Windows systems only: Start Minetest with the command line window in the background. +# Windows systems only: Start Luanti with the command line window in the background. # Contains the same information as the file debug.txt (default name). # type: bool # enable_console = false diff --git a/src/settings_translation_file.cpp b/src/settings_translation_file.cpp index 6347bc257..8ee6c78d0 100644 --- a/src/settings_translation_file.cpp +++ b/src/settings_translation_file.cpp @@ -35,8 +35,8 @@ fake_function() { gettext("Hotbar: Invert mouse wheel direction"); gettext("Invert mouse wheel (scroll) direction for item selection in hotbar."); gettext("Touchscreen"); - gettext("Enable touchscreen"); - gettext("Enables touchscreen mode, allowing you to play the game with a touchscreen."); + gettext("Touchscreen controls"); + gettext("Enables the touchscreen controls, allowing you to play the game with a touchscreen.\n\"auto\" means that the touchscreen controls will be enabled and disabled\nautomatically depending on the last used input method."); gettext("Touchscreen sensitivity"); gettext("Touchscreen sensitivity multiplier."); gettext("Movement threshold"); @@ -50,7 +50,7 @@ fake_function() { gettext("Virtual joystick triggers Aux1 button"); gettext("Use virtual joystick to trigger \"Aux1\" button.\nIf enabled, virtual joystick will also tap \"Aux1\" button when out of main circle."); gettext("Punch gesture"); - gettext("The gesture for punching players/entities.\nThis can be overridden by games and mods.\n\n* short_tap\nEasy to use and well-known from other games that shall not be named.\n\n* long_tap\nKnown from the classic Minetest mobile controls.\nCombat is more or less impossible."); + gettext("The gesture for punching players/entities.\nThis can be overridden by games and mods.\n\n* short_tap\nEasy to use and well-known from other games that shall not be named.\n\n* long_tap\nKnown from the classic Luanti mobile controls.\nCombat is more or less impossible."); gettext("Graphics and Audio"); gettext("Graphics"); gettext("Screen"); @@ -77,19 +77,6 @@ fake_function() { gettext("View distance in nodes."); gettext("Undersampling"); gettext("Undersampling is similar to using a lower screen resolution, but it applies\nto the game world only, keeping the GUI intact.\nIt should give a significant performance boost at the cost of less detailed image.\nHigher values result in a less detailed image."); - gettext("Graphics Effects"); - gettext("Translucent liquids"); - gettext("Allows liquids to be translucent."); - gettext("Leaves style"); - gettext("Leaves style:\n- Fancy: all faces visible\n- Simple: only outer faces, if defined special_tiles are used\n- Opaque: disable transparency"); - gettext("Connect glass"); - gettext("Connects glass if supported by node."); - gettext("Smooth lighting"); - gettext("Enable smooth lighting with simple ambient occlusion.\nDisable for speed or for different looks."); - gettext("Tradeoffs for performance"); - gettext("Enables tradeoffs that reduce CPU load or increase rendering performance\nat the expense of minor visual glitches that do not impact game playability."); - gettext("Digging particles"); - gettext("Adds particles when digging a node."); gettext("3D"); gettext("3D mode"); gettext("3D support.\nCurrently supported:\n- none: no 3d output.\n- anaglyph: cyan/magenta color 3d.\n- interlaced: odd/even line based polarization screen support.\n- topbottom: split screen top/bottom.\n- sidebyside: split screen side by side.\n- crossview: Cross-eyed 3d\nNote that the interlaced mode requires shaders to be enabled."); @@ -141,6 +128,8 @@ fake_function() { gettext("Clouds are a client-side effect."); gettext("3D clouds"); gettext("Use 3D cloud look instead of flat."); + gettext("Soft clouds"); + gettext("Use smooth cloud shading."); gettext("Filtering and Antialiasing"); gettext("Mipmapping"); gettext("Use mipmaps when scaling textures. May slightly increase performance,\nespecially when using a high-resolution texture pack.\nGamma-correct downscaling is not supported."); @@ -159,9 +148,19 @@ fake_function() { gettext("Type of occlusion_culler\n\n\"loops\" is the legacy algorithm with nested loops and O(n³) complexity\n\"bfs\" is the new algorithm based on breadth-first-search and side culling\n\nThis setting should only be changed if you have performance problems."); gettext("Enable Raytraced Culling"); gettext("Use raytraced occlusion culling in the new culler.\nThis flag enables use of raytraced occlusion culling test for\nclient mesh sizes smaller than 4x4x4 map blocks."); - gettext("Shaders"); - gettext("Shaders"); - gettext("Shaders allow advanced visual effects and may increase performance on some video\ncards."); + gettext("Effects"); + gettext("Translucent liquids"); + gettext("Allows liquids to be translucent."); + gettext("Leaves style"); + gettext("Leaves style:\n- Fancy: all faces visible\n- Simple: only outer faces\n- Opaque: disable transparency"); + gettext("Connect glass"); + gettext("Connects glass if supported by node."); + gettext("Smooth lighting"); + gettext("Enable smooth lighting with simple ambient occlusion."); + gettext("Tradeoffs for performance"); + gettext("Enables tradeoffs that reduce CPU load or increase rendering performance\nat the expense of minor visual glitches that do not impact game playability."); + gettext("Digging particles"); + gettext("Adds particles when digging a node."); gettext("Waving Nodes"); gettext("Waving leaves"); gettext("Set to true to enable waving leaves."); @@ -209,19 +208,17 @@ fake_function() { gettext("Set the exposure compensation in EV units.\nValue of 0.0 (default) means no exposure compensation.\nRange: from -1 to 1.0"); gettext("Enable Debanding"); gettext("Apply dithering to reduce color banding artifacts.\nDithering significantly increases the size of losslessly-compressed\nscreenshots and it works incorrectly if the display or operating system\nperforms additional dithering or if the color channels are not quantized\nto 8 bits.\nWith OpenGL ES, dithering only works if the shader supports high\nfloating-point precision and it may have a higher performance impact."); - gettext("Bloom"); gettext("Enable Bloom"); gettext("Set to true to enable bloom effect.\nBright colors will bleed over the neighboring objects."); - gettext("Enable Bloom Debug"); - gettext("Set to true to render debugging breakdown of the bloom effect.\nIn debug mode, the screen is split into 4 quadrants:\ntop-left - processed base image, top-right - final image\nbottom-left - raw base image, bottom-right - bloom texture."); - gettext("Bloom Intensity"); - gettext("Defines how much bloom is applied to the rendered image\nSmaller values make bloom more subtle\nRange: from 0.01 to 1.0, default: 0.05"); - gettext("Bloom Strength Factor"); - gettext("Defines the magnitude of bloom overexposure.\nRange: from 0.1 to 10.0, default: 1.0"); - gettext("Bloom Radius"); - gettext("Logical value that controls how far the bloom effect spreads\nfrom the bright objects.\nRange: from 0.1 to 8, default: 1"); gettext("Volumetric lighting"); gettext("Set to true to enable volumetric lighting effect (a.k.a. \"Godrays\")."); + gettext("Other Effects"); + gettext("Translucent foliage"); + gettext("Simulate translucency when looking at foliage in the sunlight."); + gettext("Node specular"); + gettext("Apply specular shading to nodes."); + gettext("Liquid reflections"); + gettext("When enabled, liquid reflections are simulated."); gettext("Audio"); gettext("Volume"); gettext("Volume of all sounds.\nRequires the sound system to be enabled."); @@ -233,8 +230,12 @@ fake_function() { gettext("Language"); gettext("Set the language. By default, the system language is used.\nA restart is required after changing this."); gettext("GUI"); + gettext("Optimize GUI for touchscreens"); + gettext("When enabled, the GUI is optimized to be more usable on touchscreens.\nWhether this is enabled by default depends on your hardware form-factor."); gettext("GUI scaling"); gettext("Scale GUI by a user specified value.\nUse a nearest-neighbor-anti-alias filter to scale the GUI.\nThis will smooth over some of the rough edges, and blend\npixels when scaling down, at the cost of blurring some\nedge pixels when images are scaled by non-integer sizes."); + gettext("Smooth scrolling"); + gettext("Enables smooth scrolling."); gettext("Inventory items animations"); gettext("Enables animation of inventory items."); gettext("Formspec Full-Screen Background Opacity"); @@ -256,6 +257,12 @@ fake_function() { gettext("Modifies the size of the HUD elements."); gettext("Show name tag backgrounds by default"); gettext("Whether name tag backgrounds should be shown by default.\nMods may still set a background."); + gettext("Show debug info"); + gettext("Whether to show the client debug info (has the same effect as hitting F5)."); + gettext("Block bounds HUD radius"); + gettext("Radius to use when the block bounds HUD feature is set to near blocks."); + gettext("Maximum hotbar width"); + gettext("Maximum proportion of current window to be used for hotbar.\nUseful if there's something to be displayed right or left of hotbar."); gettext("Chat"); gettext("Recent Chat Messages"); gettext("Maximum number of recent chat messages to show"); @@ -265,8 +272,6 @@ fake_function() { gettext("In-game chat console background color (R,G,B)."); gettext("Console alpha"); gettext("In-game chat console background alpha (opaqueness, between 0 and 255)."); - gettext("Maximum hotbar width"); - gettext("Maximum proportion of current window to be used for hotbar.\nUseful if there's something to be displayed right or left of hotbar."); gettext("Chat weblinks"); gettext("Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console output."); gettext("Weblink color"); @@ -277,9 +282,9 @@ fake_function() { gettext("ContentDB URL"); gettext("The URL for the content repository"); gettext("Enable updates available indicator on content tab"); - gettext("If enabled and you have ContentDB packages installed, Minetest may contact ContentDB to\ncheck for package updates when opening the mainmenu."); + gettext("If enabled and you have ContentDB packages installed, Luanti may contact ContentDB to\ncheck for package updates when opening the mainmenu."); gettext("ContentDB Flag Blacklist"); - gettext("Comma-separated list of flags to hide in the content repository.\n\"nonfree\" can be used to hide packages which do not qualify as 'free software',\nas defined by the Free Software Foundation.\nYou can also specify content ratings.\nThese flags are independent from Minetest versions,\nso see a full list at https://content.minetest.net/help/content_flags/"); + gettext("Comma-separated list of flags to hide in the content repository.\n\"nonfree\" can be used to hide packages which do not qualify as 'free software',\nas defined by the Free Software Foundation.\nYou can also specify content ratings.\nThese flags are independent from Luanti versions,\nso see a full list at https://content.minetest.net/help/content_flags/"); gettext("ContentDB Max Concurrent Downloads"); gettext("Maximum number of concurrent downloads. Downloads exceeding this limit will be queued.\nThis should be lower than curl_parallel_limit."); gettext("Client and Server"); @@ -291,7 +296,7 @@ fake_function() { gettext("Enable split login/register"); gettext("If enabled, account registration is separate from login in the UI.\nIf disabled, new accounts will be registered automatically when logging in."); gettext("Update information URL"); - gettext("URL to JSON file which provides information about the newest Minetest release.\nIf this is empty the engine will never check for updates."); + gettext("URL to JSON file which provides information about the newest Luanti release.\nIf this is empty the engine will never check for updates."); gettext("Server"); gettext("Admin name"); gettext("Name of the player.\nWhen running a server, clients connecting with this name are admins.\nWhen starting from the main menu, this is overridden."); @@ -306,6 +311,8 @@ fake_function() { gettext("Homepage of server, to be displayed in the serverlist."); gettext("Announce server"); gettext("Automatically report to the serverlist."); + gettext("Send player names to the server list"); + gettext("Send names of online players to the serverlist. If disabled only the player count is revealed."); gettext("Serverlist URL"); gettext("Announce to this serverlist."); gettext("Message of the day"); @@ -322,7 +329,7 @@ fake_function() { gettext("Strict protocol checking"); gettext("Enable to disallow old clients from connecting.\nOlder clients are compatible in the sense that they will not crash when connecting\nto new servers, but they may not support all new features that you are expecting."); gettext("Protocol version minimum"); - gettext("Define the oldest clients allowed to connect.\nOlder clients are compatible in the sense that they will not crash when connecting\nto new servers, but they may not support all new features that you are expecting.\nThis allows for more fine-grained control than strict_protocol_version_checking.\nMinetest still enforces its own internal minimum, and enabling\nstrict_protocol_version_checking will effectively override this."); + gettext("Define the oldest clients allowed to connect.\nOlder clients are compatible in the sense that they will not crash when connecting\nto new servers, but they may not support all new features that you are expecting.\nThis allows for more fine-grained control than strict_protocol_version_checking.\nLuanti still enforces its own internal minimum, and enabling\nstrict_protocol_version_checking will effectively override this."); gettext("Remote media"); gettext("Specifies URL from which client fetches media instead of using UDP.\n$filename should be accessible from $remote_media$filename via cURL\n(obviously, remote_media should end with a slash).\nFiles that are not present will be fetched the usual way."); gettext("IPv6 server"); @@ -336,8 +343,10 @@ fake_function() { gettext("The privileges that new users automatically get.\nSee /privs in game for a full list on your server and mod configuration."); gettext("Basic privileges"); gettext("Privileges that players with basic_privs can grant"); - gettext("Disable anticheat"); - gettext("If enabled, disable cheat prevention in multiplayer."); + gettext("Anticheat flags"); + gettext("Server anticheat configuration.\nFlags are positive. Uncheck the flag to disable corresponding anticheat module."); + gettext("Anticheat movement tolerance"); + gettext("Tolerance of movement cheat detector.\nIncrease the value if players experience stuttery movement."); gettext("Rollback recording"); gettext("If enabled, actions are recorded for rollback.\nThis option is only read when server starts."); gettext("Client-side Modding"); @@ -828,7 +837,7 @@ fake_function() { gettext("Chat commands"); gettext("Instrument chat commands on registration."); gettext("Global callbacks"); - gettext("Instrument global callback functions on registration.\n(anything you pass to a minetest.register_*() function)"); + gettext("Instrument global callback functions on registration.\n(anything you pass to a core.register_*() function)"); gettext("Builtin"); gettext("Instrument builtin.\nThis is usually only needed by core/builtin contributors"); gettext("Profiler"); @@ -842,22 +851,24 @@ fake_function() { gettext("Ignore world errors"); gettext("If enabled, invalid world data won't cause the server to shut down.\nOnly enable this if you know what you are doing."); gettext("Graphics"); + gettext("Shaders"); + gettext("Shaders are a fundamental part of rendering and enable advanced visual effects."); gettext("Shader path"); gettext("Path to shader directory. If no path is defined, default location will be used."); gettext("Video driver"); - gettext("The rendering back-end.\nNote: A restart is required after changing this!\nOpenGL is the default for desktop, and OGLES2 for Android.\nShaders are supported by everything but OGLES1."); + gettext("The rendering back-end.\nNote: A restart is required after changing this!\nOpenGL is the default for desktop, and OGLES2 for Android."); gettext("Transparency Sorting Distance"); - gettext("Distance in nodes at which transparency depth sorting is enabled\nUse this to limit the performance impact of transparency depth sorting"); + gettext("Distance in nodes at which transparency depth sorting is enabled.\nUse this to limit the performance impact of transparency depth sorting.\nSet to 0 to disable it entirely."); gettext("Cloud radius"); gettext("Radius of cloud area stated in number of 64 node cloud squares.\nValues larger than 26 will start to produce sharp cutoffs at cloud area corners."); gettext("Desynchronize block animation"); gettext("Whether node texture animations should be desynchronized per mapblock."); gettext("Mesh cache"); - gettext("Enables caching of facedir rotated meshes."); + gettext("Enables caching of facedir rotated meshes.\nThis is only effective with shaders disabled."); gettext("Mapblock mesh generation delay"); gettext("Delay between mesh updates on the client in ms. Increasing this will slow\ndown the rate of mesh updates, thus reducing jitter on slower clients."); gettext("Mapblock mesh generation threads"); - gettext("Number of threads to use for mesh generation.\nValue of 0 (default) will let Minetest autodetect the number of available threads."); + gettext("Number of threads to use for mesh generation.\nValue of 0 (default) will let Luanti autodetect the number of available threads."); gettext("Minimap scan height"); gettext("True = 256\nFalse = 128\nUsable to make minimap smoother on slower machines."); gettext("World-aligned textures mode"); @@ -870,6 +881,8 @@ fake_function() { gettext("Side length of a cube of map blocks that the client will consider together\nwhen generating meshes.\nLarger values increase the utilization of the GPU by reducing the number of\ndraw calls, benefiting especially high-end GPUs.\nSystems with a low-end GPU (or no GPU) would benefit from smaller values."); gettext("OpenGL debug"); gettext("Enables debug and error-checking in the OpenGL driver."); + gettext("Enable Bloom Debug"); + gettext("Set to true to render debugging breakdown of the bloom effect.\nIn debug mode, the screen is split into 4 quadrants:\ntop-left - processed base image, top-right - final image\nbottom-left - raw base image, bottom-right - bloom texture."); gettext("Sound"); gettext("Sound Extensions Blacklist"); gettext("Comma-separated list of AL and ALC extensions that should not be used.\nUseful for testing. See al_extensions.[h,cpp] for details."); @@ -913,21 +926,19 @@ fake_function() { gettext("Spread of light curve boost range.\nControls the width of the range to be boosted.\nStandard deviation of the light curve boost Gaussian."); gettext("Networking"); gettext("Prometheus listener address"); - gettext("Prometheus listener address.\nIf Minetest is compiled with ENABLE_PROMETHEUS option enabled,\nenable metrics listener for Prometheus on that address.\nMetrics can be fetched on http://127.0.0.1:30000/metrics"); + gettext("Prometheus listener address.\nIf Luanti is compiled with ENABLE_PROMETHEUS option enabled,\nenable metrics listener for Prometheus on that address.\nMetrics can be fetched on http://127.0.0.1:30000/metrics"); gettext("Maximum size of the outgoing chat queue"); gettext("Maximum size of the outgoing chat queue.\n0 to disable queueing and -1 to make the queue size unlimited."); gettext("Mapblock unload timeout"); gettext("Timeout for client to remove unused map data from memory, in seconds."); gettext("Mapblock limit"); gettext("Maximum number of mapblocks for client to be kept in memory.\nSet to -1 for unlimited amount."); - gettext("Show debug info"); - gettext("Whether to show the client debug info (has the same effect as hitting F5)."); gettext("Maximum simultaneous block sends per client"); gettext("Maximum number of blocks that are simultaneously sent per client.\nThe maximum total count is calculated dynamically:\nmax_total = ceil((#clients + max_users) * per_client / 4)"); gettext("Delay in sending blocks after building"); gettext("To reduce lag, block transfers are slowed down when a player is building something.\nThis determines how long they are slowed down after placing or removing a node."); gettext("Max. packets per iteration"); - gettext("Maximum number of packets sent per send step, if you have a slow connection\ntry reducing it, but don't reduce it to a number below double of targeted\nclient number."); + gettext("Maximum number of packets sent per send step in the low-level networking code.\nYou generally don't need to change this, however busy servers may benefit from a higher number."); gettext("Map Compression Level for Network Transfer"); gettext("Compression level to use when sending mapblocks to the client.\n-1 - use default compression level\n0 - least compression, fastest\n9 - best compression, slowest"); gettext("Server"); @@ -943,7 +954,7 @@ fake_function() { gettext("Whether to ask clients to reconnect after a (Lua) crash.\nSet this to true if your server is set up to restart automatically."); gettext("Server/Env Performance"); gettext("Dedicated server step"); - gettext("Length of a server tick (the interval at which everything is generally updated),\nstated in seconds.\nDoes not apply to sessions hosted from the client menu."); + gettext("Length of a server tick (the interval at which everything is generally updated),\nstated in seconds.\nDoes not apply to sessions hosted from the client menu.\nThis is a lower bound, i.e. server steps may not be shorter than this, but\nthey are often longer."); gettext("Unlimited player transfer distance"); gettext("Whether players are shown to clients without any range limit.\nDeprecated, use the setting player_transfer_distance instead."); gettext("Player transfer distance"); @@ -1008,7 +1019,7 @@ fake_function() { gettext("Display Density Scaling Factor"); gettext("Adjust the detected display density, used for scaling UI elements."); gettext("Enable console window"); - gettext("Windows systems only: Start Minetest with the command line window in the background.\nContains the same information as the file debug.txt (default name)."); + gettext("Windows systems only: Start Luanti with the command line window in the background.\nContains the same information as the file debug.txt (default name)."); gettext("Max. clearobjects extra blocks"); gettext("Number of extra blocks that can be loaded by /clearobjects at once.\nThis is a trade-off between SQLite transaction overhead and\nmemory consumption (4096=100MB, as a rule of thumb)."); gettext("Map directory"); From 8c0c8334c32751ee65483108dc7e7c2188ee6c16 Mon Sep 17 00:00:00 2001 From: "updatepo.sh" Date: Mon, 28 Oct 2024 19:58:15 +0100 Subject: [PATCH 096/178] Run updaterepo.sh --- po/ar/luanti.po | 538 ++++++++++++++++++++++++---------- po/be/luanti.po | 581 ++++++++++++++++++++++++++---------- po/bg/luanti.po | 542 ++++++++++++++++++++++++---------- po/ca/luanti.po | 543 ++++++++++++++++++++++++---------- po/cs/luanti.po | 653 ++++++++++++++++++++++++++++++----------- po/cy/luanti.po | 521 +++++++++++++++++++++++---------- po/da/luanti.po | 573 ++++++++++++++++++++++++++---------- po/de/luanti.po | 667 +++++++++++++++++++++++++++++++----------- po/dv/luanti.po | 506 +++++++++++++++++++++++--------- po/el/luanti.po | 528 +++++++++++++++++++++++---------- po/eo/luanti.po | 621 ++++++++++++++++++++++++++++----------- po/es/luanti.po | 667 +++++++++++++++++++++++++++++++----------- po/et/luanti.po | 536 ++++++++++++++++++++++++---------- po/eu/luanti.po | 526 +++++++++++++++++++++++---------- po/fa/luanti.po | 484 +++++++++++++++++++++--------- po/fi/luanti.po | 535 ++++++++++++++++++++++++---------- po/fil/luanti.po | 536 ++++++++++++++++++++++++---------- po/fr/luanti.po | 664 +++++++++++++++++++++++++++++++----------- po/ga/luanti.po | 496 ++++++++++++++++++++++--------- po/gd/luanti.po | 492 ++++++++++++++++++++++--------- po/gl/luanti.po | 674 ++++++++++++++++++++++++++++++------------ po/he/luanti.po | 530 +++++++++++++++++++++++---------- po/hi/luanti.po | 530 +++++++++++++++++++++++---------- po/hu/luanti.po | 651 ++++++++++++++++++++++++++++++----------- po/ia/luanti.po | 484 +++++++++++++++++++++--------- po/id/luanti.po | 648 ++++++++++++++++++++++++++++++----------- po/it/luanti.po | 640 +++++++++++++++++++++++++++++----------- po/ja/luanti.po | 680 +++++++++++++++++++++++++++++++------------ po/jbo/luanti.po | 523 +++++++++++++++++++++++---------- po/jv/luanti.po | 503 +++++++++++++++++++++++--------- po/kk/luanti.po | 493 ++++++++++++++++++++++--------- po/kn/luanti.po | 503 +++++++++++++++++++++++--------- po/ko/luanti.po | 562 +++++++++++++++++++++++++---------- po/kv/luanti.po | 521 ++++++++++++++++++++++++--------- po/ky/luanti.po | 519 +++++++++++++++++++++++---------- po/lt/luanti.po | 524 +++++++++++++++++++++++---------- po/luanti.pot | 672 +++++++++++++++++++++++++++--------------- po/lv/luanti.po | 523 +++++++++++++++++++++++---------- po/lzh/luanti.po | 484 +++++++++++++++++++++--------- po/mi/luanti.po | 493 ++++++++++++++++++++++--------- po/mn/luanti.po | 486 ++++++++++++++++++++++--------- po/mr/luanti.po | 506 +++++++++++++++++++++++--------- po/ms/luanti.po | 654 ++++++++++++++++++++++++++++++----------- po/ms_Arab/luanti.po | 583 +++++++++++++++++++++++++++---------- po/nb/luanti.po | 559 +++++++++++++++++++++++++---------- po/nl/luanti.po | 590 ++++++++++++++++++++++++++----------- po/nn/luanti.po | 538 ++++++++++++++++++++++++---------- po/oc/luanti.po | 524 +++++++++++++++++++++++---------- po/pl/luanti.po | 677 ++++++++++++++++++++++++++++++------------ po/pt/luanti.po | 640 +++++++++++++++++++++++++++++----------- po/pt_BR/luanti.po | 637 +++++++++++++++++++++++++++++----------- po/ro/luanti.po | 568 ++++++++++++++++++++++++++---------- po/ru/luanti.po | 661 ++++++++++++++++++++++++++++++----------- po/sk/luanti.po | 641 +++++++++++++++++++++++++++++----------- po/sl/luanti.po | 547 ++++++++++++++++++++++++---------- po/sr_Cyrl/luanti.po | 540 ++++++++++++++++++++++++---------- po/sr_Latn/luanti.po | 502 +++++++++++++++++++++++--------- po/sv/luanti.po | 584 +++++++++++++++++++++++++++---------- po/sw/luanti.po | 575 ++++++++++++++++++++++++++---------- po/th/luanti.po | 586 +++++++++++++++++++++++++++---------- po/tok/luanti.po | 485 +++++++++++++++++++++--------- po/tr/luanti.po | 592 +++++++++++++++++++++++++++---------- po/tt/luanti.po | 496 ++++++++++++++++++++++--------- po/uk/luanti.po | 653 ++++++++++++++++++++++++++++++----------- po/vi/luanti.po | 537 ++++++++++++++++++++++++---------- po/yue/luanti.po | 484 +++++++++++++++++++++--------- po/zh_CN/luanti.po | 645 +++++++++++++++++++++++++++++----------- po/zh_TW/luanti.po | 645 +++++++++++++++++++++++++++++----------- 68 files changed, 27892 insertions(+), 10609 deletions(-) diff --git a/po/ar/luanti.po b/po/ar/luanti.po index 547f726a6..a80365b54 100644 --- a/po/ar/luanti.po +++ b/po/ar/luanti.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-07-11 15:14+0200\n" +"POT-Creation-Date: 2024-10-28 19:57+0100\n" "PO-Revision-Date: 2024-05-21 09:01+0000\n" "Last-Translator: Jamil Mohamad Alhussein \n" "Language-Team: Arabic \n" "Language-Team: Belarusian \n" "Language-Team: Bulgarian \n" "Language-Team: Catalan \n" "Language-Team: Czech \n" "Language-Team: Welsh \n" "Language-Team: Danish \n" "Language-Team: German 0 ist." +#~ msgid "" +#~ "Defines how much bloom is applied to the rendered image\n" +#~ "Smaller values make bloom more subtle\n" +#~ "Range: from 0.01 to 1.0, default: 0.05" +#~ msgstr "" +#~ "Definiert, wie viel Bloom auf das gerenderte Bild angewandt wird.\n" +#~ "Kleinere Werte machen den Bloom subtiler.\n" +#~ "Wertebereich: von 0.01 zu 1.0, Standard: 0.05" + #~ msgid "" #~ "Defines sampling step of texture.\n" #~ "A higher value results in smoother normal maps." @@ -7514,6 +7778,13 @@ msgstr "cURL-Parallel-Begrenzung" #~ "Definiert die Sampling-Schrittgröße der Textur.\n" #~ "Ein höherer Wert resultiert in weichere Normal-Maps." +#~ msgid "" +#~ "Defines the magnitude of bloom overexposure.\n" +#~ "Range: from 0.1 to 10.0, default: 1.0" +#~ msgstr "" +#~ "Legt die Stärke der Bloomüberbelichtung fest.\n" +#~ "Wertebereich: von 0.1 zu 10.0, Standard: 1.0" + #~ msgid "Del. Favorite" #~ msgstr "Favorit löschen" @@ -7529,6 +7800,9 @@ msgstr "cURL-Parallel-Begrenzung" #~ msgid "Dig key" #~ msgstr "Grabetaste" +#~ msgid "Disable anticheat" +#~ msgstr "Anti-Cheat deaktivieren" + #~ msgid "Disabled unlimited viewing range" #~ msgstr "Unbegrenzte Sichtweite deaktiviert" @@ -7566,6 +7840,9 @@ msgstr "cURL-Parallel-Begrenzung" #~ msgid "Enable register confirmation" #~ msgstr "Registrierungsbestätigung aktivieren" +#~ msgid "Enable touchscreen" +#~ msgstr "Touchscreen aktivieren" + #~ msgid "" #~ "Enable vertex buffer objects.\n" #~ "This should greatly improve graphics performance." @@ -7573,9 +7850,6 @@ msgstr "cURL-Parallel-Begrenzung" #~ "Aktiviert Vertex Buffer Objects.\n" #~ "Dies sollte die Grafikperformanz beträchtlich verbessern." -#~ msgid "Enabled" -#~ msgstr "Aktiviert" - #~ msgid "" #~ "Enables bumpmapping for textures. Normalmaps need to be supplied by the " #~ "texture pack\n" @@ -7620,6 +7894,13 @@ msgstr "cURL-Parallel-Begrenzung" #~ "die Tonsteuerung im Spiel wird funktionslos sein.\n" #~ "Die Änderung dieser Einstellung benötigt einen Neustart." +#~ msgid "" +#~ "Enables touchscreen mode, allowing you to play the game with a " +#~ "touchscreen." +#~ msgstr "" +#~ "Aktiviert den Touchscreenmodus. Damit können Sie das Spiel mit einem " +#~ "Touchscreen spielen." + #~ msgid "Enter " #~ msgstr "Eingabe " @@ -7858,6 +8139,11 @@ msgstr "cURL-Parallel-Begrenzung" #~ "fliegen.\n" #~ "Dafür wird das „noclip“-Privileg auf dem Server benötigt." +#~ msgid "If enabled, disable cheat prevention in multiplayer." +#~ msgstr "" +#~ "Wenn diese Einstellung aktiviert ist, werden die Anti-Cheat-Maßnahmen " +#~ "deaktiviert." + #~ msgid "" #~ "If enabled, makes move directions relative to the player's pitch when " #~ "flying or swimming." @@ -7878,9 +8164,6 @@ msgstr "cURL-Parallel-Begrenzung" #~ msgid "Inc. volume key" #~ msgstr "Lauter-Taste" -#~ msgid "Information:" -#~ msgstr "Information:" - #~ msgid "Install Mod: Unable to find real mod name for: $1" #~ msgstr "" #~ "Modinstallation: Richtiger Modname für $1 konnte nicht gefunden werden" @@ -8580,6 +8863,15 @@ msgstr "cURL-Parallel-Begrenzung" #~ msgid "Limit of emerge queues on disk" #~ msgstr "Erzeugungswarteschlangengrenze auf Festspeicher" +#~ msgid "" +#~ "Logical value that controls how far the bloom effect spreads\n" +#~ "from the bright objects.\n" +#~ "Range: from 0.1 to 8, default: 1" +#~ msgstr "" +#~ "Logischer Wert, der steuert, wie weit sich der Bloomeffekt\n" +#~ "von den hellen Objekten ausbreitet.\n" +#~ "Wertebereich: von 0.1 zu 8, Standard: 1" + #~ msgid "Main" #~ msgstr "Hauptmenü" @@ -8597,6 +8889,20 @@ msgstr "cURL-Parallel-Begrenzung" #~ msgid "Mapblock mesh generator's MapBlock cache size in MB" #~ msgstr "Cachegröße des Kartenblock-Meshgenerators in MB" +#~ msgid "" +#~ "Maximum number of packets sent per send step, if you have a slow " +#~ "connection\n" +#~ "try reducing it, but don't reduce it to a number below double of " +#~ "targeted\n" +#~ "client number." +#~ msgstr "" +#~ "Maximale Anzahl der Pakete, die pro Sendeschritt gesendet werden. Falls " +#~ "Sie eine\n" +#~ "langsame Verbindung haben, probieren Sie, diesen Wert zu reduzieren,\n" +#~ "aber reduzieren Sie ihn nicht unter der doppelten Anzahl der Clients, die " +#~ "Sie\n" +#~ "anstreben." + #~ msgid "Menus" #~ msgstr "Menüs" @@ -8828,6 +9134,15 @@ msgstr "cURL-Parallel-Begrenzung" #~ msgid "Shaders (unavailable)" #~ msgstr "Shader (nicht verfügbar)" +#~ msgid "" +#~ "Shaders allow advanced visual effects and may increase performance on " +#~ "some video\n" +#~ "cards." +#~ msgstr "" +#~ "Shader ermöglichen fortgeschrittene visuelle Effekte und können die " +#~ "Performanz auf\n" +#~ "einigen Grafikkarten erhöhen." + #~ msgid "Shadow limit" #~ msgstr "Schattenbegrenzung" @@ -8924,9 +9239,6 @@ msgstr "cURL-Parallel-Begrenzung" #~ msgid "Touch threshold (px):" #~ msgstr "Berührungsempfindlichkeit (px):" -#~ msgid "Touchscreen threshold" -#~ msgstr "Touchscreenschwellwert" - #~ msgid "Trilinear Filter" #~ msgstr "Trilinearer Filter" @@ -9007,6 +9319,9 @@ msgstr "cURL-Parallel-Begrenzung" #~ msgid "View" #~ msgstr "Ansehen" +#~ msgid "View more information in a web browser" +#~ msgstr "Mehr Informationen im Webbrowser anschauen" + #~ msgid "View range decrease key" #~ msgstr "Taste „Sichtweite reduzieren“" diff --git a/po/dv/luanti.po b/po/dv/luanti.po index 5fe66e3b1..d9ef1127e 100644 --- a/po/dv/luanti.po +++ b/po/dv/luanti.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Dhivehi (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-07-11 15:14+0200\n" +"POT-Creation-Date: 2024-10-28 19:57+0100\n" "PO-Revision-Date: 2019-11-10 15:04+0000\n" "Last-Translator: Krock \n" "Language-Team: Dhivehi \n" "Language-Team: Greek \n" "Language-Team: Esperanto \n" "Language-Team: Spanish 0." +#~ msgid "" +#~ "Defines how much bloom is applied to the rendered image\n" +#~ "Smaller values make bloom more subtle\n" +#~ "Range: from 0.01 to 1.0, default: 0.05" +#~ msgstr "" +#~ "Define cuanto resplandor será aplicado a la imagen\n" +#~ "Valores pequeños harán resplandores más sutiles\n" +#~ "Rango: desde 0.01 a 1.0, por defecto: 0.05" + #~ msgid "" #~ "Defines sampling step of texture.\n" #~ "A higher value results in smoother normal maps." @@ -7495,12 +7764,22 @@ msgstr "Límite de cURL en paralelo" #~ "Define el intervalo de muestreo de las texturas.\n" #~ "Un valor más alto causa mapas de relieve más suaves." +#~ msgid "" +#~ "Defines the magnitude of bloom overexposure.\n" +#~ "Range: from 0.1 to 10.0, default: 1.0" +#~ msgstr "" +#~ "Define la magnitud de la sobreexposición del resplandor.\n" +#~ "Rango: de 0.1 a 10.0, predeterminado: 1.0" + #~ msgid "Del. Favorite" #~ msgstr "Borrar Fav." #~ msgid "Dig key" #~ msgstr "Tecla Excavar" +#~ msgid "Disable anticheat" +#~ msgstr "Desactivar Anticheat" + #~ msgid "Disabled unlimited viewing range" #~ msgstr "Rango de visión ilimitada desactivado" @@ -7537,6 +7816,9 @@ msgstr "Límite de cURL en paralelo" #~ msgid "Enable register confirmation" #~ msgstr "Habilitar confirmación de registro" +#~ msgid "Enable touchscreen" +#~ msgstr "Activar la pantalla táctil" + #~ msgid "" #~ "Enable vertex buffer objects.\n" #~ "This should greatly improve graphics performance." @@ -7544,9 +7826,6 @@ msgstr "Límite de cURL en paralelo" #~ "Habilitar los objetos vértices del buffer.\n" #~ "Esto debería mejorar enormemente el rendimiento de los gráficos." -#~ msgid "Enabled" -#~ msgstr "Activado" - #~ msgid "" #~ "Enables bumpmapping for textures. Normalmaps need to be supplied by the " #~ "texture pack\n" @@ -7592,6 +7871,13 @@ msgstr "Límite de cURL en paralelo" #~ "los controles de sonido el juego no serán funcionales.\n" #~ "Cambiar esta configuración requiere un reinicio." +#~ msgid "" +#~ "Enables touchscreen mode, allowing you to play the game with a " +#~ "touchscreen." +#~ msgstr "" +#~ "Activa el modo de pantalla táctil, permitiendote jugar con pantalla " +#~ "táctil." + #~ msgid "Enter " #~ msgstr "Ingresar " @@ -7830,6 +8116,10 @@ msgstr "Límite de cURL en paralelo" #~ "nodos sólidos.\n" #~ "Requiere del privilegio \"noclip\" en el servidor." +#~ msgid "If enabled, disable cheat prevention in multiplayer." +#~ msgstr "" +#~ "Si se habilita, deshabilita la prevención de trampas en modo multijugador." + #~ msgid "" #~ "If enabled, makes move directions relative to the player's pitch when " #~ "flying or swimming." @@ -7851,9 +8141,6 @@ msgstr "Límite de cURL en paralelo" #~ msgid "Inc. volume key" #~ msgstr "Tecla para subir volumen" -#~ msgid "Information:" -#~ msgstr "Información:" - #~ msgid "Install Mod: Unable to find real mod name for: $1" #~ msgstr "Instalar mod: Imposible encontrar el nombre real del mod para: $1" @@ -8555,6 +8842,15 @@ msgstr "Límite de cURL en paralelo" #~ "Longitud de las ondas líquidas.\n" #~ "Requiere que se habiliten los líquidos ondulados." +#~ msgid "" +#~ "Logical value that controls how far the bloom effect spreads\n" +#~ "from the bright objects.\n" +#~ "Range: from 0.1 to 8, default: 1" +#~ msgstr "" +#~ "Valor lógico que controla hasta qué punto se propaga el efecto de bloom\n" +#~ "desde los objetos brillantes.\n" +#~ "Rango: de 0.1 a 8, por defecto: 1" + #~ msgid "Main" #~ msgstr "Principal" @@ -8572,6 +8868,19 @@ msgstr "Límite de cURL en paralelo" #~ msgstr "" #~ "Tamaño de cache en MB del Mapblock del generador de la malla del Mapblock" +#~ msgid "" +#~ "Maximum number of packets sent per send step, if you have a slow " +#~ "connection\n" +#~ "try reducing it, but don't reduce it to a number below double of " +#~ "targeted\n" +#~ "client number." +#~ msgstr "" +#~ "Número máximo de paquetes enviados por paso de envío. Si tiene una " +#~ "conexión\n" +#~ "lenta, intente reducirlo, pero no lo reduzca a un número menor al doble " +#~ "del\n" +#~ "número de cliente objetivo." + #~ msgid "Menus" #~ msgstr "Menús" @@ -8761,6 +9070,15 @@ msgstr "Límite de cURL en paralelo" #~ msgid "Shaders (unavailable)" #~ msgstr "Sombreadores (no disponible)" +#~ msgid "" +#~ "Shaders allow advanced visual effects and may increase performance on " +#~ "some video\n" +#~ "cards." +#~ msgstr "" +#~ "Los sombreadores permiten efectos visuales avanzados y pueden aumentar el " +#~ "rendimiento\n" +#~ "en algunas tarjetas de vídeo." + #, fuzzy #~ msgid "" #~ "Shadow offset (in pixels) of the fallback font. If 0, then shadow will " @@ -8843,10 +9161,6 @@ msgstr "Límite de cURL en paralelo" #~ msgid "Touch threshold (px):" #~ msgstr "Umbral táctil (px):" -#, fuzzy -#~ msgid "Touchscreen threshold" -#~ msgstr "Umbral de la pantalla táctil" - #~ msgid "Trilinear Filter" #~ msgstr "Filtrado trilineal" @@ -8888,6 +9202,9 @@ msgstr "Límite de cURL en paralelo" #~ msgid "View" #~ msgstr "Ver" +#~ msgid "View more information in a web browser" +#~ msgstr "Ver más información en un navegador web" + #~ msgid "View range decrease key" #~ msgstr "Tecla para disminuir el rango de visión" diff --git a/po/et/luanti.po b/po/et/luanti.po index b2f48ed1f..5d1544f62 100644 --- a/po/et/luanti.po +++ b/po/et/luanti.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Estonian (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-07-11 15:14+0200\n" +"POT-Creation-Date: 2024-10-28 19:57+0100\n" "PO-Revision-Date: 2023-10-22 17:18+0000\n" "Last-Translator: Janar Leas \n" "Language-Team: Estonian \n" "Language-Team: Basque \n" "Language-Team: Persian \n" "Language-Team: Finnish \n" "Language-Team: Filipino \n" "Language-Team: French 0." +#~ msgid "" +#~ "Defines how much bloom is applied to the rendered image\n" +#~ "Smaller values make bloom more subtle\n" +#~ "Range: from 0.01 to 1.0, default: 0.05" +#~ msgstr "" +#~ "Définit la quantité de flou lumineux appliquée à l'image rendue\n" +#~ "Des valeurs plus faibles rendent le flou lumineux plus subtil\n" +#~ "Plage : de 0,01 à 1,0, par défaut : 0,05" + #~ msgid "" #~ "Defines sampling step of texture.\n" #~ "A higher value results in smoother normal maps." @@ -7467,12 +7739,22 @@ msgstr "Limite parallèle de cURL" #~ "Niveau de lissage des normal maps.\n" #~ "Une valeur plus grande lisse davantage les normal maps." +#~ msgid "" +#~ "Defines the magnitude of bloom overexposure.\n" +#~ "Range: from 0.1 to 10.0, default: 1.0" +#~ msgstr "" +#~ "Définit l'intensité de la surexposition du flou lumineux.\n" +#~ "Plage : de 0,1 à 10,0, par défaut : 1,0" + #~ msgid "Del. Favorite" #~ msgstr "Supprimer favori" #~ msgid "Dig key" #~ msgstr "Touche creuser" +#~ msgid "Disable anticheat" +#~ msgstr "Désactiver l'anti-triche" + #~ msgid "Disabled unlimited viewing range" #~ msgstr "La limite de vue a été activée" @@ -7509,6 +7791,9 @@ msgstr "Limite parallèle de cURL" #~ msgid "Enable register confirmation" #~ msgstr "Activer la confirmation d'enregistrement" +#~ msgid "Enable touchscreen" +#~ msgstr "Activer l'écran tactile" + #~ msgid "" #~ "Enable vertex buffer objects.\n" #~ "This should greatly improve graphics performance." @@ -7516,9 +7801,6 @@ msgstr "Limite parallèle de cURL" #~ "Active les « vertex buffer objects ».\n" #~ "Cela devrait grandement augmenter les performances graphiques." -#~ msgid "Enabled" -#~ msgstr "Activé" - #~ msgid "" #~ "Enables bumpmapping for textures. Normalmaps need to be supplied by the " #~ "texture pack\n" @@ -7563,6 +7845,11 @@ msgstr "Limite parallèle de cURL" #~ "commandes audio dans le jeu ne fonctionneront pas.\n" #~ "La modification de ce paramètre nécessite un redémarrage." +#~ msgid "" +#~ "Enables touchscreen mode, allowing you to play the game with a " +#~ "touchscreen." +#~ msgstr "Active le mode écran tactile." + #~ msgid "Enter " #~ msgstr "Entrer " @@ -7799,6 +8086,9 @@ msgstr "Limite parallèle de cURL" #~ "solides en volant.\n" #~ "Nécessite le privilège « noclip » sur le serveur." +#~ msgid "If enabled, disable cheat prevention in multiplayer." +#~ msgstr "Si activé, cela désactive la détection anti-triche en multijoueur." + #~ msgid "" #~ "If enabled, makes move directions relative to the player's pitch when " #~ "flying or swimming." @@ -7819,9 +8109,6 @@ msgstr "Limite parallèle de cURL" #~ msgid "Inc. volume key" #~ msgstr "Touche augmenter le volume" -#~ msgid "Information:" -#~ msgstr "Informations :" - #~ msgid "Install Mod: Unable to find real mod name for: $1" #~ msgstr "Installer mod : impossible de trouver le nom réel du mod pour : $1" @@ -8519,6 +8806,15 @@ msgstr "Limite parallèle de cURL" #~ msgid "Limit of emerge queues on disk" #~ msgstr "Limite des files émergentes sur le disque" +#~ msgid "" +#~ "Logical value that controls how far the bloom effect spreads\n" +#~ "from the bright objects.\n" +#~ "Range: from 0.1 to 8, default: 1" +#~ msgstr "" +#~ "Valeur logique qui contrôle la distance à laquelle l'effet du flou " +#~ "lumineux se propage des objets lumineux.\n" +#~ "Plage : de 0,1 à 8, valeur par défaut : 1" + #~ msgid "Main" #~ msgstr "Principal" @@ -8536,6 +8832,18 @@ msgstr "Limite parallèle de cURL" #~ msgid "Mapblock mesh generator's MapBlock cache size in MB" #~ msgstr "Taille du cache de blocs de carte en Mo du générateur de maillage" +#~ msgid "" +#~ "Maximum number of packets sent per send step, if you have a slow " +#~ "connection\n" +#~ "try reducing it, but don't reduce it to a number below double of " +#~ "targeted\n" +#~ "client number." +#~ msgstr "" +#~ "Nombre maximal de paquets envoyés par étape d'envoi.\n" +#~ "Si vous avez une connexion lente, essayer de réduire cette valeur.\n" +#~ "Ne pas réduire cette valeur en-dessous du double du nombre de clients " +#~ "maximum sur le serveur." + #~ msgid "Menus" #~ msgstr "Menus" @@ -8764,6 +9072,14 @@ msgstr "Limite parallèle de cURL" #~ msgid "Shaders (unavailable)" #~ msgstr "Shaders (indisponible)" +#~ msgid "" +#~ "Shaders allow advanced visual effects and may increase performance on " +#~ "some video\n" +#~ "cards." +#~ msgstr "" +#~ "Les nuanceurs permettent des effets visuels avancés et peuvent améliorer " +#~ "les performances de certaines cartes graphiques." + #~ msgid "Shadow limit" #~ msgstr "Limite des ombres" @@ -8860,9 +9176,6 @@ msgstr "Limite parallèle de cURL" #~ msgid "Touch threshold (px):" #~ msgstr "Sensibilité tactile (px) :" -#~ msgid "Touchscreen threshold" -#~ msgstr "Sensibilité de l'écran tactile" - #~ msgid "Trilinear Filter" #~ msgstr "Filtrage trilinéaire" @@ -8943,6 +9256,9 @@ msgstr "Limite parallèle de cURL" #~ msgid "View" #~ msgstr "Voir" +#~ msgid "View more information in a web browser" +#~ msgstr "Voir plus d'informations dans le navigateur web" + #~ msgid "View range decrease key" #~ msgstr "Touche réduire la distance d'affichage" diff --git a/po/ga/luanti.po b/po/ga/luanti.po index 95384a8c1..3c1d5aa14 100644 --- a/po/ga/luanti.po +++ b/po/ga/luanti.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-07-11 15:14+0200\n" +"POT-Creation-Date: 2024-10-28 19:57+0100\n" "PO-Revision-Date: 2023-12-03 17:17+0000\n" "Last-Translator: Krock \n" "Language-Team: Irish \n" "Language-Team: Gaelic \n" "Language-Team: Galician \n" "Language-Team: Hebrew \n" "Language-Team: Hindi \n" "Language-Team: Hungarian \n" "Language-Team: Interlingua \n" @@ -51,14 +51,6 @@ msgstr "Antrean obrolan keluar sudah dibersihkan." msgid "This command is disabled by server." msgstr "Perintah ini dilarang oleh server." -#: builtin/client/death_formspec.lua src/client/game.cpp -msgid "Respawn" -msgstr "Bangkit kembali" - -#: builtin/client/death_formspec.lua src/client/game.cpp -msgid "You died" -msgstr "Anda mati" - #: builtin/common/chatcommands.lua msgid "Available commands:" msgstr "Perintah yang ada:" @@ -167,15 +159,18 @@ msgid "$1 downloading..." msgstr "$1 Diunduh..." #: builtin/mainmenu/content/dlg_contentdb.lua -msgid "All packages" -msgstr "Semua paket" +msgid "All" +msgstr "" #: builtin/mainmenu/content/dlg_contentdb.lua -msgid "Back to Main Menu" -msgstr "Kembali ke Menu Utama" +#: builtin/mainmenu/content/dlg_package.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "Back" +msgstr "Kembali" #: builtin/mainmenu/content/dlg_contentdb.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" +#, fuzzy +msgid "ContentDB is not available when Luanti was compiled without cURL" msgstr "ContentDB tidak tersedia saat Minetest dikompilasi tanpa cURL" #: builtin/mainmenu/content/dlg_contentdb.lua @@ -183,8 +178,8 @@ msgid "Downloading..." msgstr "Mengunduh..." #: builtin/mainmenu/content/dlg_contentdb.lua -msgid "Error getting dependencies for package" -msgstr "Bermasalah dalam mengambil dependensi paket" +msgid "Featured" +msgstr "" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "Games" @@ -192,11 +187,8 @@ msgstr "Permainan" #: builtin/mainmenu/content/dlg_contentdb.lua #: builtin/mainmenu/content/dlg_install.lua -msgid "Install" -msgstr "Pasang" - -#: builtin/mainmenu/content/dlg_contentdb.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp +#: builtin/mainmenu/content/dlg_package.lua builtin/mainmenu/serverlistmgr.lua +#: src/client/game.cpp msgid "Loading..." msgstr "Memuat..." @@ -205,6 +197,7 @@ msgid "Mods" msgstr "Mod" #: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_package.lua msgid "No packages could be retrieved" msgstr "Tiada paket yang dapat diambil" @@ -222,33 +215,18 @@ msgid "Queued" msgstr "Diantrekan" #: builtin/mainmenu/content/dlg_contentdb.lua -msgid "Texture packs" +#, fuzzy +msgid "Texture Packs" msgstr "Paket tekstur" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "The package $1 was not found." msgstr "Paket $1 tidak ditemukan." -#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "Copot" - -#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "Perbarui" - #: builtin/mainmenu/content/dlg_contentdb.lua msgid "Update All [$1]" msgstr "Perbarui Semua [$1]" -#: builtin/mainmenu/content/dlg_contentdb.lua -msgid "View more information in a web browser" -msgstr "Lihat informasi lebih lanjut di peramban web" - -#: builtin/mainmenu/content/dlg_contentdb.lua -msgid "You need to install a game before you can install a mod" -msgstr "Anda perlu pasang sebuah permainan sebelum pasang sebuah mod" - #: builtin/mainmenu/content/dlg_install.lua msgid "$1 and $2 dependencies will be installed." msgstr "$1 dan $2 dependensi akan dipasang." @@ -290,6 +268,15 @@ msgstr "Batal" msgid "Dependencies:" msgstr "Dependensi:" +#: builtin/mainmenu/content/dlg_install.lua +#, fuzzy +msgid "Error getting dependencies for package $1" +msgstr "Bermasalah dalam mengambil dependensi paket" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +msgstr "Pasang" + #: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "Pasang $1" @@ -306,6 +293,10 @@ msgstr "Tidak ditemukan" msgid "Please check that the base game is correct." msgstr "Harap pastikan bahwa permainan dasar telah sesuai." +#: builtin/mainmenu/content/dlg_install.lua +msgid "You need to install a game before you can install a mod" +msgstr "Anda perlu pasang sebuah permainan sebelum pasang sebuah mod" + #: builtin/mainmenu/content/dlg_overwrite.lua msgid "\"$1\" already exists. Would you like to overwrite it?" msgstr "\"$1\" telah ada. Apakah Anda mau menimpanya?" @@ -314,6 +305,63 @@ msgstr "\"$1\" telah ada. Apakah Anda mau menimpanya?" msgid "Overwrite" msgstr "Timpa" +#: builtin/mainmenu/content/dlg_package.lua +#, fuzzy +msgid "ContentDB page" +msgstr "URL ContentDB" + +#: builtin/mainmenu/content/dlg_package.lua +#, fuzzy +msgid "Description" +msgstr "Keterangan Server" + +#: builtin/mainmenu/content/dlg_package.lua +msgid "Donate" +msgstr "" + +#: builtin/mainmenu/content/dlg_package.lua +msgid "Forum Topic" +msgstr "" + +#: builtin/mainmenu/content/dlg_package.lua +#, fuzzy +msgid "Information" +msgstr "Informasi:" + +#: builtin/mainmenu/content/dlg_package.lua +#, fuzzy +msgid "Install [$1]" +msgstr "Pasang $1" + +#: builtin/mainmenu/content/dlg_package.lua +msgid "Issue Tracker" +msgstr "" + +#: builtin/mainmenu/content/dlg_package.lua +msgid "Source" +msgstr "" + +#: builtin/mainmenu/content/dlg_package.lua +msgid "Translate" +msgstr "" + +#: builtin/mainmenu/content/dlg_package.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "Copot" + +#: builtin/mainmenu/content/dlg_package.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "Perbarui" + +#: builtin/mainmenu/content/dlg_package.lua +#, fuzzy +msgid "Website" +msgstr "Kunjungi situs web" + +#: builtin/mainmenu/content/dlg_package.lua +msgid "by $1 — $2 downloads — +$3 / $4 / -$5" +msgstr "" + #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" msgstr "$1 (Dinyalakan)" @@ -671,10 +719,10 @@ msgid "Dismiss" msgstr "Abaikan" #: builtin/mainmenu/dlg_reinstall_mtg.lua +#, fuzzy msgid "" -"For a long time, the Minetest engine shipped with a default game called " -"\"Minetest Game\". Since Minetest 5.8.0, Minetest ships without a default " -"game." +"For a long time, Luanti shipped with a default game called \"Minetest " +"Game\". Since version 5.8.0, Luanti ships without a default game." msgstr "" "Sudah sejak lama mesin Minetest dirilis beserta permainan bawaan yang " "disebut \"Minetest Game\". Sejak Minetest 5.8.0, Minetest dirilis tanpa " @@ -838,6 +886,21 @@ msgstr "bawaan" msgid "eased" msgstr "kehalusan (eased)" +#: builtin/mainmenu/settings/dlg_settings.lua +#, fuzzy +msgid "(The game will need to enable automatic exposure as well)" +msgstr "(Permainan perlu menyalakan bayangan juga)" + +#: builtin/mainmenu/settings/dlg_settings.lua +#, fuzzy +msgid "(The game will need to enable bloom as well)" +msgstr "(Permainan perlu menyalakan bayangan juga)" + +#: builtin/mainmenu/settings/dlg_settings.lua +#, fuzzy +msgid "(The game will need to enable volumetric lighting as well)" +msgstr "(Permainan perlu menyalakan bayangan juga)" + #: builtin/mainmenu/settings/dlg_settings.lua msgid "(Use system language)" msgstr "(Gunakan bahasa sistem)" @@ -847,11 +910,11 @@ msgid "Accessibility" msgstr "Aksesibilitas" #: builtin/mainmenu/settings/dlg_settings.lua -msgid "Back" -msgstr "Kembali" +msgid "Auto" +msgstr "" #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp -#: src/settings_translation_file.cpp +#: src/gui/touchcontrols.cpp src/settings_translation_file.cpp msgid "Chat" msgstr "Obrolan" @@ -864,6 +927,15 @@ msgstr "Bersihkan/Jernih" msgid "Controls" msgstr "Kontrol" +#: builtin/mainmenu/settings/dlg_settings.lua +#: builtin/mainmenu/settings/shadows_component.lua +msgid "Disabled" +msgstr "Dimatikan" + +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "Enabled" +msgstr "Dinyalakan" + #: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp msgid "General" msgstr "Umum" @@ -904,6 +976,20 @@ msgstr "Konten: Permainan" msgid "Content: Mods" msgstr "Konten: Mod" +#: builtin/mainmenu/settings/shader_warning_component.lua +#, fuzzy +msgid "Enable" +msgstr "Dinyalakan" + +#: builtin/mainmenu/settings/shader_warning_component.lua +#, fuzzy +msgid "Shaders are disabled." +msgstr "Pembaruan kamera dimatikan" + +#: builtin/mainmenu/settings/shader_warning_component.lua +msgid "This is not a recommended configuration." +msgstr "" + #: builtin/mainmenu/settings/shadows_component.lua msgid "(The game will need to enable shadows as well)" msgstr "(Permainan perlu menyalakan bayangan juga)" @@ -912,10 +998,6 @@ msgstr "(Permainan perlu menyalakan bayangan juga)" msgid "Custom" msgstr "Ubah suai" -#: builtin/mainmenu/settings/shadows_component.lua -msgid "Disabled" -msgstr "Dimatikan" - #: builtin/mainmenu/settings/shadows_component.lua #: src/settings_translation_file.cpp msgid "Dynamic shadows" @@ -1066,12 +1148,14 @@ msgid "Install games from ContentDB" msgstr "Pasang permainan dari ContentDB" #: builtin/mainmenu/tab_local.lua -msgid "Minetest doesn't come with a game by default." +#, fuzzy +msgid "Luanti doesn't come with a game by default." msgstr "Minetest tidak berisi permainan secara bawaan." #: builtin/mainmenu/tab_local.lua +#, fuzzy msgid "" -"Minetest is a game-creation platform that allows you to play many different " +"Luanti is a game-creation platform that allows you to play many different " "games." msgstr "" "Minetest adalah platform pembuatan permainan yang membuat Anda bisa bermain " @@ -1503,6 +1587,10 @@ msgstr "Server jarak jauh" msgid "Resolving address..." msgstr "Mencari alamat..." +#: src/client/game.cpp +msgid "Respawn" +msgstr "Bangkit kembali" + #: src/client/game.cpp msgid "Shutting down..." msgstr "Mematikan..." @@ -1605,6 +1693,10 @@ msgstr "Volume diubah ke %d%%" msgid "Wireframe shown" msgstr "Rangka kawat ditampilkan" +#: src/client/game.cpp +msgid "You died" +msgstr "Anda mati" + #: src/client/game.cpp msgid "Zoom currently disabled by game or mod" msgstr "Zum sedang dilarang oleh permainan atau mod" @@ -1987,7 +2079,7 @@ msgstr "Maju otomatis" msgid "Automatic jumping" msgstr "Lompat otomatis" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Aux1" msgstr "Aux1" @@ -1999,7 +2091,7 @@ msgstr "Mundur" msgid "Block bounds" msgstr "Batasan blok" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Change camera" msgstr "Ubah kamera" @@ -2023,7 +2115,7 @@ msgstr "Turunkan volume" msgid "Double tap \"jump\" to toggle fly" msgstr "Tekan ganda \"lompat\" untuk terbang" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Drop" msgstr "Jatuhkan" @@ -2039,11 +2131,11 @@ msgstr "Naikkan jangkauan" msgid "Inc. volume" msgstr "Naikkan volume" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Inventory" msgstr "Inventaris" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Jump" msgstr "Lompat" @@ -2075,7 +2167,7 @@ msgstr "Barang selanjutnya" msgid "Prev. item" msgstr "Barang sebelumnya" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Range select" msgstr "Jarak pandang" @@ -2087,7 +2179,7 @@ msgstr "Kanan" msgid "Screenshot" msgstr "Tangkapan layar" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Sneak" msgstr "Menyelinap" @@ -2095,15 +2187,15 @@ msgstr "Menyelinap" msgid "Toggle HUD" msgstr "Alih HUD" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Toggle chat log" msgstr "Alih log obrolan" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Toggle fast" msgstr "Gerak cepat" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Toggle fly" msgstr "Alih terbang" @@ -2111,11 +2203,11 @@ msgstr "Alih terbang" msgid "Toggle fog" msgstr "Alih kabut" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Toggle minimap" msgstr "Alih peta mini" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Toggle noclip" msgstr "Tembus nodus" @@ -2123,7 +2215,7 @@ msgstr "Tembus nodus" msgid "Toggle pitchmove" msgstr "Gerak sesuai pandang" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Zoom" msgstr "Zum" @@ -2159,7 +2251,7 @@ msgstr "Kata Sandi Lama" msgid "Passwords do not match!" msgstr "Kata sandi tidak cocok!" -#: src/gui/guiVolumeChange.cpp +#: src/gui/guiVolumeChange.cpp src/gui/touchcontrols.cpp msgid "Exit" msgstr "Keluar" @@ -2172,6 +2264,39 @@ msgstr "Dibisukan" msgid "Sound Volume: %d%%" msgstr "Volume Suara: %d%%" +#: src/gui/touchcontrols.cpp +#, fuzzy +msgid "Joystick" +msgstr "ID Joystick" + +#: src/gui/touchcontrols.cpp +msgid "Overflow menu" +msgstr "" + +#: src/gui/touchcontrols.cpp +#, fuzzy +msgid "Toggle debug" +msgstr "Alih kabut" + +#: src/network/clientpackethandler.cpp +msgid "" +"Another client is connected with this name. If your client closed " +"unexpectedly, try again in a minute." +msgstr "" + +#: src/network/clientpackethandler.cpp +msgid "Empty passwords are disallowed. Set a password and try again." +msgstr "" + +#: src/network/clientpackethandler.cpp +msgid "Internal server error" +msgstr "" + +#: src/network/clientpackethandler.cpp +#, fuzzy +msgid "Invalid password" +msgstr "Kata Sandi Lama" + #. ~ DO NOT TRANSLATE THIS LITERALLY! #. This is a special string which needs to contain the translation's #. language code (e.g. "de" for German). @@ -2190,6 +2315,49 @@ msgstr "" msgid "Name is taken. Please choose another name" msgstr "Nama sudah digunakan. Harap pilih nama lain" +#: src/network/clientpackethandler.cpp +msgid "Player name contains disallowed characters" +msgstr "" + +#: src/network/clientpackethandler.cpp +#, fuzzy +msgid "Player name not allowed" +msgstr "Nama pemain terlalu panjang." + +#: src/network/clientpackethandler.cpp +#, fuzzy +msgid "Server shutting down" +msgstr "Mematikan..." + +#: src/network/clientpackethandler.cpp +msgid "" +"The server has experienced an internal error. You will now be disconnected." +msgstr "" + +#: src/network/clientpackethandler.cpp +msgid "The server is running in singleplayer mode. You cannot connect." +msgstr "" + +#: src/network/clientpackethandler.cpp +msgid "Too many users" +msgstr "" + +#: src/network/clientpackethandler.cpp +msgid "Unknown disconnect reason." +msgstr "" + +#: src/network/clientpackethandler.cpp +msgid "" +"Your client sent something the server didn't expect. Try reconnecting or " +"updating your client." +msgstr "" + +#: src/network/clientpackethandler.cpp +msgid "" +"Your client's version is not supported.\n" +"Please contact the server administrator." +msgstr "" + #: src/server.cpp #, c-format msgid "%s while shutting down: " @@ -2476,6 +2644,14 @@ msgstr "Skala anti-aliasing" msgid "Antialiasing method" msgstr "Metode antialiasing" +#: src/settings_translation_file.cpp +msgid "Anticheat flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Anticheat movement tolerance" +msgstr "" + #: src/settings_translation_file.cpp msgid "Append item name" msgstr "Sisipkan nama barang" @@ -2499,6 +2675,10 @@ msgid "" "floating-point precision and it may have a higher performance impact." msgstr "" +#: src/settings_translation_file.cpp +msgid "Apply specular shading to nodes." +msgstr "" + #: src/settings_translation_file.cpp msgid "Arm inertia" msgstr "Kelembaman tangan" @@ -2617,6 +2797,11 @@ msgstr "API Bioma" msgid "Biome noise" msgstr "Noise bioma" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Block bounds HUD radius" +msgstr "Batasan blok" + #: src/settings_translation_file.cpp #, fuzzy msgid "Block cull optimize distance" @@ -2626,22 +2811,6 @@ msgstr "Jarak optimasi pengiriman blok" msgid "Block send optimize distance" msgstr "Jarak optimasi pengiriman blok" -#: src/settings_translation_file.cpp -msgid "Bloom" -msgstr "Bloom(Bunga)" - -#: src/settings_translation_file.cpp -msgid "Bloom Intensity" -msgstr "Intensitas Bloom" - -#: src/settings_translation_file.cpp -msgid "Bloom Radius" -msgstr "Jari-Jari Bloom" - -#: src/settings_translation_file.cpp -msgid "Bloom Strength Factor" -msgstr "Pengali Kekuatan Bloom" - #: src/settings_translation_file.cpp msgid "Bobbing" msgstr "Bobbing(Terombang-Ambing)" @@ -2845,13 +3014,14 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Comma-separated list of flags to hide in the content repository.\n" "\"nonfree\" can be used to hide packages which do not qualify as 'free " "software',\n" "as defined by the Free Software Foundation.\n" "You can also specify content ratings.\n" -"These flags are independent from Minetest versions,\n" +"These flags are independent from Luanti versions,\n" "so see a full list at https://content.minetest.net/help/content_flags/" msgstr "" "Daftar yang dipisahkan dengan koma dari flag yang akan disembunyikan dalam " @@ -3074,7 +3244,7 @@ msgid "" "expecting.\n" "This allows for more fine-grained control than " "strict_protocol_version_checking.\n" -"Minetest still enforces its own internal minimum, and enabling\n" +"Luanti still enforces its own internal minimum, and enabling\n" "strict_protocol_version_checking will effectively override this." msgstr "" "Nyalakan untuk melarang sambungan dari klien lawas.\n" @@ -3103,16 +3273,6 @@ msgid "Defines full size of caverns, smaller values create larger caverns." msgstr "" "Mengatur ukuran penuh gua besar, nilai yang lebih kecil memperbesar gua." -#: src/settings_translation_file.cpp -msgid "" -"Defines how much bloom is applied to the rendered image\n" -"Smaller values make bloom more subtle\n" -"Range: from 0.01 to 1.0, default: 0.05" -msgstr "" -"Mengatur banyak bloom yang diterapkan ke citra tergambar\n" -"Nilai yang lebih kecil membuat bloom lebih halus\n" -"Rentang: dari 0,01 ke 1,0, bawaan: 0,05" - #: src/settings_translation_file.cpp msgid "Defines large-scale river channel structure." msgstr "Menetapkan struktur kanal sungai skala besar." @@ -3129,14 +3289,6 @@ msgstr "Mengatur ketinggian dasar tanah." msgid "Defines the depth of the river channel." msgstr "Mengatur kedalaman kanal sungai." -#: src/settings_translation_file.cpp -msgid "" -"Defines the magnitude of bloom overexposure.\n" -"Range: from 0.1 to 10.0, default: 1.0" -msgstr "" -"Mengatur kekuatan pajanan bloom berlebih\n" -"Rentang: dari 0.1 ke 10.0, bawaan: 1.0" - #: src/settings_translation_file.cpp msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." msgstr "" @@ -3224,10 +3376,6 @@ msgstr "Pilihan Pengembang" msgid "Digging particles" msgstr "Partikel penggalian" -#: src/settings_translation_file.cpp -msgid "Disable anticheat" -msgstr "Matikan anticurang" - #: src/settings_translation_file.cpp msgid "Disallow empty passwords" msgstr "Larang kata sandi kosong" @@ -3237,9 +3385,11 @@ msgid "Display Density Scaling Factor" msgstr "Pengali Skala Kepadatan Tampilan" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Distance in nodes at which transparency depth sorting is enabled\n" -"Use this to limit the performance impact of transparency depth sorting" +"Distance in nodes at which transparency depth sorting is enabled.\n" +"Use this to limit the performance impact of transparency depth sorting.\n" +"Set to 0 to disable it entirely." msgstr "" "Jarak dalam nodus yang dikenai pengurutan kedalaman transparansi\n" "Gunakan ini untuk membatasi dampak kinerja akibat pengurutan ini" @@ -3272,6 +3422,11 @@ msgstr "Y minimum dungeon" msgid "Dungeon noise" msgstr "Noise dungeon" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Effects" +msgstr "Efek Grafika" + #: src/settings_translation_file.cpp msgid "Enable Automatic Exposure" msgstr "Nyalakan Pajanan Otomatis" @@ -3378,9 +3533,8 @@ msgid "Enable random user input (only used for testing)." msgstr "Gunakan masukan pengguna acak (hanya digunakan untuk pengujian)." #: src/settings_translation_file.cpp -msgid "" -"Enable smooth lighting with simple ambient occlusion.\n" -"Disable for speed or for different looks." +#, fuzzy +msgid "Enable smooth lighting with simple ambient occlusion." msgstr "" "Gunakan pencahayaan halus dengan ambient occlusion sederhana.\n" "Matikan agar cepat atau untuk tampilan lain." @@ -3403,8 +3557,8 @@ msgstr "" "server baru, tetapi mungkin tidak mendukung semua fitur baru yang diharapkan." #: src/settings_translation_file.cpp -msgid "Enable touchscreen" -msgstr "Nyalakan layar sentuh" +msgid "Enable updates available indicator on content tab" +msgstr "" #: src/settings_translation_file.cpp msgid "" @@ -3452,22 +3606,32 @@ msgid "Enables animation of inventory items." msgstr "Jalankan animasi barang inventaris." #: src/settings_translation_file.cpp -msgid "Enables caching of facedir rotated meshes." +#, fuzzy +msgid "" +"Enables caching of facedir rotated meshes.\n" +"This is only effective with shaders disabled." msgstr "Gunakan tembolok untuk facedir mesh yang diputar." #: src/settings_translation_file.cpp msgid "Enables debug and error-checking in the OpenGL driver." msgstr "Nyalakan awakutu dan pemeriksa-masalah dalam pengandar OpenGL." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enables smooth scrolling." +msgstr "Nyalakan Pasca-Pengolahan" + #: src/settings_translation_file.cpp msgid "Enables the post processing pipeline." msgstr "Nyalakan alur pasca-pengolahan." #: src/settings_translation_file.cpp msgid "" -"Enables touchscreen mode, allowing you to play the game with a touchscreen." +"Enables the touchscreen controls, allowing you to play the game with a " +"touchscreen.\n" +"\"auto\" means that the touchscreen controls will be enabled and disabled\n" +"automatically depending on the last used input method." msgstr "" -"Nyalakan mode layar sentuh sehingga Anda bisa bermain dengan layar sentuh." #: src/settings_translation_file.cpp msgid "" @@ -3826,10 +3990,6 @@ msgstr "" msgid "Graphics" msgstr "Grafika" -#: src/settings_translation_file.cpp -msgid "Graphics Effects" -msgstr "Efek Grafika" - #: src/settings_translation_file.cpp msgid "Graphics and Audio" msgstr "Grafika dan Audio" @@ -4035,6 +4195,13 @@ msgstr "" "Jika dimatikan, tombol \"Aux1\" digunakan untuk terbang cepat jika mode\n" "terbang dan cepat dinyalakan." +#: src/settings_translation_file.cpp +msgid "" +"If enabled and you have ContentDB packages installed, Luanti may contact " +"ContentDB to\n" +"check for package updates when opening the mainmenu." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down " @@ -4060,10 +4227,6 @@ msgstr "" "Jika dinyalakan, perilaku akan direkam untuk cadangan (rollback).\n" "Pilihan ini hanya dibaca saat server dimulai." -#: src/settings_translation_file.cpp -msgid "If enabled, disable cheat prevention in multiplayer." -msgstr "Jika dinyalakan, jangan gunakan pencegahan curang dalam multipemain." - #: src/settings_translation_file.cpp msgid "" "If enabled, invalid world data won't cause the server to shut down.\n" @@ -4174,9 +4337,10 @@ msgid "Instrument chat commands on registration." msgstr "Perkakas perintah obrolan saat pendaftaran." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Instrument global callback functions on registration.\n" -"(anything you pass to a minetest.register_*() function)" +"(anything you pass to a core.register_*() function)" msgstr "" "Melengkapi fungsi panggil balik (callback) global saat didaftarkan.\n" "(semua yang dimasukkan ke fungsi minetest.register_*())" @@ -4381,10 +4545,11 @@ msgid "Leaves style" msgstr "Gaya dedaunan" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Leaves style:\n" "- Fancy: all faces visible\n" -"- Simple: only outer faces, if defined special_tiles are used\n" +"- Simple: only outer faces\n" "- Opaque: disable transparency" msgstr "" "Gaya daun:\n" @@ -4399,7 +4564,9 @@ msgid "" "Length of a server tick (the interval at which everything is generally " "updated),\n" "stated in seconds.\n" -"Does not apply to sessions hosted from the client menu." +"Does not apply to sessions hosted from the client menu.\n" +"This is a lower bound, i.e. server steps may not be shorter than this, but\n" +"they are often longer." msgstr "" "Lama detikan server dan selang waktu bagi objek secara umum untuk " "diperbarui\n" @@ -4516,6 +4683,11 @@ msgstr "Loop cairan maksimum" msgid "Liquid queue purge time" msgstr "Waktu pembersihan antrean cairan" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Liquid reflections" +msgstr "Keenceran cairan" + #: src/settings_translation_file.cpp msgid "Liquid sinking" msgstr "Kelajuan tenggelam dalam cairan" @@ -4546,16 +4718,6 @@ msgstr "" msgid "Loading Block Modifiers" msgstr "Pengubah Blok Termuat" -#: src/settings_translation_file.cpp -msgid "" -"Logical value that controls how far the bloom effect spreads\n" -"from the bright objects.\n" -"Range: from 0.1 to 8, default: 1" -msgstr "" -"Nilai logika yang mengatur luas persebaran efek bloom\n" -"dari objek terang.\n" -"Rentang: dari 0.1 ke 8, bawaan: 1" - #: src/settings_translation_file.cpp msgid "Lower Y limit of dungeons." msgstr "Batas bawah Y dungeon." @@ -4856,14 +5018,11 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Maximum number of packets sent per send step, if you have a slow connection\n" -"try reducing it, but don't reduce it to a number below double of targeted\n" -"client number." +"Maximum number of packets sent per send step in the low-level networking " +"code.\n" +"You generally don't need to change this, however busy servers may benefit " +"from a higher number." msgstr "" -"Jumlah maksimum paket dikirim per langkah mengirim (send step), jika Anda\n" -"memiliki sambungan lambat, cobalah untuk menguranginya, tetapi jangan " -"mengurangi\n" -"di bawah dua kalinya jumlah klien yang ditargetkan." #: src/settings_translation_file.cpp msgid "Maximum number of players that can be connected simultaneously." @@ -5092,6 +5251,10 @@ msgstr "Penyorotan Nodus dan Entitas" msgid "Node highlighting" msgstr "Penyorotan nodus" +#: src/settings_translation_file.cpp +msgid "Node specular" +msgstr "" + #: src/settings_translation_file.cpp msgid "NodeTimer interval" msgstr "Jarak NodeTimer" @@ -5145,9 +5308,10 @@ msgid "Number of messages a player may send per 10 seconds." msgstr "Jumlah pesan yang dapat dikirim pemain per 10 detik." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Number of threads to use for mesh generation.\n" -"Value of 0 (default) will let Minetest autodetect the number of available " +"Value of 0 (default) will let Luanti autodetect the number of available " "threads." msgstr "" "Jumlah utas untuk pembuatan mesh.\n" @@ -5181,10 +5345,20 @@ msgstr "" msgid "OpenGL debug" msgstr "Awakutu OpenGL" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Optimize GUI for touchscreens" +msgstr "Gunakan crosshair untuk layar sentuh" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "Penimpaan opsional untuk warna tautan web pada obrolan." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Other Effects" +msgstr "Efek Grafika" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font. Must be a TrueType font.\n" @@ -5297,9 +5471,10 @@ msgid "Prometheus listener address" msgstr "Alamat pendengar Prometheus" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Prometheus listener address.\n" -"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Luanti is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" "Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" @@ -5329,6 +5504,10 @@ msgstr "" "Jari-jari daerah awan dalam jumlah dari 64 nodus awan kotak.\n" "Nilai lebih dari 26 akan mulai menghasilkan tepian tajam pada sudut awan." +#: src/settings_translation_file.cpp +msgid "Radius to use when the block bounds HUD feature is set to near blocks." +msgstr "" + #: src/settings_translation_file.cpp msgid "Raises terrain to make valleys around the rivers." msgstr "Menaikkan medan untuk membuat lembah di sekitar sungai." @@ -5644,6 +5823,17 @@ msgstr "" "17 = Mandelbrot set 4D \"Mandelbulb\".\n" "18 = Julia set 4D \"Mandelbulb\"." +#: src/settings_translation_file.cpp +msgid "" +"Send names of online players to the serverlist. If disabled only the player " +"count is revealed." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Send player names to the server list" +msgstr "Umumkan ke daftar server ini." + #: src/settings_translation_file.cpp msgid "Server" msgstr "Server" @@ -5664,6 +5854,13 @@ msgstr "URL server" msgid "Server address" msgstr "Alamat server" +#: src/settings_translation_file.cpp +msgid "" +"Server anticheat configuration.\n" +"Flags are positive. Uncheck the flag to disable corresponding anticheat " +"module." +msgstr "" + #: src/settings_translation_file.cpp msgid "Server description" msgstr "Keterangan server" @@ -5812,16 +6009,10 @@ msgid "Shaders" msgstr "Shader" #: src/settings_translation_file.cpp -#, fuzzy msgid "" -"Shaders allow advanced visual effects and may increase performance on some " -"video\n" -"cards." +"Shaders are a fundamental part of rendering and enable advanced visual " +"effects." msgstr "" -"Shader membolehkan efek visual tingkat lanjut dan dapat meningkatkan " -"kinerja\n" -"pada beberapa kartu video.\n" -"Ini hanya bekerja dengan penggambar video OpenGL." #: src/settings_translation_file.cpp msgid "Shadow filter quality" @@ -5890,6 +6081,10 @@ msgstr "" "Sistem dengan GPU kelas rendah (atau tanpa GPU) akan lebih bagus dengan " "nilai yang lebih kecil." +#: src/settings_translation_file.cpp +msgid "Simulate translucency when looking at foliage in the sunlight." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Size of mapchunks generated by mapgen, stated in mapblocks (16 nodes).\n" @@ -5939,6 +6134,11 @@ msgstr "Variasi suhu skala kecil untuk paduan di tepi bioma." msgid "Smooth lighting" msgstr "Pencahayaan halus" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Smooth scrolling" +msgstr "Pencahayaan halus" + #: src/settings_translation_file.cpp #, fuzzy msgid "" @@ -5964,6 +6164,11 @@ msgstr "Kelajuan menyelinap" msgid "Sneaking speed, in nodes per second." msgstr "Kelajuan menyelinap dalam nodus per detik." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Soft clouds" +msgstr "Awan 3D" + #: src/settings_translation_file.cpp msgid "Soft shadow radius" msgstr "Jari-jari bayangan halus" @@ -6191,14 +6396,14 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"The gesture for for punching players/entities.\n" +"The gesture for punching players/entities.\n" "This can be overridden by games and mods.\n" "\n" "* short_tap\n" "Easy to use and well-known from other games that shall not be named.\n" "\n" "* long_tap\n" -"Known from the classic Minetest mobile controls.\n" +"Known from the classic Luanti mobile controls.\n" "Combat is more or less impossible." msgstr "" @@ -6268,8 +6473,7 @@ msgstr "" msgid "" "The rendering back-end.\n" "Note: A restart is required after changing this!\n" -"OpenGL is the default for desktop, and OGLES2 for Android.\n" -"Shaders are supported by everything but OGLES1." +"OpenGL is the default for desktop, and OGLES2 for Android." msgstr "" "Penggambar video.\n" "Catatan: Mulai ulang diperlukan setelah mengganti ini!\n" @@ -6391,6 +6595,12 @@ msgstr "" "Ini menentukan seberapa lama mereka diperlambat setelah menaruh atau " "mencopot nodus." +#: src/settings_translation_file.cpp +msgid "" +"Tolerance of movement cheat detector.\n" +"Increase the value if players experience stuttery movement." +msgstr "" + #: src/settings_translation_file.cpp msgid "Tooltip delay" msgstr "Jeda tooltip" @@ -6399,6 +6609,11 @@ msgstr "Jeda tooltip" msgid "Touchscreen" msgstr "Layar Sentuh" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Touchscreen controls" +msgstr "Ambang batas layar sentuh" + #: src/settings_translation_file.cpp msgid "Touchscreen sensitivity" msgstr "Kepekaan layar sentuh" @@ -6411,6 +6626,11 @@ msgstr "Pengali kepekaan layar sentuh." msgid "Tradeoffs for performance" msgstr "Pertukaran untuk kinerja" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Translucent foliage" +msgstr "Cairan agak tembus pandang" + #: src/settings_translation_file.cpp msgid "Translucent liquids" msgstr "Cairan agak tembus pandang" @@ -6462,8 +6682,8 @@ msgstr "" #: src/settings_translation_file.cpp #, fuzzy msgid "" -"URL to JSON file which provides information about the newest Minetest " -"release\n" +"URL to JSON file which provides information about the newest Luanti " +"release.\n" "If this is empty the engine will never check for updates." msgstr "" "URL ke berkas JSON yang memberikan informasi tentang rilis Minetest terbaru" @@ -6560,6 +6780,10 @@ msgstr "" "Flag ini membolehkan penggunaan uji raytraced occlusion culling\n" "untuk ukuran mesh klien yang lebih kecil daripada 4x4x4 blok peta." +#: src/settings_translation_file.cpp +msgid "Use smooth cloud shading." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Use trilinear filtering when scaling textures.\n" @@ -6764,6 +6988,16 @@ msgstr "Tanaman berayun" msgid "Weblink color" msgstr "Warna tautan web" +#: src/settings_translation_file.cpp +msgid "When enabled, liquid reflections are simulated." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When enabled, the GUI is optimized to be more usable on touchscreens.\n" +"Whether this is enabled by default depends on your hardware form-factor." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -6873,8 +7107,9 @@ msgid "Window maximized" msgstr "Jendela dimaksimalkan" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Windows systems only: Start Minetest with the command line window in the " +"Windows systems only: Start Luanti with the command line window in the " "background.\n" "Contains the same information as the file debug.txt (default name)." msgstr "" @@ -7080,6 +7315,9 @@ msgstr "cURL: batas jumlah paralel" #~ msgid "All Settings" #~ msgstr "Semua Pengaturan" +#~ msgid "All packages" +#~ msgstr "Semua paket" + #~ msgid "Alters how mountain-type floatlands taper above and below midpoint." #~ msgstr "" #~ "Ubah cara gunung floatland meramping di atas dan di bawah titik tengah." @@ -7096,6 +7334,9 @@ msgstr "cURL: batas jumlah paralel" #~ msgid "Aux1 key" #~ msgstr "Tombol Aux1" +#~ msgid "Back to Main Menu" +#~ msgstr "Kembali ke Menu Utama" + #~ msgid "Backward key" #~ msgstr "Tombol mundur" @@ -7114,6 +7355,18 @@ msgstr "cURL: batas jumlah paralel" #~ msgid "Block bounds shown for all blocks" #~ msgstr "Batasan blok ditampilkan untuk semua blok" +#~ msgid "Bloom" +#~ msgstr "Bloom(Bunga)" + +#~ msgid "Bloom Intensity" +#~ msgstr "Intensitas Bloom" + +#~ msgid "Bloom Radius" +#~ msgstr "Jari-Jari Bloom" + +#~ msgid "Bloom Strength Factor" +#~ msgstr "Pengali Kekuatan Bloom" + #~ msgid "Bump Mapping" #~ msgstr "Bump Mapping" @@ -7298,6 +7551,15 @@ msgstr "cURL: batas jumlah paralel" #~ "Mengatur daerah dari medan halus floatland.\n" #~ "Floatland halus muncul saat noise > 0." +#~ msgid "" +#~ "Defines how much bloom is applied to the rendered image\n" +#~ "Smaller values make bloom more subtle\n" +#~ "Range: from 0.01 to 1.0, default: 0.05" +#~ msgstr "" +#~ "Mengatur banyak bloom yang diterapkan ke citra tergambar\n" +#~ "Nilai yang lebih kecil membuat bloom lebih halus\n" +#~ "Rentang: dari 0,01 ke 1,0, bawaan: 0,05" + #~ msgid "" #~ "Defines sampling step of texture.\n" #~ "A higher value results in smoother normal maps." @@ -7305,12 +7567,22 @@ msgstr "cURL: batas jumlah paralel" #~ "Menentukan langkah penyampelan tekstur.\n" #~ "Nilai lebih tinggi menghasilkan peta lebih halus." +#~ msgid "" +#~ "Defines the magnitude of bloom overexposure.\n" +#~ "Range: from 0.1 to 10.0, default: 1.0" +#~ msgstr "" +#~ "Mengatur kekuatan pajanan bloom berlebih\n" +#~ "Rentang: dari 0.1 ke 10.0, bawaan: 1.0" + #~ msgid "Del. Favorite" #~ msgstr "Hapus favorit" #~ msgid "Dig key" #~ msgstr "Tombol gali" +#~ msgid "Disable anticheat" +#~ msgstr "Matikan anticurang" + #~ msgid "Disabled unlimited viewing range" #~ msgstr "Matikan jarak pandang tidak terbatas" @@ -7347,6 +7619,9 @@ msgstr "cURL: batas jumlah paralel" #~ msgid "Enable register confirmation" #~ msgstr "Gunakan konfirmasi pendaftaran" +#~ msgid "Enable touchscreen" +#~ msgstr "Nyalakan layar sentuh" + #~ msgid "" #~ "Enable vertex buffer objects.\n" #~ "This should greatly improve graphics performance." @@ -7354,9 +7629,6 @@ msgstr "cURL: batas jumlah paralel" #~ "Nyalakan vertex buffer object.\n" #~ "Ini dapat meningkatkan kinerja grafika." -#~ msgid "Enabled" -#~ msgstr "Dinyalakan" - #~ msgid "" #~ "Enables bumpmapping for textures. Normalmaps need to be supplied by the " #~ "texture pack\n" @@ -7400,6 +7672,12 @@ msgstr "cURL: batas jumlah paralel" #~ "akan tidak berfungsi.\n" #~ "Perubahan pengaturan ini memerlukan mulai ulang." +#~ msgid "" +#~ "Enables touchscreen mode, allowing you to play the game with a " +#~ "touchscreen." +#~ msgstr "" +#~ "Nyalakan mode layar sentuh sehingga Anda bisa bermain dengan layar sentuh." + #~ msgid "Enter " #~ msgstr "Masuk " @@ -7636,6 +7914,10 @@ msgstr "cURL: batas jumlah paralel" #~ "padat.\n" #~ "Hal ini memerlukan hak \"noclip\" pada server." +#~ msgid "If enabled, disable cheat prevention in multiplayer." +#~ msgstr "" +#~ "Jika dinyalakan, jangan gunakan pencegahan curang dalam multipemain." + #~ msgid "" #~ "If enabled, makes move directions relative to the player's pitch when " #~ "flying or swimming." @@ -7656,9 +7938,6 @@ msgstr "cURL: batas jumlah paralel" #~ msgid "Inc. volume key" #~ msgstr "Tombol konsol" -#~ msgid "Information:" -#~ msgstr "Informasi:" - #~ msgid "Install Mod: Unable to find real mod name for: $1" #~ msgstr "Pemasangan mod: Tidak dapat mencari nama yang sebenarnya dari: $1" @@ -8357,6 +8636,15 @@ msgstr "cURL: batas jumlah paralel" #~ msgid "Limit of emerge queues on disk" #~ msgstr "Batas antrean kemunculan (emerge queue) pada diska" +#~ msgid "" +#~ "Logical value that controls how far the bloom effect spreads\n" +#~ "from the bright objects.\n" +#~ "Range: from 0.1 to 8, default: 1" +#~ msgstr "" +#~ "Nilai logika yang mengatur luas persebaran efek bloom\n" +#~ "dari objek terang.\n" +#~ "Rentang: dari 0.1 ke 8, bawaan: 1" + #~ msgid "Main" #~ msgstr "Beranda" @@ -8372,6 +8660,19 @@ msgstr "cURL: batas jumlah paralel" #~ msgid "Mapblock mesh generator's MapBlock cache size in MB" #~ msgstr "Ukuran tembolok blok peta dari pembuat mesh blok peta dalam MB" +#~ msgid "" +#~ "Maximum number of packets sent per send step, if you have a slow " +#~ "connection\n" +#~ "try reducing it, but don't reduce it to a number below double of " +#~ "targeted\n" +#~ "client number." +#~ msgstr "" +#~ "Jumlah maksimum paket dikirim per langkah mengirim (send step), jika " +#~ "Anda\n" +#~ "memiliki sambungan lambat, cobalah untuk menguranginya, tetapi jangan " +#~ "mengurangi\n" +#~ "di bawah dua kalinya jumlah klien yang ditargetkan." + #~ msgid "Menus" #~ msgstr "Menu" @@ -8586,6 +8887,17 @@ msgstr "cURL: batas jumlah paralel" #~ msgid "Shaders (unavailable)" #~ msgstr "Shader (tidak tersedia)" +#, fuzzy +#~ msgid "" +#~ "Shaders allow advanced visual effects and may increase performance on " +#~ "some video\n" +#~ "cards." +#~ msgstr "" +#~ "Shader membolehkan efek visual tingkat lanjut dan dapat meningkatkan " +#~ "kinerja\n" +#~ "pada beberapa kartu video.\n" +#~ "Ini hanya bekerja dengan penggambar video OpenGL." + #~ msgid "Shadow limit" #~ msgstr "Batas bayangan" @@ -8680,9 +8992,6 @@ msgstr "cURL: batas jumlah paralel" #~ msgid "Touch threshold (px):" #~ msgstr "Batas sentuhan (px):" -#~ msgid "Touchscreen threshold" -#~ msgstr "Ambang batas layar sentuh" - #~ msgid "Trilinear Filter" #~ msgstr "Filter Trilinear" @@ -8757,6 +9066,9 @@ msgstr "cURL: batas jumlah paralel" #~ msgid "View" #~ msgstr "Tinjau" +#~ msgid "View more information in a web browser" +#~ msgstr "Lihat informasi lebih lanjut di peramban web" + #~ msgid "View range decrease key" #~ msgstr "Tombol mengurangi jarak pandang" diff --git a/po/it/luanti.po b/po/it/luanti.po index a88323256..be36b2c9c 100644 --- a/po/it/luanti.po +++ b/po/it/luanti.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Italian (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-07-11 15:14+0200\n" +"POT-Creation-Date: 2024-10-28 19:57+0100\n" "PO-Revision-Date: 2024-01-18 07:31+0000\n" "Last-Translator: Filippo Alfieri \n" "Language-Team: Italian 0." +#~ msgid "" +#~ "Defines how much bloom is applied to the rendered image\n" +#~ "Smaller values make bloom more subtle\n" +#~ "Range: from 0.01 to 1.0, default: 0.05" +#~ msgstr "" +#~ "Definisce la quantità di bagliore applicata all'immagine renderizzata\n" +#~ "I valori più piccoli rendono l'effetto più tenue\n" +#~ "Intervallo: da 0.01 a 1.0, predefinito: 0.05" + #~ msgid "" #~ "Defines sampling step of texture.\n" #~ "A higher value results in smoother normal maps." @@ -7564,6 +7822,13 @@ msgstr "Limite parallelo cURL" #~ "Stabilisce il passo di campionamento della texture.\n" #~ "Un valore maggiore dà normalmap più uniformi." +#~ msgid "" +#~ "Defines the magnitude of bloom overexposure.\n" +#~ "Range: from 0.1 to 10.0, default: 1.0" +#~ msgstr "" +#~ "Definisce l'intensità della sovraesposizione del bagliore.\n" +#~ "Intervallo: da 0.1 a 10.0, predefinito: 1.0" + #~ msgid "Del. Favorite" #~ msgstr "Elimina il Preferito" @@ -7579,6 +7844,9 @@ msgstr "Limite parallelo cURL" #~ msgid "Dig key" #~ msgstr "Tasto scava" +#~ msgid "Disable anticheat" +#~ msgstr "Disattiva anti-trucchi" + #~ msgid "Disabled unlimited viewing range" #~ msgstr "Raggio visivo illimitato disabilitato" @@ -7612,6 +7880,10 @@ msgstr "Limite parallelo cURL" #~ msgid "Enable register confirmation" #~ msgstr "Abilita conferma registrazione" +#, fuzzy +#~ msgid "Enable touchscreen" +#~ msgstr "Touch screen" + #~ msgid "" #~ "Enable vertex buffer objects.\n" #~ "This should greatly improve graphics performance." @@ -7619,9 +7891,6 @@ msgstr "Limite parallelo cURL" #~ "Attivare gli oggetti tampone per i vertici.\n" #~ "Questo dovrebbe migliorare notevolmente le prestazioni grafiche." -#~ msgid "Enabled" -#~ msgstr "Abilitato" - #~ msgid "" #~ "Enables bumpmapping for textures. Normalmaps need to be supplied by the " #~ "texture pack\n" @@ -7903,6 +8172,10 @@ msgstr "Limite parallelo cURL" #~ "solidi.\n" #~ "Richiede il privilegio \"noclip\" sul server." +#~ msgid "If enabled, disable cheat prevention in multiplayer." +#~ msgstr "" +#~ "Se abilitata, disabilita la protezione anti-trucchi nel gioco in rete." + #~ msgid "" #~ "If enabled, makes move directions relative to the player's pitch when " #~ "flying or swimming." @@ -7916,9 +8189,6 @@ msgstr "Limite parallelo cURL" #~ msgid "Inc. volume key" #~ msgstr "Tasto aum. volume" -#~ msgid "Information:" -#~ msgstr "Informazioni:" - #~ msgid "Install Mod: Unable to find real mod name for: $1" #~ msgstr "Installa Modulo: Impossibile trovare il nome vero del mod per: $1" @@ -8619,6 +8889,15 @@ msgstr "Limite parallelo cURL" #~ msgid "Limit of emerge queues on disk" #~ msgstr "Limite di code emerge su disco" +#~ msgid "" +#~ "Logical value that controls how far the bloom effect spreads\n" +#~ "from the bright objects.\n" +#~ "Range: from 0.1 to 8, default: 1" +#~ msgstr "" +#~ "Valore logico che controlla fino a che punto si diffonde il bagliore\n" +#~ "dagli oggetti luminosi.\n" +#~ "Intervallo: da 0.1 a 8, predefinito: 1" + #~ msgid "Main" #~ msgstr "Principale" @@ -8634,6 +8913,19 @@ msgstr "Limite parallelo cURL" #~ msgid "Mapblock mesh generator's MapBlock cache size in MB" #~ msgstr "Dimensione in MB del generatore mesh del blocco mappa" +#~ msgid "" +#~ "Maximum number of packets sent per send step, if you have a slow " +#~ "connection\n" +#~ "try reducing it, but don't reduce it to a number below double of " +#~ "targeted\n" +#~ "client number." +#~ msgstr "" +#~ "Numero massimo di pacchetti inviati per passo di invio, se hai una " +#~ "connessione\n" +#~ "lenta prova a ridurlo, ma non ridurlo a un numero inferiore al doppio del " +#~ "numero\n" +#~ "dei client interessati." + #~ msgid "Menus" #~ msgstr "Menu" @@ -8855,6 +9147,17 @@ msgstr "Limite parallelo cURL" #~ msgid "Shaders (unavailable)" #~ msgstr "Shaders (non disponibili)" +#, fuzzy +#~ msgid "" +#~ "Shaders allow advanced visual effects and may increase performance on " +#~ "some video\n" +#~ "cards." +#~ msgstr "" +#~ "Gli shader permettono l'utilizzo di effetti visivi avanzati e potrebbero " +#~ "aumentare\n" +#~ "le prestazioni su alcune schede video.\n" +#~ "Ciò funziona solo col supporto video OpenGL." + #~ msgid "Shadow limit" #~ msgstr "Limite dell'ombra" @@ -8952,10 +9255,6 @@ msgstr "Limite parallelo cURL" #~ msgid "Touch threshold (px):" #~ msgstr "Soglia del tocco: (px):" -#, fuzzy -#~ msgid "Touchscreen threshold" -#~ msgstr "Soglia del touch screen" - #~ msgid "Trilinear Filter" #~ msgstr "Filtro Trilineare" @@ -9037,6 +9336,9 @@ msgstr "Limite parallelo cURL" #~ msgid "View" #~ msgstr "Vedi" +#~ msgid "View more information in a web browser" +#~ msgstr "Visualizza ulteriori informazioni in un browser Web" + #~ msgid "View range decrease key" #~ msgstr "Tasto diminuzione raggio visivo" diff --git a/po/ja/luanti.po b/po/ja/luanti.po index f08ea965f..79eebeb7c 100644 --- a/po/ja/luanti.po +++ b/po/ja/luanti.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Japanese (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-07-11 15:14+0200\n" +"POT-Creation-Date: 2024-10-28 19:57+0100\n" "PO-Revision-Date: 2024-08-08 13:09+0000\n" "Last-Translator: BreadW \n" "Language-Team: Japanese \n" "Language-Team: Lojban \n" @@ -56,14 +56,6 @@ msgstr "" msgid "This command is disabled by server." msgstr "" -#: builtin/client/death_formspec.lua src/client/game.cpp -msgid "Respawn" -msgstr "Bangkit Malilh" - -#: builtin/client/death_formspec.lua src/client/game.cpp -msgid "You died" -msgstr "Panjenengan pejah" - #: builtin/common/chatcommands.lua msgid "Available commands:" msgstr "" @@ -168,15 +160,17 @@ msgid "$1 downloading..." msgstr "$1 dipunundhuh..." #: builtin/mainmenu/content/dlg_contentdb.lua -msgid "All packages" -msgstr "Sedaya paket" +msgid "All" +msgstr "" #: builtin/mainmenu/content/dlg_contentdb.lua -msgid "Back to Main Menu" -msgstr "Balik dhateng menu utama" +#: builtin/mainmenu/content/dlg_package.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "Back" +msgstr "" #: builtin/mainmenu/content/dlg_contentdb.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" +msgid "ContentDB is not available when Luanti was compiled without cURL" msgstr "" #: builtin/mainmenu/content/dlg_contentdb.lua @@ -184,7 +178,7 @@ msgid "Downloading..." msgstr "Ngundhuh..." #: builtin/mainmenu/content/dlg_contentdb.lua -msgid "Error getting dependencies for package" +msgid "Featured" msgstr "" #: builtin/mainmenu/content/dlg_contentdb.lua @@ -193,11 +187,8 @@ msgstr "Dolanan" #: builtin/mainmenu/content/dlg_contentdb.lua #: builtin/mainmenu/content/dlg_install.lua -msgid "Install" -msgstr "Pasang" - -#: builtin/mainmenu/content/dlg_contentdb.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp +#: builtin/mainmenu/content/dlg_package.lua builtin/mainmenu/serverlistmgr.lua +#: src/client/game.cpp msgid "Loading..." msgstr "Ngewrat..." @@ -206,6 +197,7 @@ msgid "Mods" msgstr "Mod" #: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_package.lua msgid "No packages could be retrieved" msgstr "Boten wonten paket ingkang saget dipundhut" @@ -223,33 +215,18 @@ msgid "Queued" msgstr "Dipunantreaken" #: builtin/mainmenu/content/dlg_contentdb.lua -msgid "Texture packs" +#, fuzzy +msgid "Texture Packs" msgstr "Paket tekstur" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "The package $1 was not found." msgstr "Paket $1 boten kepanggih." -#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "Copot" - -#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "Enggalaken" - #: builtin/mainmenu/content/dlg_contentdb.lua msgid "Update All [$1]" msgstr "Enggalaken Sedaya [$1]" -#: builtin/mainmenu/content/dlg_contentdb.lua -msgid "View more information in a web browser" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentdb.lua -msgid "You need to install a game before you can install a mod" -msgstr "" - #: builtin/mainmenu/content/dlg_install.lua msgid "$1 and $2 dependencies will be installed." msgstr "$1 kaliyan $2 dependensi badhe dipunpasang." @@ -291,6 +268,14 @@ msgstr "Batal" msgid "Dependencies:" msgstr "Dependensi:" +#: builtin/mainmenu/content/dlg_install.lua +msgid "Error getting dependencies for package $1" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +msgstr "Pasang" + #: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "Pasang $1" @@ -307,6 +292,10 @@ msgstr "Boten kepanggih" msgid "Please check that the base game is correct." msgstr "" +#: builtin/mainmenu/content/dlg_install.lua +msgid "You need to install a game before you can install a mod" +msgstr "" + #: builtin/mainmenu/content/dlg_overwrite.lua msgid "\"$1\" already exists. Would you like to overwrite it?" msgstr "" @@ -315,6 +304,61 @@ msgstr "" msgid "Overwrite" msgstr "Tindhih" +#: builtin/mainmenu/content/dlg_package.lua +#, fuzzy +msgid "ContentDB page" +msgstr "Konten: Dolanan" + +#: builtin/mainmenu/content/dlg_package.lua +#, fuzzy +msgid "Description" +msgstr "Katerangan Paladen" + +#: builtin/mainmenu/content/dlg_package.lua +msgid "Donate" +msgstr "" + +#: builtin/mainmenu/content/dlg_package.lua +msgid "Forum Topic" +msgstr "" + +#: builtin/mainmenu/content/dlg_package.lua +msgid "Information" +msgstr "" + +#: builtin/mainmenu/content/dlg_package.lua +#, fuzzy +msgid "Install [$1]" +msgstr "Pasang $1" + +#: builtin/mainmenu/content/dlg_package.lua +msgid "Issue Tracker" +msgstr "" + +#: builtin/mainmenu/content/dlg_package.lua +msgid "Source" +msgstr "" + +#: builtin/mainmenu/content/dlg_package.lua +msgid "Translate" +msgstr "" + +#: builtin/mainmenu/content/dlg_package.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "Copot" + +#: builtin/mainmenu/content/dlg_package.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "Enggalaken" + +#: builtin/mainmenu/content/dlg_package.lua +msgid "Website" +msgstr "" + +#: builtin/mainmenu/content/dlg_package.lua +msgid "by $1 — $2 downloads — +$3 / $4 / -$5" +msgstr "" + #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" msgstr "$1 (Dipunurupaken)" @@ -669,9 +713,8 @@ msgstr "Pinggiraken" #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "" -"For a long time, the Minetest engine shipped with a default game called " -"\"Minetest Game\". Since Minetest 5.8.0, Minetest ships without a default " -"game." +"For a long time, Luanti shipped with a default game called \"Minetest " +"Game\". Since version 5.8.0, Luanti ships without a default game." msgstr "" #: builtin/mainmenu/dlg_reinstall_mtg.lua @@ -823,6 +866,18 @@ msgstr "" msgid "eased" msgstr "" +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "(The game will need to enable automatic exposure as well)" +msgstr "" + +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "(The game will need to enable bloom as well)" +msgstr "" + +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "(The game will need to enable volumetric lighting as well)" +msgstr "" + #: builtin/mainmenu/settings/dlg_settings.lua msgid "(Use system language)" msgstr "(Ngagem basa sistem)" @@ -832,11 +887,11 @@ msgid "Accessibility" msgstr "" #: builtin/mainmenu/settings/dlg_settings.lua -msgid "Back" +msgid "Auto" msgstr "" #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp -#: src/settings_translation_file.cpp +#: src/gui/touchcontrols.cpp src/settings_translation_file.cpp msgid "Chat" msgstr "" @@ -849,6 +904,16 @@ msgstr "" msgid "Controls" msgstr "" +#: builtin/mainmenu/settings/dlg_settings.lua +#: builtin/mainmenu/settings/shadows_component.lua +msgid "Disabled" +msgstr "Dipunpejah" + +#: builtin/mainmenu/settings/dlg_settings.lua +#, fuzzy +msgid "Enabled" +msgstr "dipunurupaken" + #: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp msgid "General" msgstr "Umum" @@ -889,6 +954,19 @@ msgstr "Konten: Dolanan" msgid "Content: Mods" msgstr "Konten: Mod" +#: builtin/mainmenu/settings/shader_warning_component.lua +#, fuzzy +msgid "Enable" +msgstr "dipunurupaken" + +#: builtin/mainmenu/settings/shader_warning_component.lua +msgid "Shaders are disabled." +msgstr "" + +#: builtin/mainmenu/settings/shader_warning_component.lua +msgid "This is not a recommended configuration." +msgstr "" + #: builtin/mainmenu/settings/shadows_component.lua msgid "(The game will need to enable shadows as well)" msgstr "" @@ -897,10 +975,6 @@ msgstr "" msgid "Custom" msgstr "" -#: builtin/mainmenu/settings/shadows_component.lua -msgid "Disabled" -msgstr "Dipunpejah" - #: builtin/mainmenu/settings/shadows_component.lua #: src/settings_translation_file.cpp msgid "Dynamic shadows" @@ -1049,12 +1123,12 @@ msgid "Install games from ContentDB" msgstr "Pasang dolanan saking ContentDB" #: builtin/mainmenu/tab_local.lua -msgid "Minetest doesn't come with a game by default." +msgid "Luanti doesn't come with a game by default." msgstr "" #: builtin/mainmenu/tab_local.lua msgid "" -"Minetest is a game-creation platform that allows you to play many different " +"Luanti is a game-creation platform that allows you to play many different " "games." msgstr "" @@ -1471,6 +1545,10 @@ msgstr "" msgid "Resolving address..." msgstr "" +#: src/client/game.cpp +msgid "Respawn" +msgstr "Bangkit Malilh" + #: src/client/game.cpp msgid "Shutting down..." msgstr "Mejahi..." @@ -1566,6 +1644,10 @@ msgstr "Volume dipungantos dados %d%%" msgid "Wireframe shown" msgstr "" +#: src/client/game.cpp +msgid "You died" +msgstr "Panjenengan pejah" + #: src/client/game.cpp msgid "Zoom currently disabled by game or mod" msgstr "" @@ -1944,7 +2026,7 @@ msgstr "" msgid "Automatic jumping" msgstr "" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Aux1" msgstr "" @@ -1956,7 +2038,7 @@ msgstr "" msgid "Block bounds" msgstr "" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Change camera" msgstr "" @@ -1980,7 +2062,7 @@ msgstr "" msgid "Double tap \"jump\" to toggle fly" msgstr "" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Drop" msgstr "" @@ -1996,11 +2078,11 @@ msgstr "" msgid "Inc. volume" msgstr "" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Inventory" msgstr "" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Jump" msgstr "Lumpat" @@ -2032,7 +2114,7 @@ msgstr "" msgid "Prev. item" msgstr "" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Range select" msgstr "" @@ -2044,7 +2126,7 @@ msgstr "" msgid "Screenshot" msgstr "" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Sneak" msgstr "" @@ -2052,15 +2134,15 @@ msgstr "" msgid "Toggle HUD" msgstr "" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Toggle chat log" msgstr "" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Toggle fast" msgstr "" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Toggle fly" msgstr "" @@ -2068,11 +2150,11 @@ msgstr "" msgid "Toggle fog" msgstr "" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Toggle minimap" msgstr "" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Toggle noclip" msgstr "" @@ -2080,7 +2162,7 @@ msgstr "" msgid "Toggle pitchmove" msgstr "" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Zoom" msgstr "" @@ -2116,7 +2198,7 @@ msgstr "Sandi Dangu" msgid "Passwords do not match!" msgstr "Sandi boten cocog!" -#: src/gui/guiVolumeChange.cpp +#: src/gui/guiVolumeChange.cpp src/gui/touchcontrols.cpp msgid "Exit" msgstr "Medal" @@ -2129,6 +2211,37 @@ msgstr "Mbisu" msgid "Sound Volume: %d%%" msgstr "Volume Swanten: %d%%" +#: src/gui/touchcontrols.cpp +msgid "Joystick" +msgstr "" + +#: src/gui/touchcontrols.cpp +msgid "Overflow menu" +msgstr "" + +#: src/gui/touchcontrols.cpp +msgid "Toggle debug" +msgstr "" + +#: src/network/clientpackethandler.cpp +msgid "" +"Another client is connected with this name. If your client closed " +"unexpectedly, try again in a minute." +msgstr "" + +#: src/network/clientpackethandler.cpp +msgid "Empty passwords are disallowed. Set a password and try again." +msgstr "" + +#: src/network/clientpackethandler.cpp +msgid "Internal server error" +msgstr "" + +#: src/network/clientpackethandler.cpp +#, fuzzy +msgid "Invalid password" +msgstr "Sandi Dangu" + #. ~ DO NOT TRANSLATE THIS LITERALLY! #. This is a special string which needs to contain the translation's #. language code (e.g. "de" for German). @@ -2148,6 +2261,49 @@ msgstr "" msgid "Name is taken. Please choose another name" msgstr "Asma sampun dipundaftar. Sumangga pilih asma sanesipun" +#: src/network/clientpackethandler.cpp +msgid "Player name contains disallowed characters" +msgstr "" + +#: src/network/clientpackethandler.cpp +#, fuzzy +msgid "Player name not allowed" +msgstr "Asma pandolan panjang sanget." + +#: src/network/clientpackethandler.cpp +#, fuzzy +msgid "Server shutting down" +msgstr "Mejahi..." + +#: src/network/clientpackethandler.cpp +msgid "" +"The server has experienced an internal error. You will now be disconnected." +msgstr "" + +#: src/network/clientpackethandler.cpp +msgid "The server is running in singleplayer mode. You cannot connect." +msgstr "" + +#: src/network/clientpackethandler.cpp +msgid "Too many users" +msgstr "" + +#: src/network/clientpackethandler.cpp +msgid "Unknown disconnect reason." +msgstr "" + +#: src/network/clientpackethandler.cpp +msgid "" +"Your client sent something the server didn't expect. Try reconnecting or " +"updating your client." +msgstr "" + +#: src/network/clientpackethandler.cpp +msgid "" +"Your client's version is not supported.\n" +"Please contact the server administrator." +msgstr "" + #: src/server.cpp #, c-format msgid "%s while shutting down: " @@ -2388,6 +2544,14 @@ msgstr "" msgid "Antialiasing method" msgstr "" +#: src/settings_translation_file.cpp +msgid "Anticheat flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Anticheat movement tolerance" +msgstr "" + #: src/settings_translation_file.cpp msgid "Append item name" msgstr "" @@ -2411,6 +2575,10 @@ msgid "" "floating-point precision and it may have a higher performance impact." msgstr "" +#: src/settings_translation_file.cpp +msgid "Apply specular shading to nodes." +msgstr "" + #: src/settings_translation_file.cpp msgid "Arm inertia" msgstr "" @@ -2509,6 +2677,10 @@ msgstr "" msgid "Biome noise" msgstr "" +#: src/settings_translation_file.cpp +msgid "Block bounds HUD radius" +msgstr "" + #: src/settings_translation_file.cpp msgid "Block cull optimize distance" msgstr "" @@ -2517,22 +2689,6 @@ msgstr "" msgid "Block send optimize distance" msgstr "" -#: src/settings_translation_file.cpp -msgid "Bloom" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Bloom Intensity" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Bloom Radius" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Bloom Strength Factor" -msgstr "" - #: src/settings_translation_file.cpp msgid "Bobbing" msgstr "" @@ -2738,7 +2894,7 @@ msgid "" "software',\n" "as defined by the Free Software Foundation.\n" "You can also specify content ratings.\n" -"These flags are independent from Minetest versions,\n" +"These flags are independent from Luanti versions,\n" "so see a full list at https://content.minetest.net/help/content_flags/" msgstr "" @@ -2920,7 +3076,7 @@ msgid "" "expecting.\n" "This allows for more fine-grained control than " "strict_protocol_version_checking.\n" -"Minetest still enforces its own internal minimum, and enabling\n" +"Luanti still enforces its own internal minimum, and enabling\n" "strict_protocol_version_checking will effectively override this." msgstr "" @@ -2944,13 +3100,6 @@ msgstr "" msgid "Defines full size of caverns, smaller values create larger caverns." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Defines how much bloom is applied to the rendered image\n" -"Smaller values make bloom more subtle\n" -"Range: from 0.01 to 1.0, default: 0.05" -msgstr "" - #: src/settings_translation_file.cpp msgid "Defines large-scale river channel structure." msgstr "" @@ -2967,12 +3116,6 @@ msgstr "" msgid "Defines the depth of the river channel." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Defines the magnitude of bloom overexposure.\n" -"Range: from 0.1 to 10.0, default: 1.0" -msgstr "" - #: src/settings_translation_file.cpp msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." msgstr "" @@ -3050,10 +3193,6 @@ msgstr "" msgid "Digging particles" msgstr "" -#: src/settings_translation_file.cpp -msgid "Disable anticheat" -msgstr "" - #: src/settings_translation_file.cpp msgid "Disallow empty passwords" msgstr "" @@ -3064,8 +3203,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Distance in nodes at which transparency depth sorting is enabled\n" -"Use this to limit the performance impact of transparency depth sorting" +"Distance in nodes at which transparency depth sorting is enabled.\n" +"Use this to limit the performance impact of transparency depth sorting.\n" +"Set to 0 to disable it entirely." msgstr "" #: src/settings_translation_file.cpp @@ -3096,6 +3236,10 @@ msgstr "" msgid "Dungeon noise" msgstr "" +#: src/settings_translation_file.cpp +msgid "Effects" +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable Automatic Exposure" msgstr "" @@ -3187,9 +3331,7 @@ msgid "Enable random user input (only used for testing)." msgstr "" #: src/settings_translation_file.cpp -msgid "" -"Enable smooth lighting with simple ambient occlusion.\n" -"Disable for speed or for different looks." +msgid "Enable smooth lighting with simple ambient occlusion." msgstr "" #: src/settings_translation_file.cpp @@ -3206,7 +3348,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Enable touchscreen" +msgid "Enable updates available indicator on content tab" msgstr "" #: src/settings_translation_file.cpp @@ -3243,20 +3385,29 @@ msgid "Enables animation of inventory items." msgstr "" #: src/settings_translation_file.cpp -msgid "Enables caching of facedir rotated meshes." +msgid "" +"Enables caching of facedir rotated meshes.\n" +"This is only effective with shaders disabled." msgstr "" #: src/settings_translation_file.cpp msgid "Enables debug and error-checking in the OpenGL driver." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enables smooth scrolling." +msgstr "" + #: src/settings_translation_file.cpp msgid "Enables the post processing pipeline." msgstr "" #: src/settings_translation_file.cpp msgid "" -"Enables touchscreen mode, allowing you to play the game with a touchscreen." +"Enables the touchscreen controls, allowing you to play the game with a " +"touchscreen.\n" +"\"auto\" means that the touchscreen controls will be enabled and disabled\n" +"automatically depending on the last used input method." msgstr "" #: src/settings_translation_file.cpp @@ -3575,10 +3726,6 @@ msgstr "" msgid "Graphics" msgstr "" -#: src/settings_translation_file.cpp -msgid "Graphics Effects" -msgstr "" - #: src/settings_translation_file.cpp msgid "Graphics and Audio" msgstr "" @@ -3757,6 +3904,13 @@ msgid "" "enabled." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"If enabled and you have ContentDB packages installed, Luanti may contact " +"ContentDB to\n" +"check for package updates when opening the mainmenu." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down " @@ -3776,10 +3930,6 @@ msgid "" "This option is only read when server starts." msgstr "" -#: src/settings_translation_file.cpp -msgid "If enabled, disable cheat prevention in multiplayer." -msgstr "" - #: src/settings_translation_file.cpp msgid "" "If enabled, invalid world data won't cause the server to shut down.\n" @@ -3865,7 +4015,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Instrument global callback functions on registration.\n" -"(anything you pass to a minetest.register_*() function)" +"(anything you pass to a core.register_*() function)" msgstr "" #: src/settings_translation_file.cpp @@ -4047,7 +4197,7 @@ msgstr "" msgid "" "Leaves style:\n" "- Fancy: all faces visible\n" -"- Simple: only outer faces, if defined special_tiles are used\n" +"- Simple: only outer faces\n" "- Opaque: disable transparency" msgstr "" @@ -4056,7 +4206,9 @@ msgid "" "Length of a server tick (the interval at which everything is generally " "updated),\n" "stated in seconds.\n" -"Does not apply to sessions hosted from the client menu." +"Does not apply to sessions hosted from the client menu.\n" +"This is a lower bound, i.e. server steps may not be shorter than this, but\n" +"they are often longer." msgstr "" #: src/settings_translation_file.cpp @@ -4151,6 +4303,10 @@ msgstr "" msgid "Liquid queue purge time" msgstr "" +#: src/settings_translation_file.cpp +msgid "Liquid reflections" +msgstr "" + #: src/settings_translation_file.cpp msgid "Liquid sinking" msgstr "" @@ -4178,13 +4334,6 @@ msgstr "" msgid "Loading Block Modifiers" msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Logical value that controls how far the bloom effect spreads\n" -"from the bright objects.\n" -"Range: from 0.1 to 8, default: 1" -msgstr "" - #: src/settings_translation_file.cpp msgid "Lower Y limit of dungeons." msgstr "" @@ -4447,9 +4596,10 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Maximum number of packets sent per send step, if you have a slow connection\n" -"try reducing it, but don't reduce it to a number below double of targeted\n" -"client number." +"Maximum number of packets sent per send step in the low-level networking " +"code.\n" +"You generally don't need to change this, however busy servers may benefit " +"from a higher number." msgstr "" #: src/settings_translation_file.cpp @@ -4660,6 +4810,10 @@ msgstr "" msgid "Node highlighting" msgstr "" +#: src/settings_translation_file.cpp +msgid "Node specular" +msgstr "" + #: src/settings_translation_file.cpp msgid "NodeTimer interval" msgstr "" @@ -4700,7 +4854,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Number of threads to use for mesh generation.\n" -"Value of 0 (default) will let Minetest autodetect the number of available " +"Value of 0 (default) will let Luanti autodetect the number of available " "threads." msgstr "" @@ -4728,10 +4882,18 @@ msgstr "" msgid "OpenGL debug" msgstr "" +#: src/settings_translation_file.cpp +msgid "Optimize GUI for touchscreens" +msgstr "" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "" +#: src/settings_translation_file.cpp +msgid "Other Effects" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font. Must be a TrueType font.\n" @@ -4828,7 +4990,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Prometheus listener address.\n" -"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Luanti is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" "Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" @@ -4853,6 +5015,10 @@ msgid "" "corners." msgstr "" +#: src/settings_translation_file.cpp +msgid "Radius to use when the block bounds HUD feature is set to near blocks." +msgstr "" + #: src/settings_translation_file.cpp msgid "Raises terrain to make valleys around the rivers." msgstr "" @@ -5103,6 +5269,16 @@ msgid "" "18 = 4D \"Mandelbulb\" Julia set." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Send names of online players to the serverlist. If disabled only the player " +"count is revealed." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Send player names to the server list" +msgstr "" + #: src/settings_translation_file.cpp msgid "Server" msgstr "" @@ -5123,6 +5299,13 @@ msgstr "" msgid "Server address" msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Server anticheat configuration.\n" +"Flags are positive. Uncheck the flag to disable corresponding anticheat " +"module." +msgstr "" + #: src/settings_translation_file.cpp msgid "Server description" msgstr "" @@ -5245,9 +5428,8 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Shaders allow advanced visual effects and may increase performance on some " -"video\n" -"cards." +"Shaders are a fundamental part of rendering and enable advanced visual " +"effects." msgstr "" #: src/settings_translation_file.cpp @@ -5307,6 +5489,10 @@ msgid "" "Systems with a low-end GPU (or no GPU) would benefit from smaller values." msgstr "" +#: src/settings_translation_file.cpp +msgid "Simulate translucency when looking at foliage in the sunlight." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Size of mapchunks generated by mapgen, stated in mapblocks (16 nodes).\n" @@ -5349,6 +5535,10 @@ msgstr "" msgid "Smooth lighting" msgstr "" +#: src/settings_translation_file.cpp +msgid "Smooth scrolling" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Smooths rotation of camera when in cinematic mode, 0 to disable. Enter " @@ -5369,6 +5559,10 @@ msgstr "" msgid "Sneaking speed, in nodes per second." msgstr "" +#: src/settings_translation_file.cpp +msgid "Soft clouds" +msgstr "" + #: src/settings_translation_file.cpp msgid "Soft shadow radius" msgstr "" @@ -5550,14 +5744,14 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"The gesture for for punching players/entities.\n" +"The gesture for punching players/entities.\n" "This can be overridden by games and mods.\n" "\n" "* short_tap\n" "Easy to use and well-known from other games that shall not be named.\n" "\n" "* long_tap\n" -"Known from the classic Minetest mobile controls.\n" +"Known from the classic Luanti mobile controls.\n" "Combat is more or less impossible." msgstr "" @@ -5609,8 +5803,7 @@ msgstr "" msgid "" "The rendering back-end.\n" "Note: A restart is required after changing this!\n" -"OpenGL is the default for desktop, and OGLES2 for Android.\n" -"Shaders are supported by everything but OGLES1." +"OpenGL is the default for desktop, and OGLES2 for Android." msgstr "" #: src/settings_translation_file.cpp @@ -5701,6 +5894,12 @@ msgid "" "node." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Tolerance of movement cheat detector.\n" +"Increase the value if players experience stuttery movement." +msgstr "" + #: src/settings_translation_file.cpp msgid "Tooltip delay" msgstr "" @@ -5709,6 +5908,10 @@ msgstr "" msgid "Touchscreen" msgstr "" +#: src/settings_translation_file.cpp +msgid "Touchscreen controls" +msgstr "" + #: src/settings_translation_file.cpp msgid "Touchscreen sensitivity" msgstr "" @@ -5721,6 +5924,10 @@ msgstr "" msgid "Tradeoffs for performance" msgstr "" +#: src/settings_translation_file.cpp +msgid "Translucent foliage" +msgstr "" + #: src/settings_translation_file.cpp msgid "Translucent liquids" msgstr "" @@ -5760,8 +5967,8 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest " -"release\n" +"URL to JSON file which provides information about the newest Luanti " +"release.\n" "If this is empty the engine will never check for updates." msgstr "" @@ -5842,6 +6049,10 @@ msgid "" "client mesh sizes smaller than 4x4x4 map blocks." msgstr "" +#: src/settings_translation_file.cpp +msgid "Use smooth cloud shading." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Use trilinear filtering when scaling textures.\n" @@ -6025,6 +6236,16 @@ msgstr "" msgid "Weblink color" msgstr "" +#: src/settings_translation_file.cpp +msgid "When enabled, liquid reflections are simulated." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When enabled, the GUI is optimized to be more usable on touchscreens.\n" +"Whether this is enabled by default depends on your hardware form-factor." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -6109,7 +6330,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Windows systems only: Start Minetest with the command line window in the " +"Windows systems only: Start Luanti with the command line window in the " "background.\n" "Contains the same information as the file debug.txt (default name)." msgstr "" @@ -6200,6 +6421,12 @@ msgstr "" msgid "cURL parallel limit" msgstr "" +#~ msgid "All packages" +#~ msgstr "Sedaya paket" + +#~ msgid "Back to Main Menu" +#~ msgstr "Balik dhateng menu utama" + #~ msgid "Change Keys" #~ msgstr "Gantos Tombol" diff --git a/po/kk/luanti.po b/po/kk/luanti.po index ed4a5a512..5cdc9e82b 100644 --- a/po/kk/luanti.po +++ b/po/kk/luanti.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Kazakh (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-07-11 15:14+0200\n" +"POT-Creation-Date: 2024-10-28 19:57+0100\n" "PO-Revision-Date: 2024-10-06 05:16+0000\n" "Last-Translator: Soupborshfe5e4d4ba7c349aa \n" "Language-Team: Kazakh \n" "Language-Team: Kannada \n" "Language-Team: Korean \n" "Language-Team: Komi \n" "Language-Team: Kyrgyz \n" "Language-Team: Lithuanian , YEAR. # #, fuzzy msgid "" msgstr "" -"Project-Id-Version: minetest\n" +"Project-Id-Version: luanti\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-07-11 15:14+0200\n" +"POT-Creation-Date: 2024-10-28 19:57+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -53,14 +53,6 @@ msgstr "" msgid "The out chat queue is now empty." msgstr "" -#: builtin/client/death_formspec.lua src/client/game.cpp -msgid "You died" -msgstr "" - -#: builtin/client/death_formspec.lua src/client/game.cpp -msgid "Respawn" -msgstr "" - #: builtin/common/chatcommands.lua msgid "Available commands: " msgstr "" @@ -153,11 +145,33 @@ msgid "Failed to download $1" msgstr "" #: builtin/mainmenu/content/dlg_contentdb.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" +msgid "ContentDB is not available when Luanti was compiled without cURL" msgstr "" #: builtin/mainmenu/content/dlg_contentdb.lua -msgid "All packages" +msgid "The package $1 was not found." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_package.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "Back" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +#: builtin/mainmenu/content/dlg_package.lua builtin/mainmenu/serverlistmgr.lua +#: src/client/game.cpp +msgid "Loading..." +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_package.lua +msgid "No packages could be retrieved" +msgstr "" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "All" msgstr "" #: builtin/mainmenu/content/dlg_contentdb.lua @@ -169,32 +183,7 @@ msgid "Mods" msgstr "" #: builtin/mainmenu/content/dlg_contentdb.lua -msgid "Texture packs" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentdb.lua -msgid "Error getting dependencies for package" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentdb.lua -msgid "You need to install a game before you can install a mod" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentdb.lua -msgid "The package $1 was not found." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentdb.lua -msgid "Back to Main Menu" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentdb.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp -msgid "Loading..." -msgstr "" - -#: builtin/mainmenu/content/dlg_contentdb.lua -msgid "No packages could be retrieved" +msgid "Texture Packs" msgstr "" #: builtin/mainmenu/content/dlg_contentdb.lua @@ -229,20 +218,7 @@ msgid "Queued" msgstr "" #: builtin/mainmenu/content/dlg_contentdb.lua -#: builtin/mainmenu/content/dlg_install.lua -msgid "Install" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "" - -#: builtin/mainmenu/content/dlg_contentdb.lua -msgid "View more information in a web browser" +msgid "Featured" msgstr "" #: builtin/mainmenu/content/dlg_install.lua @@ -290,6 +266,10 @@ msgstr "" msgid "Install missing dependencies" msgstr "" +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +msgstr "" + #: builtin/mainmenu/content/dlg_install.lua #: builtin/mainmenu/content/dlg_overwrite.lua #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua @@ -302,6 +282,14 @@ msgstr "" msgid "Cancel" msgstr "" +#: builtin/mainmenu/content/dlg_install.lua +msgid "Error getting dependencies for package $1" +msgstr "" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "You need to install a game before you can install a mod" +msgstr "" + #: builtin/mainmenu/content/dlg_overwrite.lua msgid "\"$1\" already exists. Would you like to overwrite it?" msgstr "" @@ -310,6 +298,58 @@ msgstr "" msgid "Overwrite" msgstr "" +#: builtin/mainmenu/content/dlg_package.lua +msgid "by $1 — $2 downloads — +$3 / $4 / -$5" +msgstr "" + +#: builtin/mainmenu/content/dlg_package.lua +msgid "ContentDB page" +msgstr "" + +#: builtin/mainmenu/content/dlg_package.lua +msgid "Install [$1]" +msgstr "" + +#: builtin/mainmenu/content/dlg_package.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "" + +#: builtin/mainmenu/content/dlg_package.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "" + +#: builtin/mainmenu/content/dlg_package.lua +msgid "Description" +msgstr "" + +#: builtin/mainmenu/content/dlg_package.lua +msgid "Information" +msgstr "" + +#: builtin/mainmenu/content/dlg_package.lua +msgid "Donate" +msgstr "" + +#: builtin/mainmenu/content/dlg_package.lua +msgid "Website" +msgstr "" + +#: builtin/mainmenu/content/dlg_package.lua +msgid "Source" +msgstr "" + +#: builtin/mainmenu/content/dlg_package.lua +msgid "Issue Tracker" +msgstr "" + +#: builtin/mainmenu/content/dlg_package.lua +msgid "Translate" +msgstr "" + +#: builtin/mainmenu/content/dlg_package.lua +msgid "Forum Topic" +msgstr "" + #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" msgstr "" @@ -664,9 +704,8 @@ msgstr "" #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "" -"For a long time, the Minetest engine shipped with a default game called " -"\"Minetest Game\". Since Minetest 5.8.0, Minetest ships without a default " -"game." +"For a long time, Luanti shipped with a default game called \"Minetest " +"Game\". Since version 5.8.0, Luanti ships without a default game." msgstr "" #: builtin/mainmenu/dlg_reinstall_mtg.lua @@ -832,7 +871,7 @@ msgid "Accessibility" msgstr "" #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp -#: src/settings_translation_file.cpp +#: src/gui/touchcontrols.cpp src/settings_translation_file.cpp msgid "Chat" msgstr "" @@ -840,12 +879,33 @@ msgstr "" msgid "Movement" msgstr "" +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "(The game will need to enable automatic exposure as well)" +msgstr "" + +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "(The game will need to enable bloom as well)" +msgstr "" + +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "(The game will need to enable volumetric lighting as well)" +msgstr "" + #: builtin/mainmenu/settings/dlg_settings.lua msgid "(Use system language)" msgstr "" #: builtin/mainmenu/settings/dlg_settings.lua -msgid "Back" +msgid "Auto" +msgstr "" + +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "Enabled" +msgstr "" + +#: builtin/mainmenu/settings/dlg_settings.lua +#: builtin/mainmenu/settings/shadows_component.lua +msgid "Disabled" msgstr "" #: builtin/mainmenu/settings/dlg_settings.lua @@ -884,8 +944,16 @@ msgstr "" msgid "Client Mods" msgstr "" -#: builtin/mainmenu/settings/shadows_component.lua -msgid "Disabled" +#: builtin/mainmenu/settings/shader_warning_component.lua +msgid "Shaders are disabled." +msgstr "" + +#: builtin/mainmenu/settings/shader_warning_component.lua +msgid "This is not a recommended configuration." +msgstr "" + +#: builtin/mainmenu/settings/shader_warning_component.lua +msgid "Enable" msgstr "" #: builtin/mainmenu/settings/shadows_component.lua @@ -1017,12 +1085,12 @@ msgstr "" #: builtin/mainmenu/tab_local.lua msgid "" -"Minetest is a game-creation platform that allows you to play many different " +"Luanti is a game-creation platform that allows you to play many different " "games." msgstr "" #: builtin/mainmenu/tab_local.lua -msgid "Minetest doesn't come with a game by default." +msgid "Luanti doesn't come with a game by default." msgstr "" #: builtin/mainmenu/tab_local.lua @@ -1467,6 +1535,14 @@ msgstr "" msgid "Zoom currently disabled by game or mod" msgstr "" +#: src/client/game.cpp +msgid "You died" +msgstr "" + +#: src/client/game.cpp +msgid "Respawn" +msgstr "" + #: src/client/game.cpp msgid "" "Controls:\n" @@ -1965,23 +2041,23 @@ msgstr "" msgid "Right" msgstr "" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Aux1" msgstr "" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Jump" msgstr "" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Sneak" msgstr "" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Drop" msgstr "" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Inventory" msgstr "" @@ -1993,19 +2069,19 @@ msgstr "" msgid "Next item" msgstr "" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Zoom" msgstr "" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Change camera" msgstr "" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Toggle minimap" msgstr "" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Toggle fly" msgstr "" @@ -2013,11 +2089,11 @@ msgstr "" msgid "Toggle pitchmove" msgstr "" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Toggle fast" msgstr "" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Toggle noclip" msgstr "" @@ -2041,7 +2117,7 @@ msgstr "" msgid "Screenshot" msgstr "" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Range select" msgstr "" @@ -2073,7 +2149,7 @@ msgstr "" msgid "Toggle HUD" msgstr "" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Toggle chat log" msgstr "" @@ -2114,7 +2190,7 @@ msgstr "" msgid "Sound Volume: %d%%" msgstr "" -#: src/gui/guiVolumeChange.cpp +#: src/gui/guiVolumeChange.cpp src/gui/touchcontrols.cpp msgid "Exit" msgstr "" @@ -2122,6 +2198,73 @@ msgstr "" msgid "Muted" msgstr "" +#: src/gui/touchcontrols.cpp +msgid "Overflow menu" +msgstr "" + +#: src/gui/touchcontrols.cpp +msgid "Toggle debug" +msgstr "" + +#: src/gui/touchcontrols.cpp +msgid "Joystick" +msgstr "" + +#: src/network/clientpackethandler.cpp +msgid "Invalid password" +msgstr "" + +#: src/network/clientpackethandler.cpp +msgid "" +"Your client sent something the server didn't expect. Try reconnecting or " +"updating your client." +msgstr "" + +#: src/network/clientpackethandler.cpp +msgid "The server is running in singleplayer mode. You cannot connect." +msgstr "" + +#: src/network/clientpackethandler.cpp +msgid "" +"Your client's version is not supported.\n" +"Please contact the server administrator." +msgstr "" + +#: src/network/clientpackethandler.cpp +msgid "Player name contains disallowed characters" +msgstr "" + +#: src/network/clientpackethandler.cpp +msgid "Player name not allowed" +msgstr "" + +#: src/network/clientpackethandler.cpp +msgid "Too many users" +msgstr "" + +#: src/network/clientpackethandler.cpp +msgid "Empty passwords are disallowed. Set a password and try again." +msgstr "" + +#: src/network/clientpackethandler.cpp +msgid "" +"Another client is connected with this name. If your client closed " +"unexpectedly, try again in a minute." +msgstr "" + +#: src/network/clientpackethandler.cpp +msgid "Internal server error" +msgstr "" + +#: src/network/clientpackethandler.cpp +msgid "Server shutting down" +msgstr "" + +#: src/network/clientpackethandler.cpp +msgid "" +"The server has experienced an internal error. You will now be disconnected." +msgstr "" + #: src/network/clientpackethandler.cpp msgid "" "Name is not registered. To create an account on this server, click 'Register'" @@ -2139,6 +2282,10 @@ msgstr "" msgid "LANG_CODE" msgstr "" +#: src/network/clientpackethandler.cpp +msgid "Unknown disconnect reason." +msgstr "" + #: src/server.cpp #, c-format msgid "%s while shutting down: " @@ -2281,12 +2428,15 @@ msgid "Touchscreen" msgstr "" #: src/settings_translation_file.cpp -msgid "Enable touchscreen" +msgid "Touchscreen controls" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Enables touchscreen mode, allowing you to play the game with a touchscreen." +"Enables the touchscreen controls, allowing you to play the game with a " +"touchscreen.\n" +"\"auto\" means that the touchscreen controls will be enabled and disabled\n" +"automatically depending on the last used input method." msgstr "" #: src/settings_translation_file.cpp @@ -2353,14 +2503,14 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"The gesture for for punching players/entities.\n" +"The gesture for punching players/entities.\n" "This can be overridden by games and mods.\n" "\n" "* short_tap\n" "Easy to use and well-known from other games that shall not be named.\n" "\n" "* long_tap\n" -"Known from the classic Minetest mobile controls.\n" +"Known from the classic Luanti mobile controls.\n" "Combat is more or less impossible." msgstr "" @@ -2485,66 +2635,6 @@ msgid "" "Higher values result in a less detailed image." msgstr "" -#: src/settings_translation_file.cpp -msgid "Graphics Effects" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Translucent liquids" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Allows liquids to be translucent." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Leaves style" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Leaves style:\n" -"- Fancy: all faces visible\n" -"- Simple: only outer faces, if defined special_tiles are used\n" -"- Opaque: disable transparency" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Connect glass" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Connects glass if supported by node." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Smooth lighting" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Enable smooth lighting with simple ambient occlusion.\n" -"Disable for speed or for different looks." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Tradeoffs for performance" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Enables tradeoffs that reduce CPU load or increase rendering performance\n" -"at the expense of minor visual glitches that do not impact game playability." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Digging particles" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Adds particles when digging a node." -msgstr "" - #: src/settings_translation_file.cpp msgid "3D" msgstr "" @@ -2777,6 +2867,14 @@ msgstr "" msgid "Use 3D cloud look instead of flat." msgstr "" +#: src/settings_translation_file.cpp +msgid "Soft clouds" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use smooth cloud shading." +msgstr "" + #: src/settings_translation_file.cpp msgid "Filtering and Antialiasing" msgstr "" @@ -2886,14 +2984,61 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Shaders" +msgid "Effects" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Translucent liquids" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Leaves style" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Shaders allow advanced visual effects and may increase performance on some " -"video\n" -"cards." +"Leaves style:\n" +"- Fancy: all faces visible\n" +"- Simple: only outer faces\n" +"- Opaque: disable transparency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Connect glass" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Connects glass if supported by node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooth lighting" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable smooth lighting with simple ambient occlusion." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Tradeoffs for performance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables tradeoffs that reduce CPU load or increase rendering performance\n" +"at the expense of minor visual glitches that do not impact game playability." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Digging particles" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Adds particles when digging a node." msgstr "" #: src/settings_translation_file.cpp @@ -3127,10 +3272,6 @@ msgid "" "floating-point precision and it may have a higher performance impact." msgstr "" -#: src/settings_translation_file.cpp -msgid "Bloom" -msgstr "" - #: src/settings_translation_file.cpp msgid "Enable Bloom" msgstr "" @@ -3141,50 +3282,6 @@ msgid "" "Bright colors will bleed over the neighboring objects." msgstr "" -#: src/settings_translation_file.cpp -msgid "Enable Bloom Debug" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Set to true to render debugging breakdown of the bloom effect.\n" -"In debug mode, the screen is split into 4 quadrants:\n" -"top-left - processed base image, top-right - final image\n" -"bottom-left - raw base image, bottom-right - bloom texture." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Bloom Intensity" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Defines how much bloom is applied to the rendered image\n" -"Smaller values make bloom more subtle\n" -"Range: from 0.01 to 1.0, default: 0.05" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Bloom Strength Factor" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Defines the magnitude of bloom overexposure.\n" -"Range: from 0.1 to 10.0, default: 1.0" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Bloom Radius" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Logical value that controls how far the bloom effect spreads\n" -"from the bright objects.\n" -"Range: from 0.1 to 8, default: 1" -msgstr "" - #: src/settings_translation_file.cpp msgid "Volumetric lighting" msgstr "" @@ -3193,6 +3290,34 @@ msgstr "" msgid "Set to true to enable volumetric lighting effect (a.k.a. \"Godrays\")." msgstr "" +#: src/settings_translation_file.cpp +msgid "Other Effects" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Translucent foliage" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Simulate translucency when looking at foliage in the sunlight." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Node specular" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Apply specular shading to nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid reflections" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "When enabled, liquid reflections are simulated." +msgstr "" + #: src/settings_translation_file.cpp msgid "Audio" msgstr "" @@ -3245,6 +3370,16 @@ msgstr "" msgid "GUI" msgstr "" +#: src/settings_translation_file.cpp +msgid "Optimize GUI for touchscreens" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When enabled, the GUI is optimized to be more usable on touchscreens.\n" +"Whether this is enabled by default depends on your hardware form-factor." +msgstr "" + #: src/settings_translation_file.cpp msgid "GUI scaling" msgstr "" @@ -3258,6 +3393,14 @@ msgid "" "edge pixels when images are scaled by non-integer sizes." msgstr "" +#: src/settings_translation_file.cpp +msgid "Smooth scrolling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables smooth scrolling." +msgstr "" + #: src/settings_translation_file.cpp msgid "Inventory items animations" msgstr "" @@ -3351,6 +3494,33 @@ msgid "" "Mods may still set a background." msgstr "" +#: src/settings_translation_file.cpp +msgid "Show debug info" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to show the client debug info (has the same effect as hitting F5)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Block bounds HUD radius" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Radius to use when the block bounds HUD feature is set to near blocks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum hotbar width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum proportion of current window to be used for hotbar.\n" +"Useful if there's something to be displayed right or left of hotbar." +msgstr "" + #: src/settings_translation_file.cpp msgid "Recent Chat Messages" msgstr "" @@ -3383,16 +3553,6 @@ msgstr "" msgid "In-game chat console background alpha (opaqueness, between 0 and 255)." msgstr "" -#: src/settings_translation_file.cpp -msgid "Maximum hotbar width" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Maximum proportion of current window to be used for hotbar.\n" -"Useful if there's something to be displayed right or left of hotbar." -msgstr "" - #: src/settings_translation_file.cpp msgid "Chat weblinks" msgstr "" @@ -3433,6 +3593,17 @@ msgstr "" msgid "The URL for the content repository" msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable updates available indicator on content tab" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled and you have ContentDB packages installed, Luanti may contact " +"ContentDB to\n" +"check for package updates when opening the mainmenu." +msgstr "" + #: src/settings_translation_file.cpp msgid "ContentDB Flag Blacklist" msgstr "" @@ -3444,7 +3615,7 @@ msgid "" "software',\n" "as defined by the Free Software Foundation.\n" "You can also specify content ratings.\n" -"These flags are independent from Minetest versions,\n" +"These flags are independent from Luanti versions,\n" "so see a full list at https://content.minetest.net/help/content_flags/" msgstr "" @@ -3499,8 +3670,8 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"URL to JSON file which provides information about the newest Minetest " -"release\n" +"URL to JSON file which provides information about the newest Luanti " +"release.\n" "If this is empty the engine will never check for updates." msgstr "" @@ -3566,6 +3737,16 @@ msgstr "" msgid "Automatically report to the serverlist." msgstr "" +#: src/settings_translation_file.cpp +msgid "Send player names to the server list" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Send names of online players to the serverlist. If disabled only the player " +"count is revealed." +msgstr "" + #: src/settings_translation_file.cpp msgid "Announce to this serverlist." msgstr "" @@ -3642,7 +3823,7 @@ msgid "" "expecting.\n" "This allows for more fine-grained control than " "strict_protocol_version_checking.\n" -"Minetest still enforces its own internal minimum, and enabling\n" +"Luanti still enforces its own internal minimum, and enabling\n" "strict_protocol_version_checking will effectively override this." msgstr "" @@ -3710,11 +3891,24 @@ msgid "Privileges that players with basic_privs can grant" msgstr "" #: src/settings_translation_file.cpp -msgid "Disable anticheat" +msgid "Anticheat flags" msgstr "" #: src/settings_translation_file.cpp -msgid "If enabled, disable cheat prevention in multiplayer." +msgid "" +"Server anticheat configuration.\n" +"Flags are positive. Uncheck the flag to disable corresponding anticheat " +"module." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Anticheat movement tolerance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Tolerance of movement cheat detector.\n" +"Increase the value if players experience stuttery movement." msgstr "" #: src/settings_translation_file.cpp @@ -5168,7 +5362,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Instrument global callback functions on registration.\n" -"(anything you pass to a minetest.register_*() function)" +"(anything you pass to a core.register_*() function)" msgstr "" #: src/settings_translation_file.cpp @@ -5228,6 +5422,16 @@ msgid "" "Only enable this if you know what you are doing." msgstr "" +#: src/settings_translation_file.cpp +msgid "Shaders" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Shaders are a fundamental part of rendering and enable advanced visual " +"effects." +msgstr "" + #: src/settings_translation_file.cpp msgid "Shader path" msgstr "" @@ -5246,8 +5450,7 @@ msgstr "" msgid "" "The rendering back-end.\n" "Note: A restart is required after changing this!\n" -"OpenGL is the default for desktop, and OGLES2 for Android.\n" -"Shaders are supported by everything but OGLES1." +"OpenGL is the default for desktop, and OGLES2 for Android." msgstr "" #: src/settings_translation_file.cpp @@ -5256,8 +5459,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Distance in nodes at which transparency depth sorting is enabled\n" -"Use this to limit the performance impact of transparency depth sorting" +"Distance in nodes at which transparency depth sorting is enabled.\n" +"Use this to limit the performance impact of transparency depth sorting.\n" +"Set to 0 to disable it entirely." msgstr "" #: src/settings_translation_file.cpp @@ -5284,7 +5488,9 @@ msgid "Mesh cache" msgstr "" #: src/settings_translation_file.cpp -msgid "Enables caching of facedir rotated meshes." +msgid "" +"Enables caching of facedir rotated meshes.\n" +"This is only effective with shaders disabled." msgstr "" #: src/settings_translation_file.cpp @@ -5304,7 +5510,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Number of threads to use for mesh generation.\n" -"Value of 0 (default) will let Minetest autodetect the number of available " +"Value of 0 (default) will let Luanti autodetect the number of available " "threads." msgstr "" @@ -5384,6 +5590,18 @@ msgstr "" msgid "Enables debug and error-checking in the OpenGL driver." msgstr "" +#: src/settings_translation_file.cpp +msgid "Enable Bloom Debug" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true to render debugging breakdown of the bloom effect.\n" +"In debug mode, the screen is split into 4 quadrants:\n" +"top-left - processed base image, top-right - final image\n" +"bottom-left - raw base image, bottom-right - bloom texture." +msgstr "" + #: src/settings_translation_file.cpp msgid "Sound" msgstr "" @@ -5582,7 +5800,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Prometheus listener address.\n" -"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Luanti is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" "Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" @@ -5615,15 +5833,6 @@ msgid "" "Set to -1 for unlimited amount." msgstr "" -#: src/settings_translation_file.cpp -msgid "Show debug info" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Whether to show the client debug info (has the same effect as hitting F5)." -msgstr "" - #: src/settings_translation_file.cpp msgid "Maximum simultaneous block sends per client" msgstr "" @@ -5653,9 +5862,10 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Maximum number of packets sent per send step, if you have a slow connection\n" -"try reducing it, but don't reduce it to a number below double of targeted\n" -"client number." +"Maximum number of packets sent per send step in the low-level networking " +"code.\n" +"You generally don't need to change this, however busy servers may benefit " +"from a higher number." msgstr "" #: src/settings_translation_file.cpp @@ -5730,7 +5940,9 @@ msgid "" "Length of a server tick (the interval at which everything is generally " "updated),\n" "stated in seconds.\n" -"Does not apply to sessions hosted from the client menu." +"Does not apply to sessions hosted from the client menu.\n" +"This is a lower bound, i.e. server steps may not be shorter than this, but\n" +"they are often longer." msgstr "" #: src/settings_translation_file.cpp @@ -6064,7 +6276,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Windows systems only: Start Minetest with the command line window in the " +"Windows systems only: Start Luanti with the command line window in the " "background.\n" "Contains the same information as the file debug.txt (default name)." msgstr "" diff --git a/po/lv/luanti.po b/po/lv/luanti.po index f5896af89..9a0f6267d 100644 --- a/po/lv/luanti.po +++ b/po/lv/luanti.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-07-11 15:14+0200\n" +"POT-Creation-Date: 2024-10-28 19:57+0100\n" "PO-Revision-Date: 2024-01-22 21:01+0000\n" "Last-Translator: Uko Koknevics \n" "Language-Team: Latvian \n" "Language-Team: Chinese (Literary) \n" "Language-Team: Maori \n" "Language-Team: Mongolian \n" "Language-Team: Marathi \n" @@ -51,14 +51,6 @@ msgstr "Baris gilir sembang keluar kini kosong." msgid "This command is disabled by server." msgstr "Perintah ini dilumpuhkan oleh pelayan." -#: builtin/client/death_formspec.lua src/client/game.cpp -msgid "Respawn" -msgstr "Jelma semula" - -#: builtin/client/death_formspec.lua src/client/game.cpp -msgid "You died" -msgstr "Anda telah meninggal" - #: builtin/common/chatcommands.lua msgid "Available commands:" msgstr "Perintah tersedia:" @@ -167,15 +159,18 @@ msgid "$1 downloading..." msgstr "$1 dimuat turun..." #: builtin/mainmenu/content/dlg_contentdb.lua -msgid "All packages" -msgstr "Semua pakej" +msgid "All" +msgstr "" #: builtin/mainmenu/content/dlg_contentdb.lua -msgid "Back to Main Menu" -msgstr "Kembali ke Menu Utama" +#: builtin/mainmenu/content/dlg_package.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "Back" +msgstr "Kembali" #: builtin/mainmenu/content/dlg_contentdb.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" +#, fuzzy +msgid "ContentDB is not available when Luanti was compiled without cURL" msgstr "ContentDB tidak tersedia apabila Minetest dikompil tanpa cURL" #: builtin/mainmenu/content/dlg_contentdb.lua @@ -183,8 +178,8 @@ msgid "Downloading..." msgstr "Memuat turun..." #: builtin/mainmenu/content/dlg_contentdb.lua -msgid "Error getting dependencies for package" -msgstr "Ralat ketika mendapatkan kebergantungan untuk pakej" +msgid "Featured" +msgstr "" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "Games" @@ -192,11 +187,8 @@ msgstr "Permainan" #: builtin/mainmenu/content/dlg_contentdb.lua #: builtin/mainmenu/content/dlg_install.lua -msgid "Install" -msgstr "Pasang" - -#: builtin/mainmenu/content/dlg_contentdb.lua -#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp +#: builtin/mainmenu/content/dlg_package.lua builtin/mainmenu/serverlistmgr.lua +#: src/client/game.cpp msgid "Loading..." msgstr "Memuatkan..." @@ -205,6 +197,7 @@ msgid "Mods" msgstr "Mods" #: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_package.lua msgid "No packages could be retrieved" msgstr "Tiada pakej yang boleh diambil" @@ -222,33 +215,18 @@ msgid "Queued" msgstr "Menunggu giliran" #: builtin/mainmenu/content/dlg_contentdb.lua -msgid "Texture packs" +#, fuzzy +msgid "Texture Packs" msgstr "Pek tekstur" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "The package $1 was not found." msgstr "Pakej $1 tidak dijumpai." -#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua -msgid "Uninstall" -msgstr "Nyahpasang" - -#: builtin/mainmenu/content/dlg_contentdb.lua builtin/mainmenu/tab_content.lua -msgid "Update" -msgstr "Kemas kini" - #: builtin/mainmenu/content/dlg_contentdb.lua msgid "Update All [$1]" msgstr "Kemas Kini Semua [$1]" -#: builtin/mainmenu/content/dlg_contentdb.lua -msgid "View more information in a web browser" -msgstr "Lihat maklumat lanjut dalam pelayar sesawang" - -#: builtin/mainmenu/content/dlg_contentdb.lua -msgid "You need to install a game before you can install a mod" -msgstr "Anda perlu pasang permainan sebelum anda boleh pasang mods" - #: builtin/mainmenu/content/dlg_install.lua msgid "$1 and $2 dependencies will be installed." msgstr "Kebergantungan $1 dan $2 akan dipasangkan." @@ -290,6 +268,15 @@ msgstr "Batal" msgid "Dependencies:" msgstr "Kebergantungan:" +#: builtin/mainmenu/content/dlg_install.lua +#, fuzzy +msgid "Error getting dependencies for package $1" +msgstr "Ralat ketika mendapatkan kebergantungan untuk pakej" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +msgstr "Pasang" + #: builtin/mainmenu/content/dlg_install.lua msgid "Install $1" msgstr "Pasang $1" @@ -306,6 +293,10 @@ msgstr "Tidak dijumpai" msgid "Please check that the base game is correct." msgstr "Sila periksa dan pastikan permainan asas itu betul." +#: builtin/mainmenu/content/dlg_install.lua +msgid "You need to install a game before you can install a mod" +msgstr "Anda perlu pasang permainan sebelum anda boleh pasang mods" + #: builtin/mainmenu/content/dlg_overwrite.lua msgid "\"$1\" already exists. Would you like to overwrite it?" msgstr "\"$1\" sudah wujud. Adakah anda ingin tulis gantinya?" @@ -314,6 +305,63 @@ msgstr "\"$1\" sudah wujud. Adakah anda ingin tulis gantinya?" msgid "Overwrite" msgstr "Tulis ganti" +#: builtin/mainmenu/content/dlg_package.lua +#, fuzzy +msgid "ContentDB page" +msgstr "URL ContentDB" + +#: builtin/mainmenu/content/dlg_package.lua +#, fuzzy +msgid "Description" +msgstr "Keterangan Pelayan" + +#: builtin/mainmenu/content/dlg_package.lua +msgid "Donate" +msgstr "" + +#: builtin/mainmenu/content/dlg_package.lua +msgid "Forum Topic" +msgstr "" + +#: builtin/mainmenu/content/dlg_package.lua +#, fuzzy +msgid "Information" +msgstr "Maklumat:" + +#: builtin/mainmenu/content/dlg_package.lua +#, fuzzy +msgid "Install [$1]" +msgstr "Pasang $1" + +#: builtin/mainmenu/content/dlg_package.lua +msgid "Issue Tracker" +msgstr "" + +#: builtin/mainmenu/content/dlg_package.lua +msgid "Source" +msgstr "" + +#: builtin/mainmenu/content/dlg_package.lua +msgid "Translate" +msgstr "" + +#: builtin/mainmenu/content/dlg_package.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "Nyahpasang" + +#: builtin/mainmenu/content/dlg_package.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "Kemas kini" + +#: builtin/mainmenu/content/dlg_package.lua +#, fuzzy +msgid "Website" +msgstr "Lawati laman sesawang" + +#: builtin/mainmenu/content/dlg_package.lua +msgid "by $1 — $2 downloads — +$3 / $4 / -$5" +msgstr "" + #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" msgstr "$1 (Dibolehkan)" @@ -673,10 +721,10 @@ msgid "Dismiss" msgstr "Ketepikan" #: builtin/mainmenu/dlg_reinstall_mtg.lua +#, fuzzy msgid "" -"For a long time, the Minetest engine shipped with a default game called " -"\"Minetest Game\". Since Minetest 5.8.0, Minetest ships without a default " -"game." +"For a long time, Luanti shipped with a default game called \"Minetest " +"Game\". Since version 5.8.0, Luanti ships without a default game." msgstr "" "Untuk sekian lamanya, enjin Minetest disertakan dengan permainan lalai " "dipanggil \"Minetest Game\". Mulai Minetest 5.8.0, Minetest tidak lagi " @@ -841,6 +889,21 @@ msgstr "lalai" msgid "eased" msgstr "tumpul" +#: builtin/mainmenu/settings/dlg_settings.lua +#, fuzzy +msgid "(The game will need to enable automatic exposure as well)" +msgstr "(Permainan akan perlu membolehkan bayang juga)" + +#: builtin/mainmenu/settings/dlg_settings.lua +#, fuzzy +msgid "(The game will need to enable bloom as well)" +msgstr "(Permainan akan perlu membolehkan bayang juga)" + +#: builtin/mainmenu/settings/dlg_settings.lua +#, fuzzy +msgid "(The game will need to enable volumetric lighting as well)" +msgstr "(Permainan akan perlu membolehkan bayang juga)" + #: builtin/mainmenu/settings/dlg_settings.lua msgid "(Use system language)" msgstr "(Guna bahasa sistem)" @@ -850,11 +913,11 @@ msgid "Accessibility" msgstr "Ketercapaian" #: builtin/mainmenu/settings/dlg_settings.lua -msgid "Back" -msgstr "Kembali" +msgid "Auto" +msgstr "" #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp -#: src/settings_translation_file.cpp +#: src/gui/touchcontrols.cpp src/settings_translation_file.cpp msgid "Chat" msgstr "Sembang" @@ -867,6 +930,15 @@ msgstr "Padam" msgid "Controls" msgstr "Kawalan" +#: builtin/mainmenu/settings/dlg_settings.lua +#: builtin/mainmenu/settings/shadows_component.lua +msgid "Disabled" +msgstr "Dilumpuhkan" + +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "Enabled" +msgstr "Dibolehkan" + #: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp msgid "General" msgstr "Umum" @@ -907,6 +979,20 @@ msgstr "Kandungan: Permainan" msgid "Content: Mods" msgstr "Kandungan: Mods" +#: builtin/mainmenu/settings/shader_warning_component.lua +#, fuzzy +msgid "Enable" +msgstr "Dibolehkan" + +#: builtin/mainmenu/settings/shader_warning_component.lua +#, fuzzy +msgid "Shaders are disabled." +msgstr "Kemas kini kamera dilumpuhkan" + +#: builtin/mainmenu/settings/shader_warning_component.lua +msgid "This is not a recommended configuration." +msgstr "" + #: builtin/mainmenu/settings/shadows_component.lua msgid "(The game will need to enable shadows as well)" msgstr "(Permainan akan perlu membolehkan bayang juga)" @@ -915,10 +1001,6 @@ msgstr "(Permainan akan perlu membolehkan bayang juga)" msgid "Custom" msgstr "Tersuai" -#: builtin/mainmenu/settings/shadows_component.lua -msgid "Disabled" -msgstr "Dilumpuhkan" - #: builtin/mainmenu/settings/shadows_component.lua #: src/settings_translation_file.cpp msgid "Dynamic shadows" @@ -1069,13 +1151,15 @@ msgid "Install games from ContentDB" msgstr "Pasangkan permainan daripada ContentDB" #: builtin/mainmenu/tab_local.lua -msgid "Minetest doesn't come with a game by default." +#, fuzzy +msgid "Luanti doesn't come with a game by default." msgstr "" "Minetest sudah tidak didatangkan dengan sebuah permainan secara lalainya." #: builtin/mainmenu/tab_local.lua +#, fuzzy msgid "" -"Minetest is a game-creation platform that allows you to play many different " +"Luanti is a game-creation platform that allows you to play many different " "games." msgstr "" "Minetest ialah platform penciptaan permainan yang membolehkan anda memainkan " @@ -1511,6 +1595,10 @@ msgstr "Pelayan jarak jauh" msgid "Resolving address..." msgstr "Sedang menyelesaikan alamat..." +#: src/client/game.cpp +msgid "Respawn" +msgstr "Jelma semula" + #: src/client/game.cpp msgid "Shutting down..." msgstr "Sedang menutup..." @@ -1612,6 +1700,10 @@ msgstr "Kekuatan bunyi ditukar ke %d%%" msgid "Wireframe shown" msgstr "Rangka dawai ditunjukkan" +#: src/client/game.cpp +msgid "You died" +msgstr "Anda telah meninggal" + #: src/client/game.cpp msgid "Zoom currently disabled by game or mod" msgstr "Zum dilumpuhkan oleh permainan atau mods ketika ini" @@ -1994,7 +2086,7 @@ msgstr "Autopergerakan" msgid "Automatic jumping" msgstr "Lompat automatik" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Aux1" msgstr "Aux1" @@ -2006,7 +2098,7 @@ msgstr "Ke Belakang" msgid "Block bounds" msgstr "Batas blok" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Change camera" msgstr "Tukar kamera" @@ -2030,7 +2122,7 @@ msgstr "Perlahankan bunyi" msgid "Double tap \"jump\" to toggle fly" msgstr "Ketik berganda \"lompat\" untuk menogol terbang" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Drop" msgstr "Jatuhkan" @@ -2046,11 +2138,11 @@ msgstr "Naikkan jarak" msgid "Inc. volume" msgstr "Kuatkan bunyi" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Inventory" msgstr "Inventori" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Jump" msgstr "Lompat" @@ -2082,7 +2174,7 @@ msgstr "Item seterusnya" msgid "Prev. item" msgstr "Item sebelumnya" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Range select" msgstr "Jarak Pemilihan" @@ -2094,7 +2186,7 @@ msgstr "Ke Kanan" msgid "Screenshot" msgstr "Tangkap layar" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Sneak" msgstr "Selinap" @@ -2102,15 +2194,15 @@ msgstr "Selinap" msgid "Toggle HUD" msgstr "Togol papar pandu (HUD)" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Toggle chat log" msgstr "Togol log sembang" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Toggle fast" msgstr "Togol pergerakan pantas" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Toggle fly" msgstr "Togol Terbang" @@ -2118,11 +2210,11 @@ msgstr "Togol Terbang" msgid "Toggle fog" msgstr "Togol kabut" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Toggle minimap" msgstr "Togol peta mini" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Toggle noclip" msgstr "Togol tembus blok" @@ -2130,7 +2222,7 @@ msgstr "Togol tembus blok" msgid "Toggle pitchmove" msgstr "Togol pergerakan mencuram" -#: src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp msgid "Zoom" msgstr "Zum" @@ -2166,7 +2258,7 @@ msgstr "Kata Laluan Lama" msgid "Passwords do not match!" msgstr "Kata laluan tidak padan!" -#: src/gui/guiVolumeChange.cpp +#: src/gui/guiVolumeChange.cpp src/gui/touchcontrols.cpp msgid "Exit" msgstr "Keluar" @@ -2179,6 +2271,39 @@ msgstr "Dibisukan" msgid "Sound Volume: %d%%" msgstr "Kekuatan Bunyi: %d%%" +#: src/gui/touchcontrols.cpp +#, fuzzy +msgid "Joystick" +msgstr "ID Kayu Bedik" + +#: src/gui/touchcontrols.cpp +msgid "Overflow menu" +msgstr "" + +#: src/gui/touchcontrols.cpp +#, fuzzy +msgid "Toggle debug" +msgstr "Togol kabut" + +#: src/network/clientpackethandler.cpp +msgid "" +"Another client is connected with this name. If your client closed " +"unexpectedly, try again in a minute." +msgstr "" + +#: src/network/clientpackethandler.cpp +msgid "Empty passwords are disallowed. Set a password and try again." +msgstr "" + +#: src/network/clientpackethandler.cpp +msgid "Internal server error" +msgstr "" + +#: src/network/clientpackethandler.cpp +#, fuzzy +msgid "Invalid password" +msgstr "Kata Laluan Lama" + #. ~ DO NOT TRANSLATE THIS LITERALLY! #. This is a special string which needs to contain the translation's #. language code (e.g. "de" for German). @@ -2197,6 +2322,49 @@ msgstr "" msgid "Name is taken. Please choose another name" msgstr "Nama sudah diambil. Sila pilih nama yang lain" +#: src/network/clientpackethandler.cpp +msgid "Player name contains disallowed characters" +msgstr "" + +#: src/network/clientpackethandler.cpp +#, fuzzy +msgid "Player name not allowed" +msgstr "Nama pemain terlalu panjang." + +#: src/network/clientpackethandler.cpp +#, fuzzy +msgid "Server shutting down" +msgstr "Sedang menutup..." + +#: src/network/clientpackethandler.cpp +msgid "" +"The server has experienced an internal error. You will now be disconnected." +msgstr "" + +#: src/network/clientpackethandler.cpp +msgid "The server is running in singleplayer mode. You cannot connect." +msgstr "" + +#: src/network/clientpackethandler.cpp +msgid "Too many users" +msgstr "" + +#: src/network/clientpackethandler.cpp +msgid "Unknown disconnect reason." +msgstr "" + +#: src/network/clientpackethandler.cpp +msgid "" +"Your client sent something the server didn't expect. Try reconnecting or " +"updating your client." +msgstr "" + +#: src/network/clientpackethandler.cpp +msgid "" +"Your client's version is not supported.\n" +"Please contact the server administrator." +msgstr "" + #: src/server.cpp #, c-format msgid "%s while shutting down: " @@ -2485,6 +2653,14 @@ msgstr "Skala antialias" msgid "Antialiasing method" msgstr "Kaedah antialias" +#: src/settings_translation_file.cpp +msgid "Anticheat flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Anticheat movement tolerance" +msgstr "" + #: src/settings_translation_file.cpp msgid "Append item name" msgstr "Tambah nama item" @@ -2516,6 +2692,10 @@ msgstr "" "ketepatan titik terapung dan ia boleh menyebabkan hentaman prestasi yang " "lebih tinggi." +#: src/settings_translation_file.cpp +msgid "Apply specular shading to nodes." +msgstr "" + #: src/settings_translation_file.cpp msgid "Arm inertia" msgstr "Inersia lengan" @@ -2571,8 +2751,8 @@ msgstr "" "Nilai lebih kecil berkemungkinan boleh meningkatkan prestasi, dengan " "mengorbankan\n" "glic kemas gabung yang tampak secara sementara (blok menghilang).\n" -"Ini berguna khususnya untuk jarak pandangan yang sangat besar (melebihi 500)." -"\n" +"Ini berguna khususnya untuk jarak pandangan yang sangat besar (melebihi " +"500).\n" "Dinyatakan dalam unit BlokPeta (16 nod)." #: src/settings_translation_file.cpp @@ -2635,6 +2815,11 @@ msgstr "API Biom" msgid "Biome noise" msgstr "Hingar biom" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Block bounds HUD radius" +msgstr "Batas blok" + #: src/settings_translation_file.cpp msgid "Block cull optimize distance" msgstr "Jarak untuk mengoptimumkan penakaian blok" @@ -2643,22 +2828,6 @@ msgstr "Jarak untuk mengoptimumkan penakaian blok" msgid "Block send optimize distance" msgstr "Jarak optimum penghantaran blok" -#: src/settings_translation_file.cpp -msgid "Bloom" -msgstr "seri / kembang" - -#: src/settings_translation_file.cpp -msgid "Bloom Intensity" -msgstr "Keamatan Seri" - -#: src/settings_translation_file.cpp -msgid "Bloom Radius" -msgstr "Jejari Seri" - -#: src/settings_translation_file.cpp -msgid "Bloom Strength Factor" -msgstr "Faktor Kekuatan Seri" - #: src/settings_translation_file.cpp msgid "Bobbing" msgstr "Apungan" @@ -2866,13 +3035,14 @@ msgstr "" "lanjut." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Comma-separated list of flags to hide in the content repository.\n" "\"nonfree\" can be used to hide packages which do not qualify as 'free " "software',\n" "as defined by the Free Software Foundation.\n" "You can also specify content ratings.\n" -"These flags are independent from Minetest versions,\n" +"These flags are independent from Luanti versions,\n" "so see a full list at https://content.minetest.net/help/content_flags/" msgstr "" "Senarai bendera yang ingin disembunyikan dalam repositori kandungan " @@ -3087,6 +3257,7 @@ msgstr "" "PCF atau cakera Poisson tetapi turut menggunakan lebih banyak sumber." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Define the oldest clients allowed to connect.\n" "Older clients are compatible in the sense that they will not crash when " @@ -3095,7 +3266,7 @@ msgid "" "expecting.\n" "This allows for more fine-grained control than " "strict_protocol_version_checking.\n" -"Minetest still enforces its own internal minimum, and enabling\n" +"Luanti still enforces its own internal minimum, and enabling\n" "strict_protocol_version_checking will effectively override this." msgstr "" "Mentakrifkan klien paling lama yang dibenarkan untuk menyambung.\n" @@ -3130,16 +3301,6 @@ msgid "Defines full size of caverns, smaller values create larger caverns." msgstr "" "Mentakrifkan saiz penuh gua, nilai lebih kecil mencipta gua lebih besar." -#: src/settings_translation_file.cpp -msgid "" -"Defines how much bloom is applied to the rendered image\n" -"Smaller values make bloom more subtle\n" -"Range: from 0.01 to 1.0, default: 0.05" -msgstr "" -"Mentakrifkan berapa banyak seri diterapkan pada imej dikemas gabung\n" -"Nilai lebih kecil membuatkan seri yang lebih lembut\n" -"Julat: dari 0.01 ke 1.0, lalai: 0.05" - #: src/settings_translation_file.cpp msgid "Defines large-scale river channel structure." msgstr "Mentakrifkan struktur saluran sungai berskala besar." @@ -3156,14 +3317,6 @@ msgstr "Mentakrifkan aras tanah asas." msgid "Defines the depth of the river channel." msgstr "Mentakrifkan kedalaman saliran sungai." -#: src/settings_translation_file.cpp -msgid "" -"Defines the magnitude of bloom overexposure.\n" -"Range: from 0.1 to 10.0, default: 1.0" -msgstr "" -"Mentakrifkan magnitud terlebih dedahan seri.\n" -"Julat: dari 0.1 ke 10.0, lalai: 1.0" - #: src/settings_translation_file.cpp msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." msgstr "" @@ -3253,10 +3406,6 @@ msgstr "Pilihan Pembangun" msgid "Digging particles" msgstr "Partikel ketika menggali" -#: src/settings_translation_file.cpp -msgid "Disable anticheat" -msgstr "Melumpuhkan antitipu" - #: src/settings_translation_file.cpp msgid "Disallow empty passwords" msgstr "Menolak kata laluan kosong" @@ -3266,9 +3415,11 @@ msgid "Display Density Scaling Factor" msgstr "Faktor Penyesuaian Ketumpatan Paparan" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Distance in nodes at which transparency depth sorting is enabled\n" -"Use this to limit the performance impact of transparency depth sorting" +"Distance in nodes at which transparency depth sorting is enabled.\n" +"Use this to limit the performance impact of transparency depth sorting.\n" +"Set to 0 to disable it entirely." msgstr "" "Jarak dalam nod ketika mana pengisihan kedalaman lut sinar dibolehkan\n" "Gunakan ini untuk mengehadkan hentaman prestasi akibat pengisihan kedalaman " @@ -3302,6 +3453,11 @@ msgstr "Y minimum kurungan bawah tanah" msgid "Dungeon noise" msgstr "Hingar kurungan bawah tanah" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Effects" +msgstr "Kesan Grafik" + #: src/settings_translation_file.cpp msgid "Enable Automatic Exposure" msgstr "Membolehkan Dedahan Automatik" @@ -3408,9 +3564,8 @@ msgstr "" "Membolehkan input pengguna secara rawak (hanya digunakan untuk percubaan)." #: src/settings_translation_file.cpp -msgid "" -"Enable smooth lighting with simple ambient occlusion.\n" -"Disable for speed or for different looks." +#, fuzzy +msgid "Enable smooth lighting with simple ambient occlusion." msgstr "" "Membolehkan pencahayaan lembut dengan oklusi sekitar yang ringkas.\n" "Lumpuhkannya untuk kelajuan atau untuk kelihatan berlainan." @@ -3434,8 +3589,8 @@ msgstr "" "sangkakan." #: src/settings_translation_file.cpp -msgid "Enable touchscreen" -msgstr "Membolehkan skrin sentuh" +msgid "Enable updates available indicator on content tab" +msgstr "" #: src/settings_translation_file.cpp msgid "" @@ -3485,23 +3640,32 @@ msgid "Enables animation of inventory items." msgstr "Membolehkan animasi item dalam inventori." #: src/settings_translation_file.cpp -msgid "Enables caching of facedir rotated meshes." +#, fuzzy +msgid "" +"Enables caching of facedir rotated meshes.\n" +"This is only effective with shaders disabled." msgstr "Membolehkan pengagregatan jejaring yang diputar di paksi Y (facedir)." #: src/settings_translation_file.cpp msgid "Enables debug and error-checking in the OpenGL driver." msgstr "Membolehkan nyahpepijat dan pemeriksaan ralat dalam pemacu OpenGL." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enables smooth scrolling." +msgstr "Membolehkan Pascapemprosesan" + #: src/settings_translation_file.cpp msgid "Enables the post processing pipeline." msgstr "Membolehkan talian paip pascapemprosesan." #: src/settings_translation_file.cpp msgid "" -"Enables touchscreen mode, allowing you to play the game with a touchscreen." +"Enables the touchscreen controls, allowing you to play the game with a " +"touchscreen.\n" +"\"auto\" means that the touchscreen controls will be enabled and disabled\n" +"automatically depending on the last used input method." msgstr "" -"Membolehkan mod skrin sentuh, membenarkan anda bermain permainan menggunakan " -"skrin sentuh." #: src/settings_translation_file.cpp msgid "" @@ -3872,10 +4036,6 @@ msgstr "" msgid "Graphics" msgstr "Grafik" -#: src/settings_translation_file.cpp -msgid "Graphics Effects" -msgstr "Kesan Grafik" - #: src/settings_translation_file.cpp msgid "Graphics and Audio" msgstr "Grafik dan Audio" @@ -4083,6 +4243,13 @@ msgstr "" "Jika dilumpuhkan, kekunci \"Aux1\" akan digunakan untuk terbang laju\n" "sekiranya kedua-dua mod terbang dan mod pergerakan pantas dibolehkan." +#: src/settings_translation_file.cpp +msgid "" +"If enabled and you have ContentDB packages installed, Luanti may contact " +"ContentDB to\n" +"check for package updates when opening the mainmenu." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down " @@ -4109,11 +4276,6 @@ msgstr "" "Jika dibolehkan, semua tindakan akan dirakam untuk gulung balik.\n" "Pilihan ini hanya dibaca ketika pelayan bermula." -#: src/settings_translation_file.cpp -msgid "If enabled, disable cheat prevention in multiplayer." -msgstr "" -"Jika dibolehkan, ia akan melumpuhkan pencegahan penipuan dalam multipemain." - #: src/settings_translation_file.cpp msgid "" "If enabled, invalid world data won't cause the server to shut down.\n" @@ -4227,9 +4389,10 @@ msgid "Instrument chat commands on registration." msgstr "Memasang perintah sembang ketika pendaftaran." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Instrument global callback functions on registration.\n" -"(anything you pass to a minetest.register_*() function)" +"(anything you pass to a core.register_*() function)" msgstr "" "Memasang fungsi panggil balik sejagat ketika pendaftaran.\n" "(semua benda yang anda salurkan kepada fungsi minetest.register_*())" @@ -4436,10 +4599,11 @@ msgid "Leaves style" msgstr "Gaya daun" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Leaves style:\n" "- Fancy: all faces visible\n" -"- Simple: only outer faces, if defined special_tiles are used\n" +"- Simple: only outer faces\n" "- Opaque: disable transparency" msgstr "" "Gaya daun:\n" @@ -4449,11 +4613,14 @@ msgstr "" "- Legap: melumpuhkan lut sinar" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Length of a server tick (the interval at which everything is generally " "updated),\n" "stated in seconds.\n" -"Does not apply to sessions hosted from the client menu." +"Does not apply to sessions hosted from the client menu.\n" +"This is a lower bound, i.e. server steps may not be shorter than this, but\n" +"they are often longer." msgstr "" "Panjang setiap detik pelayan (selang masa ketika mana semua benda\n" "selalunya dikemaskini), dinyatakan dalam saat.\n" @@ -4573,6 +4740,11 @@ msgstr "Jumlah gelung cecair maksimum" msgid "Liquid queue purge time" msgstr "Masa pembersihan giliran cecair" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Liquid reflections" +msgstr "Kebendaliran cecair" + #: src/settings_translation_file.cpp msgid "Liquid sinking" msgstr "Tenggelam dalam cecair" @@ -4603,16 +4775,6 @@ msgstr "" msgid "Loading Block Modifiers" msgstr "Memuatkan Pengubah Blok" -#: src/settings_translation_file.cpp -msgid "" -"Logical value that controls how far the bloom effect spreads\n" -"from the bright objects.\n" -"Range: from 0.1 to 8, default: 1" -msgstr "" -"Nilai logik yang mengawal sejauh mana kesan seri tersebar\n" -"daripada objek yang terang.\n" -"Julat: dari 0.1 ke 8, lalai: 1" - #: src/settings_translation_file.cpp msgid "Lower Y limit of dungeons." msgstr "Had Y bawah kurungan bawah tanah." @@ -4914,13 +5076,11 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Maximum number of packets sent per send step, if you have a slow connection\n" -"try reducing it, but don't reduce it to a number below double of targeted\n" -"client number." +"Maximum number of packets sent per send step in the low-level networking " +"code.\n" +"You generally don't need to change this, however busy servers may benefit " +"from a higher number." msgstr "" -"Jumlah maksima bingkisan yang dihantar pada setiap langkah penghantaran,\n" -"jika anda mempunyai sambungan yang perlahan maka cuba kurangkannya,\n" -"namun jangan kurangkan kepada nilai di bawah ganda dua jumlah klien sasaran." #: src/settings_translation_file.cpp msgid "Maximum number of players that can be connected simultaneously." @@ -5155,6 +5315,10 @@ msgstr "Tonjolan Nod dan Entiti" msgid "Node highlighting" msgstr "Tonjolan nod" +#: src/settings_translation_file.cpp +msgid "Node specular" +msgstr "" + #: src/settings_translation_file.cpp msgid "NodeTimer interval" msgstr "Selang masa NodeTimer" @@ -5210,9 +5374,10 @@ msgid "Number of messages a player may send per 10 seconds." msgstr "Jumlah mesej pemain boleh hantar setiap 10 saat." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Number of threads to use for mesh generation.\n" -"Value of 0 (default) will let Minetest autodetect the number of available " +"Value of 0 (default) will let Luanti autodetect the number of available " "threads." msgstr "" "Jumlah bebenang untuk digunakan bagi penjanaan jejaring.\n" @@ -5245,10 +5410,20 @@ msgstr "" msgid "OpenGL debug" msgstr "Nyahpepijat OpenGL" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Optimize GUI for touchscreens" +msgstr "Gunakan rerambut silang untuk skrin sentuh" + #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "Pilihan mengatasi warna pautan sesawang di sembang." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Other Effects" +msgstr "Kesan Grafik" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font. Must be a TrueType font.\n" @@ -5365,9 +5540,10 @@ msgid "Prometheus listener address" msgstr "Alamat pendengar Prometheus" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Prometheus listener address.\n" -"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Luanti is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" "Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" @@ -5398,6 +5574,10 @@ msgstr "" "Nilai lebih besar daripada 26 akan mula menghasilkan pemotongan tajam di " "sudut kawasan awan." +#: src/settings_translation_file.cpp +msgid "Radius to use when the block bounds HUD feature is set to near blocks." +msgstr "" + #: src/settings_translation_file.cpp msgid "Raises terrain to make valleys around the rivers." msgstr "Menaikkan rupa bumi untuk membuat lembah di sekitar sungai." @@ -5718,6 +5898,17 @@ msgstr "" "17 = Set Mandelbrot \"Mandelbulb\" 4D.\n" "18 = Set Julia \"Mandelbulb\" 4D." +#: src/settings_translation_file.cpp +msgid "" +"Send names of online players to the serverlist. If disabled only the player " +"count is revealed." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Send player names to the server list" +msgstr "Umumkan ke senarai pelayan ini." + #: src/settings_translation_file.cpp msgid "Server" msgstr "Pelayan" @@ -5738,6 +5929,13 @@ msgstr "URL pelayan" msgid "Server address" msgstr "Alamat pelayan" +#: src/settings_translation_file.cpp +msgid "" +"Server anticheat configuration.\n" +"Flags are positive. Uncheck the flag to disable corresponding anticheat " +"module." +msgstr "" + #: src/settings_translation_file.cpp msgid "Server description" msgstr "Perihal pelayan" @@ -5891,12 +6089,9 @@ msgstr "Pembayang" #: src/settings_translation_file.cpp msgid "" -"Shaders allow advanced visual effects and may increase performance on some " -"video\n" -"cards." +"Shaders are a fundamental part of rendering and enable advanced visual " +"effects." msgstr "" -"Pembayang membolehkan kesan visual lanjutan dan boleh meningkatkan prestasi\n" -"untuk sesetengah kad video." #: src/settings_translation_file.cpp msgid "Shadow filter quality" @@ -5966,6 +6161,10 @@ msgstr "" "Sistem dengan GPU bawahan (atau tiada GPU) akan dapat manfaat daripada nilai " "lebih kecil." +#: src/settings_translation_file.cpp +msgid "Simulate translucency when looking at foliage in the sunlight." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Size of mapchunks generated by mapgen, stated in mapblocks (16 nodes).\n" @@ -6015,6 +6214,11 @@ msgstr "Variasi suhu berskala kecil untuk menyebatikan biom dekat sempadan." msgid "Smooth lighting" msgstr "Pencahayaan lembut" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Smooth scrolling" +msgstr "Pencahayaan lembut" + #: src/settings_translation_file.cpp msgid "" "Smooths rotation of camera when in cinematic mode, 0 to disable. Enter " @@ -6040,6 +6244,11 @@ msgstr "Kelajuan menyelinap" msgid "Sneaking speed, in nodes per second." msgstr "Kelajuan menyelinap, dalam unit nod per saat." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Soft clouds" +msgstr "Awan 3D" + #: src/settings_translation_file.cpp msgid "Soft shadow radius" msgstr "Jejari bayang lembut" @@ -6278,15 +6487,16 @@ msgstr "" "disimpankan." #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"The gesture for for punching players/entities.\n" +"The gesture for punching players/entities.\n" "This can be overridden by games and mods.\n" "\n" "* short_tap\n" "Easy to use and well-known from other games that shall not be named.\n" "\n" "* long_tap\n" -"Known from the classic Minetest mobile controls.\n" +"Known from the classic Luanti mobile controls.\n" "Combat is more or less impossible." msgstr "" "Gerak isyarat untuk mengetuk pemain/entiti.\n" @@ -6362,11 +6572,11 @@ msgstr "" "Nilai ini patut ditetapkan bersama nilai active_object_send_range_blocks." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "The rendering back-end.\n" "Note: A restart is required after changing this!\n" -"OpenGL is the default for desktop, and OGLES2 for Android.\n" -"Shaders are supported by everything but OGLES1." +"OpenGL is the default for desktop, and OGLES2 for Android." msgstr "" "Bahagian belakang pengemas gabung.\n" "Nota: Mula semula diperlukan selepas mengubah tetapan ini!\n" @@ -6493,6 +6703,12 @@ msgstr "" "Tetapan ini menetapkan berapa lama ia diperlahankan setelah meletakkan atau " "mengalihkan sesebuah nod." +#: src/settings_translation_file.cpp +msgid "" +"Tolerance of movement cheat detector.\n" +"Increase the value if players experience stuttery movement." +msgstr "" + #: src/settings_translation_file.cpp msgid "Tooltip delay" msgstr "Lengah tip alatan" @@ -6501,6 +6717,11 @@ msgstr "Lengah tip alatan" msgid "Touchscreen" msgstr "Skrin Sentuh" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Touchscreen controls" +msgstr "Nilai ambang skrin sentuh" + #: src/settings_translation_file.cpp msgid "Touchscreen sensitivity" msgstr "Kepekaan skrin sentuh" @@ -6513,6 +6734,11 @@ msgstr "Pendarab kepekaan skrin sentuh." msgid "Tradeoffs for performance" msgstr "Keseimbangan untuk prestasi" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Translucent foliage" +msgstr "Cecair berlut cahaya" + #: src/settings_translation_file.cpp msgid "Translucent liquids" msgstr "Cecair berlut cahaya" @@ -6562,9 +6788,10 @@ msgstr "" "Tetapan ini hanya patut diubah jika anda mempunyai masalah prestasi." #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"URL to JSON file which provides information about the newest Minetest " -"release\n" +"URL to JSON file which provides information about the newest Luanti " +"release.\n" "If this is empty the engine will never check for updates." msgstr "" "URL ke fail JSON yang menyediakan maklumat mengenai terbitan Minetest " @@ -6666,6 +6893,10 @@ msgstr "" "Bendera ini membolehkan penggunaan percubaan penakaian oklusi surihan sinar\n" "untuk jejaring klien dengan saiz lebih kecil daripada blok peta 4x4x4." +#: src/settings_translation_file.cpp +msgid "Use smooth cloud shading." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Use trilinear filtering when scaling textures.\n" @@ -6871,6 +7102,16 @@ msgstr "Tumbuhan bergoyang" msgid "Weblink color" msgstr "Warna pautan sesawang" +#: src/settings_translation_file.cpp +msgid "When enabled, liquid reflections are simulated." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When enabled, the GUI is optimized to be more usable on touchscreens.\n" +"Whether this is enabled by default depends on your hardware form-factor." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -6996,8 +7237,9 @@ msgid "Window maximized" msgstr "Tetingkap dimaksimumkan" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Windows systems only: Start Minetest with the command line window in the " +"Windows systems only: Start Luanti with the command line window in the " "background.\n" "Contains the same information as the file debug.txt (default name)." msgstr "" @@ -7206,6 +7448,9 @@ msgstr "Had cURL selari" #~ msgid "All Settings" #~ msgstr "Semua Tetapan" +#~ msgid "All packages" +#~ msgstr "Semua pakej" + #~ msgid "Alters how mountain-type floatlands taper above and below midpoint." #~ msgstr "" #~ "Ubah cara tanah terapung jenis gunung menirus di atas dan bawah titik " @@ -7223,6 +7468,9 @@ msgstr "Had cURL selari" #~ msgid "Aux1 key" #~ msgstr "Kekunci Aux1" +#~ msgid "Back to Main Menu" +#~ msgstr "Kembali ke Menu Utama" + #~ msgid "Backward key" #~ msgstr "Kekunci ke belakang" @@ -7241,6 +7489,18 @@ msgstr "Had cURL selari" #~ msgid "Block bounds shown for all blocks" #~ msgstr "Batas blok ditunjukkan untuk semua blok" +#~ msgid "Bloom" +#~ msgstr "seri / kembang" + +#~ msgid "Bloom Intensity" +#~ msgstr "Keamatan Seri" + +#~ msgid "Bloom Radius" +#~ msgstr "Jejari Seri" + +#~ msgid "Bloom Strength Factor" +#~ msgstr "Faktor Kekuatan Seri" + #~ msgid "Bump Mapping" #~ msgstr "Pemetaan Bertompok" @@ -7428,6 +7688,15 @@ msgstr "Had cURL selari" #~ "Mentakrifkan kawasan rupa bumi lembut tanah terapung.\n" #~ "Tanag terapung lembut berlaku apabila hingar > 0." +#~ msgid "" +#~ "Defines how much bloom is applied to the rendered image\n" +#~ "Smaller values make bloom more subtle\n" +#~ "Range: from 0.01 to 1.0, default: 0.05" +#~ msgstr "" +#~ "Mentakrifkan berapa banyak seri diterapkan pada imej dikemas gabung\n" +#~ "Nilai lebih kecil membuatkan seri yang lebih lembut\n" +#~ "Julat: dari 0.01 ke 1.0, lalai: 0.05" + #~ msgid "" #~ "Defines sampling step of texture.\n" #~ "A higher value results in smoother normal maps." @@ -7435,6 +7704,13 @@ msgstr "Had cURL selari" #~ "Mentakrifkan tahap persampelan tekstur.\n" #~ "Nilai lebih tinggi menghasilkan peta normal lebih lembut." +#~ msgid "" +#~ "Defines the magnitude of bloom overexposure.\n" +#~ "Range: from 0.1 to 10.0, default: 1.0" +#~ msgstr "" +#~ "Mentakrifkan magnitud terlebih dedahan seri.\n" +#~ "Julat: dari 0.1 ke 10.0, lalai: 1.0" + #~ msgid "Del. Favorite" #~ msgstr "Padam Kegemaran" @@ -7450,6 +7726,9 @@ msgstr "Had cURL selari" #~ msgid "Dig key" #~ msgstr "Kekunci gali" +#~ msgid "Disable anticheat" +#~ msgstr "Melumpuhkan antitipu" + #~ msgid "Disabled unlimited viewing range" #~ msgstr "Jarak pandang tanpa had dilumpuhkan" @@ -7486,6 +7765,9 @@ msgstr "Had cURL selari" #~ msgid "Enable register confirmation" #~ msgstr "Bolehkan pengesahan pendaftaran" +#~ msgid "Enable touchscreen" +#~ msgstr "Membolehkan skrin sentuh" + #~ msgid "" #~ "Enable vertex buffer objects.\n" #~ "This should greatly improve graphics performance." @@ -7493,9 +7775,6 @@ msgstr "Had cURL selari" #~ "Membolehkan objek penimbal bucu.\n" #~ "Ini patut meningkatkan prestasi grafik dengan banyak." -#~ msgid "Enabled" -#~ msgstr "Dibolehkan" - #~ msgid "" #~ "Enables bumpmapping for textures. Normalmaps need to be supplied by the " #~ "texture pack\n" @@ -7539,6 +7818,13 @@ msgstr "Had cURL selari" #~ "dan kawalan bunyi dalam permainan tidak akan berfungsi.\n" #~ "Pengubahan tetapan ini memerlukan permulaan semula." +#~ msgid "" +#~ "Enables touchscreen mode, allowing you to play the game with a " +#~ "touchscreen." +#~ msgstr "" +#~ "Membolehkan mod skrin sentuh, membenarkan anda bermain permainan " +#~ "menggunakan skrin sentuh." + #~ msgid "Enter " #~ msgstr "Masukkan " @@ -7776,6 +8062,11 @@ msgstr "Had cURL selari" #~ "pepejal.\n" #~ "Ini memerlukan keistimewaan \"tembus blok\" dalam pelayan tersebut." +#~ msgid "If enabled, disable cheat prevention in multiplayer." +#~ msgstr "" +#~ "Jika dibolehkan, ia akan melumpuhkan pencegahan penipuan dalam " +#~ "multipemain." + #~ msgid "" #~ "If enabled, makes move directions relative to the player's pitch when " #~ "flying or swimming." @@ -7796,9 +8087,6 @@ msgstr "Had cURL selari" #~ msgid "Inc. volume key" #~ msgstr "Kekunci kuatkan bunyi" -#~ msgid "Information:" -#~ msgstr "Maklumat:" - #~ msgid "Install Mod: Unable to find real mod name for: $1" #~ msgstr "Pasang Mods: Gagal mencari nama mods sebenar untuk: $1" @@ -8497,6 +8785,15 @@ msgstr "Had cURL selari" #~ msgid "Limit of emerge queues on disk" #~ msgstr "Had baris hilir keluar pada cakera" +#~ msgid "" +#~ "Logical value that controls how far the bloom effect spreads\n" +#~ "from the bright objects.\n" +#~ "Range: from 0.1 to 8, default: 1" +#~ msgstr "" +#~ "Nilai logik yang mengawal sejauh mana kesan seri tersebar\n" +#~ "daripada objek yang terang.\n" +#~ "Julat: dari 0.1 ke 8, lalai: 1" + #~ msgid "Main" #~ msgstr "Utama" @@ -8514,6 +8811,18 @@ msgstr "Had cURL selari" #~ msgid "Mapblock mesh generator's MapBlock cache size in MB" #~ msgstr "Saiz cache BlokPeta untuk penjana jejaring blokpeta dalam unit MB" +#~ msgid "" +#~ "Maximum number of packets sent per send step, if you have a slow " +#~ "connection\n" +#~ "try reducing it, but don't reduce it to a number below double of " +#~ "targeted\n" +#~ "client number." +#~ msgstr "" +#~ "Jumlah maksima bingkisan yang dihantar pada setiap langkah penghantaran,\n" +#~ "jika anda mempunyai sambungan yang perlahan maka cuba kurangkannya,\n" +#~ "namun jangan kurangkan kepada nilai di bawah ganda dua jumlah klien " +#~ "sasaran." + #~ msgid "Menus" #~ msgstr "Menu" @@ -8739,6 +9048,15 @@ msgstr "Had cURL selari" #~ msgid "Shaders (unavailable)" #~ msgstr "Pembayang (tidak tersedia)" +#~ msgid "" +#~ "Shaders allow advanced visual effects and may increase performance on " +#~ "some video\n" +#~ "cards." +#~ msgstr "" +#~ "Pembayang membolehkan kesan visual lanjutan dan boleh meningkatkan " +#~ "prestasi\n" +#~ "untuk sesetengah kad video." + #~ msgid "Shadow limit" #~ msgstr "Had bayang" @@ -8833,9 +9151,6 @@ msgstr "Had cURL selari" #~ msgid "Touch threshold (px):" #~ msgstr "Nilai ambang sentuhan (px):" -#~ msgid "Touchscreen threshold" -#~ msgstr "Nilai ambang skrin sentuh" - #~ msgid "Trilinear Filter" #~ msgstr "Penapisan Trilinear" @@ -8914,6 +9229,9 @@ msgstr "Had cURL selari" #~ msgid "View" #~ msgstr "Lihat" +#~ msgid "View more information in a web browser" +#~ msgstr "Lihat maklumat lanjut dalam pelayar sesawang" + #~ msgid "View range decrease key" #~ msgstr "Kekunci mengurang jarak pandang" diff --git a/po/ms_Arab/luanti.po b/po/ms_Arab/luanti.po index 8a1a20a0f..b940461ec 100644 --- a/po/ms_Arab/luanti.po +++ b/po/ms_Arab/luanti.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-07-11 15:14+0200\n" +"POT-Creation-Date: 2024-10-28 19:57+0100\n" "PO-Revision-Date: 2024-08-15 19:09+0000\n" "Last-Translator: bgo-eiu \n" "Language-Team: Malay (Jawi) \n" "Language-Team: Norwegian Bokmål \n" "Language-Team: Dutch \n" "Language-Team: Norwegian Nynorsk \n" "Language-Team: Occitan \n" "Language-Team: Polish 0." +#~ msgid "" +#~ "Defines how much bloom is applied to the rendered image\n" +#~ "Smaller values make bloom more subtle\n" +#~ "Range: from 0.01 to 1.0, default: 0.05" +#~ msgstr "" +#~ "Definiuje jak dużo efektu bloom jest aplikowane na renderowany obraz\n" +#~ "Mniejsze wartości sprawiają że efekt jest delikatniejszy\n" +#~ "Zakres: od 0.01 do 1.0, wartość domyślna: 0.05" + #~ msgid "" #~ "Defines sampling step of texture.\n" #~ "A higher value results in smoother normal maps." @@ -7433,6 +7695,13 @@ msgstr "Limit żądań równoległych cURL" #~ "Definiuje krok próbkowania tekstury.\n" #~ "Wyższa wartość reprezentuje łagodniejszą mapę normalnych." +#~ msgid "" +#~ "Defines the magnitude of bloom overexposure.\n" +#~ "Range: from 0.1 to 10.0, default: 1.0" +#~ msgstr "" +#~ "Definiuje wielkość prześwietlenia efektu bloom.\n" +#~ "Zakres: od 0.1 do 10.0, wartość domyślna: 1.0" + #~ msgid "Del. Favorite" #~ msgstr "Usuń ulubiony" @@ -7440,6 +7709,9 @@ msgstr "Limit żądań równoległych cURL" #~ msgid "Dig key" #~ msgstr "Klawisz kopania" +#~ msgid "Disable anticheat" +#~ msgstr "Wyłącz anticheat" + #~ msgid "Disabled unlimited viewing range" #~ msgstr "Wyłączono nieskończony zasięg widoczności" @@ -7474,6 +7746,9 @@ msgstr "Limit żądań równoległych cURL" #~ msgid "Enable register confirmation" #~ msgstr "Włącz potwierdzanie rejestracji" +#~ msgid "Enable touchscreen" +#~ msgstr "Włącz ekran dotykowy" + #~ msgid "" #~ "Enable vertex buffer objects.\n" #~ "This should greatly improve graphics performance." @@ -7481,9 +7756,6 @@ msgstr "Limit żądań równoległych cURL" #~ "Zezwala na korzystanie z VBO (obiektów bufora wierzchołków).\n" #~ "Powinno to znacznie polepszyć wydajność karty graficznej." -#~ msgid "Enabled" -#~ msgstr "Włączone" - #~ msgid "" #~ "Enables bumpmapping for textures. Normalmaps need to be supplied by the " #~ "texture pack\n" @@ -7527,6 +7799,13 @@ msgstr "Limit żądań równoległych cURL" #~ "sterowanie dźwiękiem w grze również nie będzie działać.\n" #~ "Zmiana tego ustawienia wymaga ponownego uruchomienia gry." +#~ msgid "" +#~ "Enables touchscreen mode, allowing you to play the game with a " +#~ "touchscreen." +#~ msgstr "" +#~ "Włącza tryb ekranu dotykowego, pozwalając grać w grę z użyciem ekranu " +#~ "dotykowego." + #~ msgid "Enter " #~ msgstr "Enter " @@ -7794,6 +8073,9 @@ msgstr "Limit żądań równoległych cURL" #~ "bloki.\n" #~ "Wymaga przywileju \"noclip\" na serwerze." +#~ msgid "If enabled, disable cheat prevention in multiplayer." +#~ msgstr "Jeśli włączone, wyłącza ograniczenie oszustw w trybie multiplayer." + #~ msgid "" #~ "If enabled, makes move directions relative to the player's pitch when " #~ "flying or swimming." @@ -7807,9 +8089,6 @@ msgstr "Limit żądań równoległych cURL" #~ msgid "Inc. volume key" #~ msgstr "Klawisz zwiększania głośności" -#~ msgid "Information:" -#~ msgstr "Informacja:" - #~ msgid "Install Mod: Unable to find real mod name for: $1" #~ msgstr "Instalacja moda: nie można znaleźć nazwy moda $1" @@ -8553,6 +8832,15 @@ msgstr "Limit żądań równoległych cURL" #~ msgid "Limit of emerge queues on disk" #~ msgstr "Limit oczekiwań na dysku" +#~ msgid "" +#~ "Logical value that controls how far the bloom effect spreads\n" +#~ "from the bright objects.\n" +#~ "Range: from 0.1 to 8, default: 1" +#~ msgstr "" +#~ "Wartość logiczna, która kontroluje jak daleko efekt bloom roznosi się\n" +#~ "od jasnych obiektów.\n" +#~ "Zakres: od 0.1 do 8, wartość domyślna: 1" + #~ msgid "Main" #~ msgstr "Menu główne" @@ -8571,6 +8859,19 @@ msgstr "Limit żądań równoległych cURL" #~ msgid "Mapblock mesh generator's MapBlock cache size in MB" #~ msgstr "Wielkość pamięci podręcznej generatora siatki bloków Mapblock w MB" +#~ msgid "" +#~ "Maximum number of packets sent per send step, if you have a slow " +#~ "connection\n" +#~ "try reducing it, but don't reduce it to a number below double of " +#~ "targeted\n" +#~ "client number." +#~ msgstr "" +#~ "Maksymalna liczba pakietów wysyłanych na krok wysyłania, jeśli masz wolne " +#~ "połączenie\n" +#~ "spróbuj go zmniejszyć, ale nie zmniejszaj go do liczby poniżej podwójnej " +#~ "liczby docelowej\n" +#~ "numer klienta." + #~ msgid "Menus" #~ msgstr "Menu" @@ -8789,6 +9090,17 @@ msgstr "Limit żądań równoległych cURL" #~ msgid "Shaders (unavailable)" #~ msgstr "Shadery (niedostępne)" +#, fuzzy +#~ msgid "" +#~ "Shaders allow advanced visual effects and may increase performance on " +#~ "some video\n" +#~ "cards." +#~ msgstr "" +#~ "Shadery pozwalają na zaawansowane efekty wizualne, mogą również zwiększyć " +#~ "wydajność niektórych kart\n" +#~ "graficznych.\n" +#~ "Działa tylko z zapleczem wideo OpenGL ." + #~ msgid "Shadow limit" #~ msgstr "Limit cieni" @@ -8878,10 +9190,6 @@ msgstr "Limit żądań równoległych cURL" #~ msgid "Touch threshold (px):" #~ msgstr "Próg dotyku (px):" -#, fuzzy -#~ msgid "Touchscreen threshold" -#~ msgstr "Próg ekranu dotykowego" - #~ msgid "Trilinear Filter" #~ msgstr "Filtrowanie trójliniowe" @@ -8938,6 +9246,9 @@ msgstr "Limit żądań równoległych cURL" #~ msgid "Vertical screen synchronization." #~ msgstr "Pionowa synchronizacja ekranu." +#~ msgid "View more information in a web browser" +#~ msgstr "Pokaż więcej informacji w przeglądarce" + #~ msgid "View range decrease key" #~ msgstr "Klawisz zmniejszania zasięgu widzenia" diff --git a/po/pt/luanti.po b/po/pt/luanti.po index 611c29350..f811c3697 100644 --- a/po/pt/luanti.po +++ b/po/pt/luanti.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Portuguese (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-07-11 15:14+0200\n" +"POT-Creation-Date: 2024-10-28 19:57+0100\n" "PO-Revision-Date: 2024-09-08 12:09+0000\n" "Last-Translator: Davi Lopes \n" "Language-Team: Portuguese \n" "Language-Team: Portuguese (Brazil) \n" "Language-Team: Romanian \n" "Language-Team: Russian \n" "Language-Team: Slovak \n" "Language-Team: Slovenian \n" "Language-Team: Serbian (cyrillic) \n" "Language-Team: Serbian (latin) \n" "Language-Team: Swedish 0." +#~ msgid "" +#~ "Defines how much bloom is applied to the rendered image\n" +#~ "Smaller values make bloom more subtle\n" +#~ "Range: from 0.01 to 1.0, default: 0.05" +#~ msgstr "" +#~ "Definierar hur mycket bloom som appliceras på den återgivna bilden.\n" +#~ "Mindre värden gör bloomningen mindre stark.\n" +#~ "Intervall: från 0,01 till 1,0, standard: 0,05" + #~ msgid "" #~ "Defines sampling step of texture.\n" #~ "A higher value results in smoother normal maps." @@ -6811,9 +7074,19 @@ msgstr "cURL parallellgräns" #~ "Definierar samplingssteg av textur.\n" #~ "Högre värden resulterar i jämnare normalmappning." +#~ msgid "" +#~ "Defines the magnitude of bloom overexposure.\n" +#~ "Range: from 0.1 to 10.0, default: 1.0" +#~ msgstr "" +#~ "Definierar storleken på överexponeringen av bloomningen.\n" +#~ "Intervall: från 0,1 till 10,0, standard: 1,0" + #~ msgid "Dig key" #~ msgstr "Gräv-knapp" +#~ msgid "Disable anticheat" +#~ msgstr "Inaktivera antifusk" + #~ msgid "Disabled unlimited viewing range" #~ msgstr "Inaktiverat obegränsat visningsområde" @@ -6844,6 +7117,10 @@ msgstr "cURL parallellgräns" #~ msgid "Enable register confirmation" #~ msgstr "Aktivera registreringsbekräftelse" +#, fuzzy +#~ msgid "Enable touchscreen" +#~ msgstr "Pekskärm" + #~ msgid "" #~ "Enable vertex buffer objects.\n" #~ "This should greatly improve graphics performance." @@ -6851,9 +7128,6 @@ msgstr "cURL parallellgräns" #~ "Aktivera vertexbuffertobjekt.\n" #~ "Detta bör avsevärt förbättra grafikprestandan." -#~ msgid "Enabled" -#~ msgstr "Aktiverad" - #~ msgid "Enables minimap." #~ msgstr "Aktiverar minimap." @@ -6958,9 +7232,6 @@ msgstr "cURL parallellgräns" #~ msgid "In-Game" #~ msgstr "In-game" -#~ msgid "Information:" -#~ msgstr "Information:" - #~ msgid "Install Mod: Unable to find real mod name for: $1" #~ msgstr "Moddinstallation: Lyckades ej hitta riktiga moddnamnet för: $1" @@ -7060,9 +7331,6 @@ msgstr "cURL parallellgräns" #~ msgid "Simple Leaves" #~ msgstr "Enkla löv" -#~ msgid "Smooth Lighting" -#~ msgstr "Utjämnad Belysning" - #, fuzzy #~ msgid "Special key" #~ msgstr "tryck på tangent" @@ -7091,9 +7359,6 @@ msgstr "cURL parallellgräns" #~ msgid "Touch threshold (px):" #~ msgstr "Touch-tröskel (px):" -#~ msgid "Touchscreen threshold" -#~ msgstr "Tröskelvärde för pekskärm" - #~ msgid "Trilinear Filter" #~ msgstr "Trilinjärt filter" @@ -7109,6 +7374,9 @@ msgstr "cURL parallellgräns" #~ msgid "Up" #~ msgstr "Upp" +#~ msgid "View more information in a web browser" +#~ msgstr "Visa mer information i en webbläsare" + #, c-format #~ msgid "Viewing range is at maximum: %d" #~ msgstr "Visningsområde är vid sitt maximala: %d" diff --git a/po/sw/luanti.po b/po/sw/luanti.po index 3b53f318f..0fca34f94 100644 --- a/po/sw/luanti.po +++ b/po/sw/luanti.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Swahili (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-07-11 15:14+0200\n" +"POT-Creation-Date: 2024-10-28 19:57+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: Swahili \n" "Language-Team: Thai \n" "Language-Team: Toki Pona \n" "Language-Team: Turkish \n" "Language-Team: Tatar \n" "Language-Team: Ukrainian \n" "Language-Team: Vietnamese \n" "Language-Team: Yue (Traditional) \n" "Language-Team: Chinese (Simplified) \n" "Language-Team: Chinese (Traditional) 0 時產生。" +#~ msgid "" +#~ "Defines how much bloom is applied to the rendered image\n" +#~ "Smaller values make bloom more subtle\n" +#~ "Range: from 0.01 to 1.0, default: 0.05" +#~ msgstr "" +#~ "定義對渲染影像套用多少光暈\n" +#~ "較小的值使光暈更加微妙\n" +#~ "範圍:從 0.01 到 1.0,預設值:0.05" + #~ msgid "" #~ "Defines sampling step of texture.\n" #~ "A higher value results in smoother normal maps." @@ -7131,12 +7402,22 @@ msgstr "cURL 並行限制" #~ "定義材質的採樣步驟。\n" #~ "較高的值會有較平滑的一般地圖。" +#~ msgid "" +#~ "Defines the magnitude of bloom overexposure.\n" +#~ "Range: from 0.1 to 10.0, default: 1.0" +#~ msgstr "" +#~ "定義光暈過度曝光的程度。\n" +#~ "範圍:從 0.1 到 10.0,預設值:1.0" + #~ msgid "Del. Favorite" #~ msgstr "刪除收藏" #~ msgid "Dig key" #~ msgstr "挖掘鍵" +#~ msgid "Disable anticheat" +#~ msgstr "停用反作弊" + #~ msgid "Disabled unlimited viewing range" #~ msgstr "已停用無限視野" @@ -7170,6 +7451,9 @@ msgstr "cURL 並行限制" #~ msgid "Enable register confirmation" #~ msgstr "啟用註冊確認" +#~ msgid "Enable touchscreen" +#~ msgstr "啟用觸控螢幕" + #~ msgid "" #~ "Enable vertex buffer objects.\n" #~ "This should greatly improve graphics performance." @@ -7177,9 +7461,6 @@ msgstr "cURL 並行限制" #~ "啟用頂點緩衝區物件。\n" #~ "這應該會大大提高圖形性能。" -#~ msgid "Enabled" -#~ msgstr "已啟用" - #~ msgid "" #~ "Enables bumpmapping for textures. Normalmaps need to be supplied by the " #~ "texture pack\n" @@ -7210,6 +7491,11 @@ msgstr "cURL 並行限制" #~ "啟用視差遮蔽貼圖。\n" #~ "必須啟用著色器。" +#~ msgid "" +#~ "Enables touchscreen mode, allowing you to play the game with a " +#~ "touchscreen." +#~ msgstr "啟用觸控螢幕模式,讓你可以使用觸控螢幕玩遊戲。" + #~ msgid "Enter " #~ msgstr "輸入 " @@ -7436,15 +7722,15 @@ msgstr "cURL 並行限制" #~ "若與飛行模式一同啟用,玩家就可以飛過固體節點。\n" #~ "這需要在伺服器上的「noclip」權限。" +#~ msgid "If enabled, disable cheat prevention in multiplayer." +#~ msgstr "若啟用,將會停用在多人遊戲中的防止作弊。" + #~ msgid "In-Game" #~ msgstr "遊戲中" #~ msgid "Inc. volume key" #~ msgstr "提高音量鍵" -#~ msgid "Information:" -#~ msgstr "資訊:" - #~ msgid "Install Mod: Unable to find real mod name for: $1" #~ msgstr "安裝 Mod:找不到下述項目的真實 Mod 名稱:$1" @@ -8139,6 +8425,15 @@ msgstr "cURL 並行限制" #~ msgid "Limit of emerge queues on disk" #~ msgstr "在磁碟上出現佇列的限制" +#~ msgid "" +#~ "Logical value that controls how far the bloom effect spreads\n" +#~ "from the bright objects.\n" +#~ "Range: from 0.1 to 8, default: 1" +#~ msgstr "" +#~ "控制暈效果傳播多遠的邏輯值\n" +#~ "來自明亮的物體。\n" +#~ "範圍:0.1 到 8,預設值:1" + #~ msgid "Main" #~ msgstr "主要" @@ -8156,6 +8451,17 @@ msgstr "cURL 並行限制" #~ msgid "Mapblock mesh generator's MapBlock cache size in MB" #~ msgstr "地圖區塊網格生成器的地圖區塊快取大小 MB" +#~ msgid "" +#~ "Maximum number of packets sent per send step, if you have a slow " +#~ "connection\n" +#~ "try reducing it, but don't reduce it to a number below double of " +#~ "targeted\n" +#~ "client number." +#~ msgstr "" +#~ "每個傳送步驟要傳送的最大封包數,若您的網路連線緩慢\n" +#~ "請試著降低它,但請不要降低到低於兩倍的目標\n" +#~ "用戶端數。" + #~ msgid "Menus" #~ msgstr "選單" @@ -8354,6 +8660,14 @@ msgstr "cURL 並行限制" #~ msgid "Shaders (unavailable)" #~ msgstr "著色器(無法使用)" +#~ msgid "" +#~ "Shaders allow advanced visual effects and may increase performance on " +#~ "some video\n" +#~ "cards." +#~ msgstr "" +#~ "著色器允許實現高級視覺效果,\n" +#~ "並可能提高某些顯示卡的性能。" + #~ msgid "Shadow limit" #~ msgstr "陰影限制" @@ -8441,10 +8755,6 @@ msgstr "cURL 並行限制" #~ msgid "Touch threshold (px):" #~ msgstr "觸控閾值:(像素)" -#, fuzzy -#~ msgid "Touchscreen threshold" -#~ msgstr "海灘雜訊閾值" - #~ msgid "Trilinear Filter" #~ msgstr "三線性過濾器" @@ -8481,6 +8791,9 @@ msgstr "cURL 並行限制" #~ msgid "View" #~ msgstr "查看" +#~ msgid "View more information in a web browser" +#~ msgstr "在網絡瀏覽器中查看更多信息" + #~ msgid "View range decrease key" #~ msgstr "降低視野的按鍵" From 3ad6aee9b2088cf4e53cceb4ad09807eee8631f0 Mon Sep 17 00:00:00 2001 From: grorp Date: Mon, 28 Oct 2024 20:22:30 +0100 Subject: [PATCH 097/178] Manually fix new Android translations for new name --- android/app/src/main/res/values-de/strings.xml | 6 +++--- android/app/src/main/res/values-hu/strings.xml | 6 +++--- android/app/src/main/res/values-in/strings.xml | 6 +++--- android/app/src/main/res/values-ms/strings.xml | 6 +++--- android/app/src/main/res/values-nb-rNO/strings.xml | 6 +++--- 5 files changed, 15 insertions(+), 15 deletions(-) diff --git a/android/app/src/main/res/values-de/strings.xml b/android/app/src/main/res/values-de/strings.xml index e5d7e21de..8585c95cc 100644 --- a/android/app/src/main/res/values-de/strings.xml +++ b/android/app/src/main/res/values-de/strings.xml @@ -1,11 +1,11 @@ - Minetest + Luanti Lädt… - Minetest lädt + Luanti lädt Weniger als 1 Minute… Fertig Kein Web-Browser gefunden Allgemeine Benachrichtigung - Benachrichtigungen von Minetest + Benachrichtigungen von Luanti \ No newline at end of file diff --git a/android/app/src/main/res/values-hu/strings.xml b/android/app/src/main/res/values-hu/strings.xml index 4cf74bc4e..7bdbaeb6e 100644 --- a/android/app/src/main/res/values-hu/strings.xml +++ b/android/app/src/main/res/values-hu/strings.xml @@ -2,10 +2,10 @@ Betöltés… Általános értesítés - Értesítések a Minetest-től - Minetest betöltése… + Értesítések a Luanti-től + Luanti betöltése… Kész Nem található webböngésző - Minetest + Luanti Kevesebb, mint 1 perc… \ No newline at end of file diff --git a/android/app/src/main/res/values-in/strings.xml b/android/app/src/main/res/values-in/strings.xml index cb7092f58..cbd8acd9a 100644 --- a/android/app/src/main/res/values-in/strings.xml +++ b/android/app/src/main/res/values-in/strings.xml @@ -2,10 +2,10 @@ Tidak ditemukan peramban web Selesai - Minetest + Luanti Memuat… Pemberitahuan umum Kurang dari 1 menit… - Pemberitahuan dari Minetest - Memuat Minetest… + Pemberitahuan dari Luanti + Memuat Luanti… \ No newline at end of file diff --git a/android/app/src/main/res/values-ms/strings.xml b/android/app/src/main/res/values-ms/strings.xml index d19b4e168..33bdf6204 100644 --- a/android/app/src/main/res/values-ms/strings.xml +++ b/android/app/src/main/res/values-ms/strings.xml @@ -1,8 +1,8 @@ - Minetest - Pemberitahuan dari Minetest - Memuatkan Minetest… + Luanti + Pemberitahuan dari Luanti + Memuatkan Luanti… Kurang dari 1 minit… Tiada pelayar sesawang dijumpai Memuatkan… diff --git a/android/app/src/main/res/values-nb-rNO/strings.xml b/android/app/src/main/res/values-nb-rNO/strings.xml index 1d3e0427c..4a014e2fe 100644 --- a/android/app/src/main/res/values-nb-rNO/strings.xml +++ b/android/app/src/main/res/values-nb-rNO/strings.xml @@ -1,11 +1,11 @@ - Minetest + Luanti Laster inn … Generell merknad - Merknader fra Minetest + Merknader fra Luanti Mindre enn ett minutt … Ferdig Fant ingen nettleser - Laster inn Minetest … + Laster inn Luanti … \ No newline at end of file From d1728199bbfa8bdd5ed975af7756500cb586e6b7 Mon Sep 17 00:00:00 2001 From: 1F616EMO~nya Date: Fri, 1 Nov 2024 02:22:29 +0800 Subject: [PATCH 098/178] Rename Minetest to Luanti in .github/ files (#15357) --- .github/CONTRIBUTING.md | 10 +++++----- .github/ISSUE_TEMPLATE/bug_report.yaml | 17 +++++++++-------- .github/SECURITY.md | 2 +- 3 files changed, 15 insertions(+), 14 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index dab491ad8..4edd63207 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -83,7 +83,7 @@ a stable release is on the way. - Error logs (check the bottom of the `debug.txt` file). - Screenshots. - Ways you have tried to solve the issue, and whether they worked or not. - - Your Minetest version and the content (games, mods or texture packs) you have installed. + - Your Luanti version and the content (games, mods or texture packs) you have installed. - Your platform (e.g. Windows 10 or Ubuntu 15.04 x64). After reporting you should aim to answer questions or clarifications as this @@ -99,7 +99,7 @@ possible. ## Translations -The core translations of Minetest are performed using Weblate. You can access +The core translations of Luanti are performed using Weblate. You can access the project page with a list of current languages [here](https://hosted.weblate.org/projects/minetest/minetest/). @@ -110,7 +110,7 @@ translated by editing a `.tr` text file. See ## Donations -If you'd like to monetarily support Minetest development, you can find donation +If you'd like to monetarily support Luanti development, you can find donation methods on [our website](http://www.minetest.net/development/#donate). # Maintaining @@ -118,7 +118,7 @@ methods on [our website](http://www.minetest.net/development/#donate). * This is a concise version of the [Rules & Guidelines](http://dev.minetest.net/Category:Rules_and_Guidelines) on the developer wiki.* -These notes are for those who have push access Minetest (core developers / maintainers). +These notes are for those who have push access Luanti (core developers / maintainers). - See the [project organisation](http://dev.minetest.net/Organisation) for the people involved. @@ -169,4 +169,4 @@ Submit a :+1: (+1) or "Looks good" comment to show you believe the pull-request ## Releasing a new version -*Refer to [dev.minetest.net/Releasing_Minetest](http://dev.minetest.net/Releasing_Minetest)* +*Refer to [dev.minetest.net/Releasing_Luanti](https://dev.minetest.net/Releasing_Luanti)* diff --git a/.github/ISSUE_TEMPLATE/bug_report.yaml b/.github/ISSUE_TEMPLATE/bug_report.yaml index 32b7f5673..aab024d7d 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yaml +++ b/.github/ISSUE_TEMPLATE/bug_report.yaml @@ -6,22 +6,23 @@ body: attributes: value: | Please note the following: - 1. **Please update your Minetest Engine to the latest stable or dev version** before submitting bug reports. Make sure the bug is still reproducible on the latest version. + 1. **Please update Luanti to the latest stable or dev version** before submitting bug reports. Make sure the bug is still reproducible on the latest version. 2. This page is for reporting the bugs of **the engine itself**. For bugs in a particular game, please [search for the game in the ContentDB](https://content.minetest.net/packages/?type=game) and submit a bug report in their issue trackers. - * For example, you can submit issues about the Minetest Game (the official game of Minetest) [in its own repository](https://github.com/minetest/minetest_game/issues). + * For example, you can submit issues about the Minetest Game [in its own repository](https://github.com/minetest/minetest_game/issues). 3. Please provide as many details as possible for us to spot the problem quicker. - type: textarea attributes: - label: Minetest version + label: Luanti version description: | - Paste the Minetest version below. + Paste the Luanti version below. If you are on a dev version, please also indicate the git commit hash. - Refer to the "About" tab of the menu or run `minetest --version` on the command line. + Refer to the "About" tab of the menu or run `luanti --version` on the command line. placeholder: | Example: - Minetest 5.7.0-dev-ca13c51 (Linux) - Using Irrlicht 1.9.0mt9 - Using LuaJIT 2.1.0-beta3 + Luanti 5.10.0-3ad6aee9b (Linux) + Using LuaJIT 2.1.1727870382 + Built by GCC 14.2 + Running on Linux/6.11.5 x86_64 BUILD_TYPE=Release RUN_IN_PLACE=1 USE_CURL=1 diff --git a/.github/SECURITY.md b/.github/SECURITY.md index e2dd0432f..d5db2751a 100644 --- a/.github/SECURITY.md +++ b/.github/SECURITY.md @@ -14,7 +14,7 @@ to give us time to fix them. You can do that by emailing one of the following ad * rubenwardy@minetest.net Depending on severity, we will either create a private issue for the vulnerability -and release a patch version of Minetest, or give you permission to file the issue publicly. +and release a patch version of Luanti, or give you permission to file the issue publicly. For more information on the justification of this policy, see [Responsible Disclosure](https://en.wikipedia.org/wiki/Responsible_disclosure). From 8b85a62310f8757a10fe8f710ffe09a531cbb6d4 Mon Sep 17 00:00:00 2001 From: grorp Date: Thu, 31 Oct 2024 19:23:02 +0100 Subject: [PATCH 099/178] Fix some broken icons in the CDB dialog on Windows (#15363) core.formspec_escape was missing --- builtin/mainmenu/content/dlg_contentdb.lua | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/builtin/mainmenu/content/dlg_contentdb.lua b/builtin/mainmenu/content/dlg_contentdb.lua index c05bb804a..3c3f7987d 100644 --- a/builtin/mainmenu/content/dlg_contentdb.lua +++ b/builtin/mainmenu/content/dlg_contentdb.lua @@ -357,7 +357,7 @@ local function get_formspec(dlgdata) if package.featured then table.insert_all(formspec, { "tooltip[0,0;0.8,0.8;", fgettext("Featured"), "]", - "image[0.2,0.2;0.4,0.4;", defaulttexturedir, "server_favorite.png]", + "image[0.2,0.2;0.4,0.4;", core.formspec_escape(defaulttexturedir .. "server_favorite.png"), "]", }) end @@ -367,20 +367,21 @@ local function get_formspec(dlgdata) if package.downloading then table.insert_all(formspec, { - "animated_image[0,0;0.5,0.5;downloading;", defaulttexturedir, "cdb_downloading.png;3;400;;]", + "animated_image[0,0;0.5,0.5;downloading;", core.formspec_escape(defaulttexturedir .. "cdb_downloading.png"), + ";3;400;;]", }) elseif package.queued then table.insert_all(formspec, { - "image[0,0;0.5,0.5;", defaulttexturedir, "cdb_queued.png]", + "image[0,0;0.5,0.5;", core.formspec_escape(defaulttexturedir .. "cdb_queued.png"), "]", }) elseif package.path then if package.installed_release < package.release then table.insert_all(formspec, { - "image[0,0;0.5,0.5;", defaulttexturedir, "cdb_update.png]", + "image[0,0;0.5,0.5;", core.formspec_escape(defaulttexturedir .. "cdb_update.png"), "]", }) else table.insert_all(formspec, { - "image[0.1,0.1;0.3,0.3;", defaulttexturedir, "checkbox_64.png]", + "image[0.1,0.1;0.3,0.3;", core.formspec_escape(defaulttexturedir .. "checkbox_64.png"), "]", }) end end From 5c5538685e59012727758ebc8228979ef7706700 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Thu, 31 Oct 2024 19:24:43 +0100 Subject: [PATCH 100/178] Don't memset SEvent directly (#15359) Fixes a compiler warning by manually zeroing the tag and the largest union member instead --- irr/include/IEventReceiver.h | 13 +++++++------ irr/src/CIrrDeviceLinux.cpp | 1 - src/gui/guiTable.cpp | 1 - 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/irr/include/IEventReceiver.h b/irr/include/IEventReceiver.h index 7fb9e5f4e..332b23158 100644 --- a/irr/include/IEventReceiver.h +++ b/irr/include/IEventReceiver.h @@ -18,7 +18,7 @@ enum EEVENT_TYPE to mouse or keyboard events. When a GUI element receives an event it will either process it and return true, or pass the event to its parent. If an event is not absorbed before it reaches the root element then it will then be passed to the user receiver. */ - EET_GUI_EVENT = 0, + EET_GUI_EVENT = 1, //! A mouse input event. /** Mouse events are created by the device and passed to IrrlichtDevice::postEventFromUser @@ -332,6 +332,9 @@ struct SEvent //! True if ctrl was also pressed bool Control : 1; + //! Is this a simulated mouse event generated by the engine itself? + bool Simulated : 1; + //! A bitmap of button states. You can use isButtonPressed() to determine //! if a button is pressed or not. u32 ButtonStates; @@ -347,9 +350,6 @@ struct SEvent //! Type of mouse event EMOUSE_INPUT_EVENT Event; - - //! Is this a simulated mouse event generated by Minetest itself? - bool Simulated; }; //! Any kind of keyboard event. @@ -543,8 +543,9 @@ struct SEvent }; SEvent() { - // would be left uninitialized in many places otherwise - MouseInput.Simulated = false; + EventType = static_cast(0); + // zero the biggest union member we have, which clears all others too + memset(&JoystickEvent, 0, sizeof(JoystickEvent)); } }; diff --git a/irr/src/CIrrDeviceLinux.cpp b/irr/src/CIrrDeviceLinux.cpp index 8538c05d1..f20be36f7 100644 --- a/irr/src/CIrrDeviceLinux.cpp +++ b/irr/src/CIrrDeviceLinux.cpp @@ -1581,7 +1581,6 @@ bool CIrrDeviceLinux::activateJoysticks(core::array &joystickInfo fcntl(info.fd, F_SETFL, O_NONBLOCK); #endif - (void)memset(&info.persistentData, 0, sizeof(info.persistentData)); info.persistentData.EventType = irr::EET_JOYSTICK_INPUT_EVENT; info.persistentData.JoystickEvent.Joystick = ActiveJoysticks.size(); diff --git a/src/gui/guiTable.cpp b/src/gui/guiTable.cpp index 6c1ea91b2..0c10a2b64 100644 --- a/src/gui/guiTable.cpp +++ b/src/gui/guiTable.cpp @@ -1107,7 +1107,6 @@ void GUITable::sendTableEvent(s32 column, bool doubleclick) m_sel_doubleclick = doubleclick; if (Parent) { SEvent e; - memset(&e, 0, sizeof e); e.EventType = EET_GUI_EVENT; e.GUIEvent.Caller = this; e.GUIEvent.Element = 0; From ba370d984146ee5041dbf46b256be76d19577608 Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Sat, 2 Nov 2024 20:40:33 +0000 Subject: [PATCH 101/178] Use content.luanti.org (#15360) --- .github/ISSUE_TEMPLATE/bug_report.yaml | 3 ++- .github/ISSUE_TEMPLATE/config.yml | 2 +- .github/ISSUE_TEMPLATE/feature_request.yaml | 2 +- builtin/settingtypes.txt | 4 ++-- src/defaultsettings.cpp | 2 +- src/main.cpp | 4 +++- 6 files changed, 10 insertions(+), 7 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yaml b/.github/ISSUE_TEMPLATE/bug_report.yaml index aab024d7d..828d29b59 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yaml +++ b/.github/ISSUE_TEMPLATE/bug_report.yaml @@ -6,8 +6,9 @@ body: attributes: value: | Please note the following: + 1. **Please update Luanti to the latest stable or dev version** before submitting bug reports. Make sure the bug is still reproducible on the latest version. - 2. This page is for reporting the bugs of **the engine itself**. For bugs in a particular game, please [search for the game in the ContentDB](https://content.minetest.net/packages/?type=game) and submit a bug report in their issue trackers. + 2. This page is for reporting the bugs of **the engine itself**. For bugs in a particular game, please [search for the game in the ContentDB](https://content.luanti.org/packages/?type=game) and submit a bug report in their issue trackers. * For example, you can submit issues about the Minetest Game [in its own repository](https://github.com/minetest/minetest_game/issues). 3. Please provide as many details as possible for us to spot the problem quicker. - type: textarea diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 414391773..502e8e1d7 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -4,5 +4,5 @@ contact_links: url: https://github.com/minetest/minetest_game/issues/new/choose about: Only submit issues of the engine in this repository's issue tracker. Submit those of Minetest Game in its own issue tracker. - name: Search for issue trackers of third-party games - url: https://content.minetest.net/packages/?type=game + url: https://content.luanti.org/packages/?type=game about: For issues of third-party games, search for the game in the ContentDB and then submit an issue in their issue tracker. diff --git a/.github/ISSUE_TEMPLATE/feature_request.yaml b/.github/ISSUE_TEMPLATE/feature_request.yaml index 5a16b24fe..265fea67f 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yaml +++ b/.github/ISSUE_TEMPLATE/feature_request.yaml @@ -7,7 +7,7 @@ body: value: | Please note the following: 1. Only submit a feature request if the feature does not exist on the latest dev version. - 2. This page is for suggesting changes to **the engine itself**. To suggest changes to games, please [search for the game in the ContentDB](https://content.minetest.net/packages/?type=game) and submit a feature request in their issue trackers. + 2. This page is for suggesting changes to **the engine itself**. To suggest changes to games, please [search for the game in the ContentDB](https://content.luanti.org/packages/?type=game) and submit a feature request in their issue trackers. - type: textarea attributes: label: Problem diff --git a/builtin/settingtypes.txt b/builtin/settingtypes.txt index ec739b700..a5b6d6303 100644 --- a/builtin/settingtypes.txt +++ b/builtin/settingtypes.txt @@ -762,7 +762,7 @@ chat_font_size (Chat font size) int 0 0 72 [**Content Repository] # The URL for the content repository -contentdb_url (ContentDB URL) string https://content.minetest.net +contentdb_url (ContentDB URL) string https://content.luanti.org # If enabled and you have ContentDB packages installed, Luanti may contact ContentDB to # check for package updates when opening the mainmenu. @@ -773,7 +773,7 @@ contentdb_enable_updates_indicator (Enable updates available indicator on conten # as defined by the Free Software Foundation. # You can also specify content ratings. # These flags are independent from Luanti versions, -# so see a full list at https://content.minetest.net/help/content_flags/ +# so see a full list at https://content.luanti.org/help/content_flags/ contentdb_flag_blacklist (ContentDB Flag Blacklist) string nonfree, desktop_default # Maximum number of concurrent downloads. Downloads exceeding this limit will be queued. diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index 4d9120fd1..67622024b 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -397,7 +397,7 @@ void set_default_settings() settings->setDefault("chat_font_size", "0"); // Default "font_size" // ContentDB - settings->setDefault("contentdb_url", "https://content.minetest.net"); + settings->setDefault("contentdb_url", "https://content.luanti.org"); settings->setDefault("contentdb_enable_updates_indicator", "true"); settings->setDefault("contentdb_max_concurrent_downloads", "3"); diff --git a/src/main.cpp b/src/main.cpp index 97ba63033..6d30b2f07 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1015,10 +1015,12 @@ static bool determine_subgame(GameParams *game_params) infostream << "Using commanded gameid [" << gamespec.id << "]" << std::endl; } else { if (game_params->is_dedicated_server) { + std::string contentdb_url = g_settings->get("contentdb_url"); + // If this is a dedicated server and no gamespec has been specified, // print a friendly error pointing to ContentDB. errorstream << "To run a " PROJECT_NAME_C " server, you need to select a game using the '--gameid' argument." << std::endl - << "Check out https://content.minetest.net for a selection of games to pick from and download." << std::endl; + << "Check out " << contentdb_url << " for a selection of games to pick from and download." << std::endl; } return false; From e952a0807b85e089eaa320cfeb09e33816d141ed Mon Sep 17 00:00:00 2001 From: sfan5 Date: Sat, 2 Nov 2024 21:40:45 +0100 Subject: [PATCH 102/178] Use servers.luanti.org (#15369) --- builtin/settingtypes.txt | 8 ++++---- src/defaultsettings.cpp | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/builtin/settingtypes.txt b/builtin/settingtypes.txt index a5b6d6303..728eaf425 100644 --- a/builtin/settingtypes.txt +++ b/builtin/settingtypes.txt @@ -789,7 +789,7 @@ contentdb_max_concurrent_downloads (ContentDB Max Concurrent Downloads) int 3 1 enable_local_map_saving (Saving map received from server) bool false # URL to the server list displayed in the Multiplayer Tab. -serverlist_url (Serverlist URL) string servers.minetest.net +serverlist_url (Serverlist URL) string servers.luanti.org # If enabled, account registration is separate from login in the UI. # If disabled, new accounts will be registered automatically when logging in. @@ -815,10 +815,10 @@ server_name (Server name) string Luanti server server_description (Server description) string mine here # Domain name of server, to be displayed in the serverlist. -server_address (Server address) string game.minetest.net +server_address (Server address) string game.example.net # Homepage of server, to be displayed in the serverlist. -server_url (Server URL) string https://minetest.net +server_url (Server URL) string https://game.example.net # Automatically report to the serverlist. server_announce (Announce server) bool false @@ -827,7 +827,7 @@ server_announce (Announce server) bool false server_announce_send_players (Send player names to the server list) bool true # Announce to this serverlist. -serverlist_url (Serverlist URL) string servers.minetest.net +serverlist_url (Serverlist URL) string servers.luanti.org # Message of the day displayed to players connecting. motd (Message of the day) string diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index 67622024b..7758c96bf 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -78,7 +78,7 @@ void set_default_settings() settings->setDefault("language", ""); settings->setDefault("name", ""); settings->setDefault("bind_address", ""); - settings->setDefault("serverlist_url", "servers.minetest.net"); + settings->setDefault("serverlist_url", "servers.luanti.org"); // Client settings->setDefault("address", ""); From 0e06590ffda8e701c30b731f09466e55ab4ecad4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lars=20M=C3=BCller?= <34514239+appgurueu@users.noreply.github.com> Date: Sun, 3 Nov 2024 15:09:47 +0100 Subject: [PATCH 103/178] Apply "and" to server list & content search terms (#15365) --- builtin/mainmenu/content/contentdb.lua | 32 ++++++++++++++------------ builtin/mainmenu/tab_online.lua | 32 +++++++++----------------- 2 files changed, 28 insertions(+), 36 deletions(-) diff --git a/builtin/mainmenu/content/contentdb.lua b/builtin/mainmenu/content/contentdb.lua index 1c09ac9c4..c352a260b 100644 --- a/builtin/mainmenu/content/contentdb.lua +++ b/builtin/mainmenu/content/contentdb.lua @@ -563,30 +563,32 @@ function contentdb.filter_packages(query, by_type) end local keywords = {} - for word in query:lower():gmatch("%S+") do - table.insert(keywords, word) + for word in query:gmatch("%S+") do + table.insert(keywords, word:lower()) + end + + local function contains_all_keywords(str) + str = str:lower() + for _, keyword in ipairs(keywords) do + if not str:find(keyword, 1, true) then + return false + end + end + return true end local function matches_keywords(package) - for k = 1, #keywords do - local keyword = keywords[k] - - if string.find(package.name:lower(), keyword, 1, true) or - string.find(package.title:lower(), keyword, 1, true) or - string.find(package.author:lower(), keyword, 1, true) or - string.find(package.short_description:lower(), keyword, 1, true) then - return true - end - end - - return false + return contains_all_keywords(package.name) or + contains_all_keywords(package.title) or + contains_all_keywords(package.author) or + contains_all_keywords(package.short_description) end contentdb.packages = {} for _, package in pairs(contentdb.packages_full) do if (query == "" or matches_keywords(package)) and (by_type == nil or package.type == by_type) then - contentdb.packages[#contentdb.packages + 1] = package + table.insert(contentdb.packages, package) end end end diff --git a/builtin/mainmenu/tab_online.lua b/builtin/mainmenu/tab_online.lua index 8674d908a..a73b863ce 100644 --- a/builtin/mainmenu/tab_online.lua +++ b/builtin/mainmenu/tab_online.lua @@ -195,8 +195,7 @@ local function search_server_list(input) -- setup the keyword list local keywords = {} for word in input:gmatch("%S+") do - word = word:gsub("(%W)", "%%%1") - table.insert(keywords, word) + table.insert(keywords, word:lower()) end if #keywords == 0 then @@ -207,26 +206,17 @@ local function search_server_list(input) -- Search the serverlist local search_result = {} - for i = 1, #serverlistmgr.servers do - local server = serverlistmgr.servers[i] - local found = 0 - for k = 1, #keywords do - local keyword = keywords[k] - if server.name then - local sername = server.name:lower() - local _, count = sername:gsub(keyword, keyword) - found = found + count * 4 - end - - if server.description then - local desc = server.description:lower() - local _, count = desc:gsub(keyword, keyword) - found = found + count * 2 - end + for i, server in ipairs(serverlistmgr.servers) do + local name_matches, description_matches = true, true + for _, keyword in ipairs(keywords) do + name_matches = name_matches and not not + (server.name or ""):lower():find(keyword, 1, true) + description_matches = description_matches and not not + (server.description or ""):lower():find(keyword, 1, true) end - if found > 0 then - local points = (#serverlistmgr.servers - i) / 5 + found - server.points = points + if name_matches or description_matches then + server.points = #serverlistmgr.servers - i + + (name_matches and 50 or 0) table.insert(search_result, server) end end From 3064f3ccb769df03ef693bf8ce464481a627512a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lars=20M=C3=BCller?= <34514239+appgurueu@users.noreply.github.com> Date: Sun, 3 Nov 2024 15:10:21 +0100 Subject: [PATCH 104/178] Fix model[] being lit wrongly if shaders are disabled (#15364) --- src/client/content_cao.cpp | 3 +++ src/gui/guiScene.cpp | 7 +++++++ 2 files changed, 10 insertions(+) diff --git a/src/client/content_cao.cpp b/src/client/content_cao.cpp index 5d98f3fe8..5a8e1222f 100644 --- a/src/client/content_cao.cpp +++ b/src/client/content_cao.cpp @@ -917,6 +917,9 @@ void GenericCAO::setNodeLight(const video::SColor &light_color) return; setColorParam(node, light_color); } else { + // TODO refactor vertex colors to be separate from the other vertex attributes + // instead of mutating meshes / buffers for everyone via setMeshColor. + // (Note: There are a couple more places here where setMeshColor is used.) if (m_meshnode) { setMeshColor(m_meshnode->getMesh(), light_color); } else if (m_animated_meshnode) { diff --git a/src/gui/guiScene.cpp b/src/gui/guiScene.cpp index a41cf0782..f30c4f3d1 100644 --- a/src/gui/guiScene.cpp +++ b/src/gui/guiScene.cpp @@ -9,6 +9,8 @@ #include #include "IAttributes.h" #include "porting.h" +#include "client/mesh.h" +#include "settings.h" GUIScene::GUIScene(gui::IGUIEnvironment *env, scene::ISceneManager *smgr, gui::IGUIElement *parent, core::recti rect, s32 id) @@ -96,6 +98,11 @@ void GUIScene::draw() if (m_inf_rot) rotateCamera(v3f(0.f, -0.03f * (float)dtime_ms, 0.f)); + // HACK restore mesh vertex colors to full brightness: + // They may have been mutated in entity rendering code before. + if (!g_settings->getBool("enable_shaders")) + setMeshColor(m_mesh->getMesh(), irr::video::SColor(0xFFFFFFFF)); + m_smgr->drawAll(); if (m_initial_rotation && m_mesh) { From c884e7181fd6cc0e19e9c5abb4dce102f1485233 Mon Sep 17 00:00:00 2001 From: SmallJoker Date: Sun, 3 Nov 2024 15:10:39 +0100 Subject: [PATCH 105/178] JsonCPP: restore '1.0.0+' compatibility (#15368) Previously, compiling on Ubuntu 20.04 would fail with the system-provided JsonCPP version (1.7.4). Which would satisfy the documented requirement of "1.0.0+". --- CMakeLists.txt | 2 +- lib/tiniergltf/tiniergltf.hpp | 9 ++++++++- src/script/common/c_content.cpp | 10 +--------- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index df45fb9d8..282fea4df 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -277,7 +277,7 @@ endif() # Library pack find_package(GMP REQUIRED) -find_package(Json REQUIRED) +find_package(Json 1.0.0 REQUIRED) find_package(Lua REQUIRED) if(NOT USE_LUAJIT) add_subdirectory(lib/bitop) diff --git a/lib/tiniergltf/tiniergltf.hpp b/lib/tiniergltf/tiniergltf.hpp index 35440f5dd..06e2f5356 100644 --- a/lib/tiniergltf/tiniergltf.hpp +++ b/lib/tiniergltf/tiniergltf.hpp @@ -13,10 +13,17 @@ #include #include #include +#include // unique_ptr #include #include #include +#if JSONCPP_VERSION_HEXA < 0x01090000 /* 1.9.0 */ +namespace Json { + using String = JSONCPP_STRING; // Polyfill +} +#endif + namespace tiniergltf { static inline void check(bool cond) { @@ -1381,7 +1388,7 @@ static Json::Value readJson(Span span) { Json::CharReaderBuilder builder; const std::unique_ptr reader(builder.newCharReader()); Json::Value json; - JSONCPP_STRING err; + Json::String err; if (!reader->parse(span.ptr, span.end(), &json, &err)) throw std::runtime_error(std::string("invalid JSON: ") + err); return json; diff --git a/src/script/common/c_content.cpp b/src/script/common/c_content.cpp index 5355668f0..6367e53f3 100644 --- a/src/script/common/c_content.cpp +++ b/src/script/common/c_content.cpp @@ -2048,9 +2048,6 @@ bool read_tree_def(lua_State *L, int idx, const NodeDefManager *ndef, } /******************************************************************************/ -#if defined(JSONCPP_STRING) || !(JSONCPP_VERSION_MAJOR < 1 || JSONCPP_VERSION_MINOR < 9) -#define HAVE_JSON_STRING -#endif // Returns depth of json value tree static int push_json_value_getdepth(const Json::Value &value) @@ -2079,13 +2076,8 @@ static bool push_json_value_helper(lua_State *L, const Json::Value &value, lua_pushnumber(L, value.asDouble()); break; case Json::stringValue: { -#ifdef HAVE_JSON_STRING const auto &str = value.asString(); lua_pushlstring(L, str.c_str(), str.size()); -#else - const char *str = value.asCString(); - lua_pushstring(L, str ? str : ""); -#endif break; } case Json::booleanValue: @@ -2101,7 +2093,7 @@ static bool push_json_value_helper(lua_State *L, const Json::Value &value, case Json::objectValue: lua_createtable(L, 0, value.size()); for (auto it = value.begin(); it != value.end(); ++it) { -#ifdef HAVE_JSON_STRING +#if JSONCPP_VERSION_HEXA >= 0x01060000 /* 1.6.0 */ const auto &str = it.name(); lua_pushlstring(L, str.c_str(), str.size()); #else From 9982c563730f294d404119a2b8ffe26073134884 Mon Sep 17 00:00:00 2001 From: veprogames <75524847+veprogames@users.noreply.github.com> Date: Sun, 3 Nov 2024 15:10:58 +0100 Subject: [PATCH 106/178] Replace occurences of 'forum.minetest.net' with 'forum.luanti.org' (#15372) --- README.md | 2 +- builtin/mainmenu/content/dlg_package.lua | 2 +- doc/direction.md | 4 ++-- src/mapgen/mapgen_valleys.cpp | 2 +- src/mapgen/mapgen_valleys.h | 2 +- src/porting.cpp | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 326eedd87..9eecbfc19 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ Further documentation ---------------------- - Website: https://www.minetest.net/ - Wiki: https://wiki.minetest.net/ -- Forum: https://forum.minetest.net/ +- Forum: https://forum.luanti.org/ - GitHub: https://github.com/minetest/minetest/ - [Developer documentation](doc/developing/) - [doc/](doc/) directory of source distribution diff --git a/builtin/mainmenu/content/dlg_package.lua b/builtin/mainmenu/content/dlg_package.lua index 4eb465236..a92b55ba9 100644 --- a/builtin/mainmenu/content/dlg_package.lua +++ b/builtin/mainmenu/content/dlg_package.lua @@ -52,7 +52,7 @@ local function get_formspec(data) end if info.forums then - info.forums = "https://forum.minetest.net/viewtopic.php?t=" .. info.forums + info.forums = "https://forum.luanti.org/viewtopic.php?t=" .. info.forums end assert(data.package.name == info.name) diff --git a/doc/direction.md b/doc/direction.md index b3ba5871a..85b44f57c 100644 --- a/doc/direction.md +++ b/doc/direction.md @@ -6,9 +6,9 @@ The long-term roadmaps, aims, and guiding philosophies are set out using the following documents: * [What is Minetest?](http://c55.me/blog/?p=1491) -* [celeron55's roadmap](https://forum.minetest.net/viewtopic.php?t=9177) +* [celeron55's roadmap](https://forum.luanti.org/viewtopic.php?t=9177) * [celeron55's comment in "A clear mission statement for Minetest is missing"](https://github.com/minetest/minetest/issues/3476#issuecomment-167399287) -* [Core developer to-do/wish lists](https://forum.minetest.net/viewforum.php?f=7) +* [Core developer to-do/wish lists](https://forum.luanti.org/viewforum.php?f=7) ## 2. Medium-term Roadmap diff --git a/src/mapgen/mapgen_valleys.cpp b/src/mapgen/mapgen_valleys.cpp index 4825ad754..196454642 100644 --- a/src/mapgen/mapgen_valleys.cpp +++ b/src/mapgen/mapgen_valleys.cpp @@ -5,7 +5,7 @@ Copyright (C) 2016-2019 Duane Robertson Copyright (C) 2016-2019 paramat Based on Valleys Mapgen by Gael de Sailly -(https://forum.minetest.net/viewtopic.php?f=9&t=11430) +(https://forum.luanti.org/viewtopic.php?f=9&t=11430) and mapgen_v7, mapgen_flat by kwolekr and paramat. Licensing changed by permission of Gael de Sailly. diff --git a/src/mapgen/mapgen_valleys.h b/src/mapgen/mapgen_valleys.h index 3f8266ecc..c0e3bd129 100644 --- a/src/mapgen/mapgen_valleys.h +++ b/src/mapgen/mapgen_valleys.h @@ -5,7 +5,7 @@ Copyright (C) 2016-2019 Duane Robertson Copyright (C) 2016-2019 paramat Based on Valleys Mapgen by Gael de Sailly -(https://forum.minetest.net/viewtopic.php?f=9&t=11430) +(https://forum.luanti.org/viewtopic.php?f=9&t=11430) and mapgen_v7, mapgen_flat by kwolekr and paramat. Licensing changed by permission of Gael de Sailly. diff --git a/src/porting.cpp b/src/porting.cpp index 93b410bcc..f0e2bee0b 100644 --- a/src/porting.cpp +++ b/src/porting.cpp @@ -932,7 +932,7 @@ double perf_freq = get_perf_freq(); * This appears to be a combination of unfortunate allocation order/fragmentation * and the fact that glibc does not call madvise(MADV_DONTNEED) on its own. * Some other allocators were also affected, jemalloc and musl libc were not. - * read more: + * read more: * * As a workaround we track freed memory coarsely and call malloc_trim() once a * certain amount is reached. From 294a30e445ec9cd94d66efc8f94048606716ad35 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Sun, 3 Nov 2024 19:27:08 +0100 Subject: [PATCH 107/178] Fix ScriptApiSecurity::checkPath mangling non-existent paths bug introduced in 1c1c97cbd1d7913ac12bf550ec02c97f843a0fd3 --- src/script/cpp_api/s_security.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/script/cpp_api/s_security.cpp b/src/script/cpp_api/s_security.cpp index 0d3209985..b23e94cd2 100644 --- a/src/script/cpp_api/s_security.cpp +++ b/src/script/cpp_api/s_security.cpp @@ -555,7 +555,7 @@ bool ScriptApiSecurity::checkPath(lua_State *L, const char *path, // by the operating system anyways. return false; } - removed.append(component).append(removed.empty() ? "" : DIR_DELIM + removed); + removed = component + (removed.empty() ? "" : DIR_DELIM + removed); abs_path = fs::AbsolutePath(cur_path); } if (abs_path.empty()) From db0496469706f2abf81f2b95c7fb35297a00e447 Mon Sep 17 00:00:00 2001 From: veprogames <75524847+veprogames@users.noreply.github.com> Date: Sun, 3 Nov 2024 11:01:46 +0100 Subject: [PATCH 108/178] Content browser: Fix broken forum URLs Repeated prepending would break these URLs. This fix uses the freshly added `forum_url` field directly. --- builtin/mainmenu/content/dlg_package.lua | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/builtin/mainmenu/content/dlg_package.lua b/builtin/mainmenu/content/dlg_package.lua index a92b55ba9..7edbf678f 100644 --- a/builtin/mainmenu/content/dlg_package.lua +++ b/builtin/mainmenu/content/dlg_package.lua @@ -51,10 +51,6 @@ local function get_formspec(data) return end - if info.forums then - info.forums = "https://forum.luanti.org/viewtopic.php?t=" .. info.forums - end - assert(data.package.name == info.name) data.info = info ui.update() @@ -194,7 +190,7 @@ local function get_formspec(data) add_link_button(fgettext("Source"), "repo") add_link_button(fgettext("Issue Tracker"), "issue_tracker") add_link_button(fgettext("Translate"), "translation_url") - add_link_button(fgettext("Forum Topic"), "forums") + add_link_button(fgettext("Forum Topic"), "forum_url") hypertext = hypertext .. "\n\n" .. info.long_description.body From 1fa4ca7c59e0d755f0579353f672b26003ec1583 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lars=20M=C3=BCller?= <34514239+appgurueu@users.noreply.github.com> Date: Wed, 6 Nov 2024 20:06:39 +0100 Subject: [PATCH 109/178] Switch to a more neutral ASCII art banner (#15356) --- src/server.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/server.cpp b/src/server.cpp index c9d96fa34..46bc31ae7 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -572,12 +572,11 @@ 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) { From 60cd1e452957e2e924eedf9de6b46f6eb7833ccc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=86lla=20Chiana=20Moskopp?= Date: Tue, 5 Nov 2024 22:07:24 +0100 Subject: [PATCH 110/178] Correctly render transparency in TGA type 1 with color format A1R5G5B5 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The branch removed in this patch handled color format A1R5G5B5 specially when creating a texture from a TGA type 1 file, i.e. an image that has a colormap. It did not handle the 1-bit alpha channel correctly, rendering transparent pixels black instead. Since the colormap is converted to A8R8G8B8 earlier anyways, the code for the general case is able to handle this scenario already – at the expense of making the created texture use twice as much GPU memory as necessary. --- irr/src/CImageLoaderTGA.cpp | 31 ++++++++++--------------------- 1 file changed, 10 insertions(+), 21 deletions(-) diff --git a/irr/src/CImageLoaderTGA.cpp b/irr/src/CImageLoaderTGA.cpp index 1fd5dddc8..274b15543 100644 --- a/irr/src/CImageLoaderTGA.cpp +++ b/irr/src/CImageLoaderTGA.cpp @@ -181,27 +181,16 @@ IImage *CImageLoaderTGA::loadImage(io::IReadFile *file) const header.ImageWidth, header.ImageHeight, 0, 0, (header.ImageDescriptor & 0x20) == 0); } else { - switch (header.ColorMapEntrySize) { - case 16: - image = new CImage(ECF_A1R5G5B5, core::dimension2d(header.ImageWidth, header.ImageHeight)); - if (image) - CColorConverter::convert8BitTo16Bit((u8 *)data, - (s16 *)image->getData(), - header.ImageWidth, header.ImageHeight, - (s32 *)palette, 0, - (header.ImageDescriptor & 0x20) == 0); - break; - // Note: 24 bit with palette would need a 24 bit palette, too lazy doing that now (textures will prefer 32-bit later anyway) - default: - image = new CImage(ECF_A8R8G8B8, core::dimension2d(header.ImageWidth, header.ImageHeight)); - if (image) - CColorConverter::convert8BitTo32Bit((u8 *)data, - (u8 *)image->getData(), - header.ImageWidth, header.ImageHeight, - (u8 *)palette, 0, - (header.ImageDescriptor & 0x20) == 0); - break; - } + // Colormap is converted to A8R8G8B8 at this point – thus the code can handle all color formats. + // This wastes some texture memory, but is less of a third of the code that does this optimally. + // If you want to refactor this: The possible color formats here are A1R5G5B5, B8G8R8, B8G8R8A8. + image = new CImage(ECF_A8R8G8B8, core::dimension2d(header.ImageWidth, header.ImageHeight)); + if (image) + CColorConverter::convert8BitTo32Bit((u8 *)data, + (u8 *)image->getData(), + header.ImageWidth, header.ImageHeight, + (u8 *)palette, 0, + (header.ImageDescriptor & 0x20) == 0); } } break; case 16: From bafc4779199a0544303290efa7be82ba1be9d5ee Mon Sep 17 00:00:00 2001 From: grorp Date: Fri, 8 Nov 2024 11:17:15 +0100 Subject: [PATCH 111/178] Revert "2D rendering: Enable bilinear filter for downscaling textures" (#15385) This reverts commit minetest/irrlicht@fb7a0e4298356a2d339c5ebf23152b441dc06a8f. --- irr/src/CNullDriver.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/irr/src/CNullDriver.cpp b/irr/src/CNullDriver.cpp index c7b296b57..74e8cb0f4 100644 --- a/irr/src/CNullDriver.cpp +++ b/irr/src/CNullDriver.cpp @@ -108,9 +108,7 @@ CNullDriver::CNullDriver(io::IFileSystem *io, const core::dimension2d &scre InitMaterial2D.ZBuffer = video::ECFN_DISABLED; InitMaterial2D.UseMipMaps = false; InitMaterial2D.forEachTexture([](auto &tex) { - // Using ETMINF_LINEAR_MIPMAP_NEAREST (bilinear) for 2D graphics looks - // much better and doesn't have any downsides (e.g. regarding pixel art). - tex.MinFilter = video::ETMINF_LINEAR_MIPMAP_NEAREST; + tex.MinFilter = video::ETMINF_NEAREST_MIPMAP_NEAREST; tex.MagFilter = video::ETMAGF_NEAREST; tex.TextureWrapU = video::ETC_REPEAT; tex.TextureWrapV = video::ETC_REPEAT; From fced6ff2401dfb0504064ee164bc625eac49c4b9 Mon Sep 17 00:00:00 2001 From: grorp Date: Thu, 7 Nov 2024 20:43:05 +0100 Subject: [PATCH 112/178] Fix ECF_D32 support in ogles2 video driver OES_depth32 only talks about support for render buffers, not textures, so it's not relevant here: https://github.com/KhronosGroup/OpenGL-Registry/blob/main/extensions/OES/OES_depth32.txt This fixes the scene being black with "video_driver = ogles2" and "enable_post_processing = true" on my desktop computer. --- irr/src/OpenGLES2/Driver.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/irr/src/OpenGLES2/Driver.cpp b/irr/src/OpenGLES2/Driver.cpp index 249b6caef..9a99601fd 100644 --- a/irr/src/OpenGLES2/Driver.cpp +++ b/irr/src/OpenGLES2/Driver.cpp @@ -57,8 +57,12 @@ void COpenGLES2Driver::initFeatures() else if (FeatureAvailable[IRR_GL_APPLE_texture_format_BGRA8888]) TextureFormats[ECF_A8R8G8B8] = {BGRA8_EXT, GL_BGRA, GL_UNSIGNED_BYTE}; - if (FeatureAvailable[IRR_GL_OES_depth32]) - TextureFormats[ECF_D32] = {GL_DEPTH_COMPONENT32, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT}; + // OpenGL ES 3 doesn't include a GL_DEPTH_COMPONENT32, so still use + // OES_depth_texture for 32-bit depth texture support. + // OpenGL ES 3 would allow {GL_DEPTH_COMPONENT32F, GL_DEPTH_COMPONENT, GL_FLOAT}, + // but I guess that would have to be called ECF_D32F... + if (FeatureAvailable[IRR_GL_OES_depth_texture]) + TextureFormats[ECF_D32] = {GL_DEPTH_COMPONENT, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT}; } else { // NOTE These are *texture* formats. They may or may not be suitable // for render targets. The specs only talks on *sized* formats for the @@ -98,8 +102,9 @@ void COpenGLES2Driver::initFeatures() if (FeatureAvailable[IRR_GL_OES_depth_texture]) { TextureFormats[ECF_D16] = {GL_DEPTH_COMPONENT, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT}; - if (FeatureAvailable[IRR_GL_OES_depth32]) - TextureFormats[ECF_D32] = {GL_DEPTH_COMPONENT, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT}; + // OES_depth_texture includes 32-bit depth texture support. + TextureFormats[ECF_D32] = {GL_DEPTH_COMPONENT, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT}; + if (FeatureAvailable[IRR_GL_OES_packed_depth_stencil]) TextureFormats[ECF_D24S8] = {GL_DEPTH_STENCIL, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8}; } From 50b75233364c89235ec2f8f77fb54767a228e395 Mon Sep 17 00:00:00 2001 From: grorp Date: Thu, 7 Nov 2024 20:12:37 +0100 Subject: [PATCH 113/178] ogles 2 driver: Delete some dead code grepping for IRR_COMPILE_GLES2_COMMON gives no other results COGLESCoreExtensionHandler is only used through COpenGL3ExtensionHandler --- irr/src/COGLESCoreExtensionHandler.h | 92 +--------------------------- irr/src/COpenGLCoreTexture.h | 1 + 2 files changed, 2 insertions(+), 91 deletions(-) diff --git a/irr/src/COGLESCoreExtensionHandler.h b/irr/src/COGLESCoreExtensionHandler.h index 4c691aaf9..80a7bb061 100644 --- a/irr/src/COGLESCoreExtensionHandler.h +++ b/irr/src/COGLESCoreExtensionHandler.h @@ -24,39 +24,21 @@ public: enum EOGLESFeatures { // If you update this enum also update the corresponding OGLESFeatureStrings string-array - IRR_GL_APPLE_texture_2D_limited_npot, IRR_GL_APPLE_texture_format_BGRA8888, IRR_GL_EXT_blend_minmax, - IRR_GL_EXT_read_format_bgra, - IRR_GL_EXT_texture_filter_anisotropic, IRR_GL_EXT_texture_format_BGRA8888, - IRR_GL_EXT_texture_lod_bias, IRR_GL_EXT_texture_rg, - IRR_GL_IMG_read_format, - IRR_GL_IMG_texture_format_BGRA8888, - IRR_GL_IMG_user_clip_plane, - IRR_GL_OES_blend_func_separate, - IRR_GL_OES_blend_subtract, IRR_GL_OES_depth_texture, - IRR_GL_OES_depth24, - IRR_GL_OES_depth32, IRR_GL_OES_element_index_uint, - IRR_GL_OES_framebuffer_object, IRR_GL_OES_packed_depth_stencil, - IRR_GL_OES_point_size_array, - IRR_GL_OES_point_sprite, - IRR_GL_OES_read_format, - IRR_GL_OES_stencil_wrap, IRR_GL_OES_texture_float, IRR_GL_OES_texture_half_float, - IRR_GL_OES_texture_mirrored_repeat, - IRR_GL_OES_texture_npot, IRR_OGLES_Feature_Count }; COGLESCoreExtensionHandler() : - Version(0), MaxAnisotropy(1), MaxIndices(0xffff), + MaxAnisotropy(1), MaxIndices(0xffff), MaxTextureSize(1), MaxTextureLODBias(0.f), StencilBuffer(false) { for (u32 i = 0; i < IRR_OGLES_Feature_Count; ++i) @@ -81,99 +63,27 @@ public: os::Printer::log(getFeatureString(i), FeatureAvailable[i] ? " true" : " false"); } - bool queryGLESFeature(EOGLESFeatures feature) const - { - return FeatureAvailable[feature]; - } - protected: const char *getFeatureString(size_t index) const { // One for each EOGLESFeatures static const char *const OGLESFeatureStrings[IRR_OGLES_Feature_Count] = { - "GL_APPLE_texture_2D_limited_npot", "GL_APPLE_texture_format_BGRA8888", "GL_EXT_blend_minmax", - "GL_EXT_read_format_bgra", - "GL_EXT_texture_filter_anisotropic", "GL_EXT_texture_format_BGRA8888", - "GL_EXT_texture_lod_bias", "GL_EXT_texture_rg", - "GL_IMG_read_format", - "GL_IMG_texture_format_BGRA8888", - "GL_IMG_user_clip_plane", - "GL_OES_blend_func_separate", - "GL_OES_blend_subtract", "GL_OES_depth_texture", - "GL_OES_depth24", - "GL_OES_depth32", "GL_OES_element_index_uint", - "GL_OES_framebuffer_object", "GL_OES_packed_depth_stencil", - "GL_OES_point_size_array", - "GL_OES_point_sprite", - "GL_OES_read_format", - "GL_OES_stencil_wrap", "GL_OES_texture_float", "GL_OES_texture_half_float", - "GL_OES_texture_mirrored_repeat", - "GL_OES_texture_npot", }; return OGLESFeatureStrings[index]; } - void getGLVersion() - { - Version = 0; - s32 multiplier = 100; - - core::stringc version(glGetString(GL_VERSION)); - - for (u32 i = 0; i < version.size(); ++i) { - if (version[i] >= '0' && version[i] <= '9') { - if (multiplier > 1) { - Version += static_cast(core::floor32(atof(&(version[i]))) * multiplier); - multiplier /= 10; - } else { - break; - } - } - } - } - - void getGLExtensions() - { - core::stringc extensions = glGetString(GL_EXTENSIONS); - os::Printer::log(extensions.c_str()); - - const u32 size = extensions.size() + 1; - c8 *str = new c8[size]; - strncpy(str, extensions.c_str(), extensions.size()); - str[extensions.size()] = ' '; - c8 *p = str; - - for (u32 i = 0; i < size; ++i) { - if (str[i] == ' ') { - str[i] = 0; - if (*p) - for (size_t j = 0; j < IRR_OGLES_Feature_Count; ++j) { - if (!strcmp(getFeatureString(j), p)) { - FeatureAvailable[j] = true; - break; - } - } - - p = p + strlen(p) + 1; - } - } - - delete[] str; - } - COpenGLCoreFeature Feature; - u16 Version; u8 MaxAnisotropy; u32 MaxIndices; u32 MaxTextureSize; diff --git a/irr/src/COpenGLCoreTexture.h b/irr/src/COpenGLCoreTexture.h index 95cac4c22..86ed4f73a 100644 --- a/irr/src/COpenGLCoreTexture.h +++ b/irr/src/COpenGLCoreTexture.h @@ -297,6 +297,7 @@ public: delete[] tmpBuffer; } #elif defined(IRR_COMPILE_GLES2_COMMON) + // TODO: revive this code COpenGLCoreTexture *tmpTexture = new COpenGLCoreTexture("OGL_CORE_LOCK_TEXTURE", Size, ETT_2D, ColorFormat, Driver); GLuint tmpFBO = 0; From cce4fe5a3fb574de20303b227ba4bedba5a57b7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lars=20M=C3=BCller?= <34514239+appgurueu@users.noreply.github.com> Date: Sat, 9 Nov 2024 17:57:37 +0100 Subject: [PATCH 114/178] Fix wrongly documented glTF frame number restriction The frame numbers can very well be floats since 06907aa --- doc/lua_api.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/doc/lua_api.md b/doc/lua_api.md index 6db358c85..864b4539b 100644 --- a/doc/lua_api.md +++ b/doc/lua_api.md @@ -312,9 +312,7 @@ due to their space savings. This means that many glTF features are not supported *yet*, including: * Animations - * Only a single animation is supported, - use frame ranges within this animation. - * Only integer frames are supported. + * Only a single animation is supported, use frame ranges within this animation. * Cameras * Materials * Only base color textures are supported From 77e78193a00c2591a1dcb01eef7a69e3bfa1549b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lars=20M=C3=BCller?= <34514239+appgurueu@users.noreply.github.com> Date: Sat, 9 Nov 2024 18:13:36 +0100 Subject: [PATCH 115/178] Fix `set_bone_override` documentation (#15353) --- doc/lua_api.md | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/doc/lua_api.md b/doc/lua_api.md index 864b4539b..e27964fc5 100644 --- a/doc/lua_api.md +++ b/doc/lua_api.md @@ -8244,7 +8244,13 @@ child will follow movement and rotation of that bone. object. * `set_detach()`: Detaches object. No-op if object was not attached. * `set_bone_position([bone, position, rotation])` - * Shorthand for `set_bone_override(bone, {position = position, rotation = rotation:apply(math.rad)})` using absolute values. + * Sets absolute bone overrides, e.g. it is equivalent to + ```lua + obj:set_bone_override(bone, { + position = {vec = position, absolute = true}, + rotation = {vec = rotation:apply(math.rad), absolute = true} + }) + ``` * **Note:** Rotation is in degrees, not radians. * **Deprecated:** Use `set_bone_override` instead. * `get_bone_position(bone)`: returns the previously set position and rotation of the bone @@ -8254,15 +8260,18 @@ child will follow movement and rotation of that bone. * `set_bone_override(bone, override)` * `bone`: string * `override`: `{ position = property, rotation = property, scale = property }` or `nil` - * `property`: `{ vec = vector, interpolation = 0, absolute = false}` or `nil`; - * `vec` is in the same coordinate system as the model, and in degrees for rotation - * `property = nil` is equivalent to no override on that property - * `absolute`: If set to `false`, the override will be relative to the animated property: - * Transposition in the case of `position`; - * Composition in the case of `rotation`; - * Multiplication in the case of `scale` - * `interpolation`: Old and new values are interpolated over this timeframe (in seconds) * `override = nil` (including omission) is shorthand for `override = {}` which clears the override + * Each `property` is a table of the form + `{ vec = vector, interpolation = 0, absolute = false }` or `nil` + * `vec` is in the same coordinate system as the model, and in radians for rotation. + It defaults to `vector.zero()` for translation and rotation and `vector.new(1, 1, 1)` for scale. + * `interpolation`: The old and new overrides are interpolated over this timeframe (in seconds). + * `absolute`: If set to `false` (which is the default), + the override will be relative to the animated property: + * Translation in the case of `position`; + * Composition in the case of `rotation`; + * Per-axis multiplication in the case of `scale` + * `property = nil` is equivalent to no override on that property * **Note:** Unlike `set_bone_position`, the rotation is in radians, not degrees. * Compatibility note: Clients prior to 5.9.0 only support absolute position and rotation. All values are treated as absolute and are set immediately (no interpolation). From 0391d91e5db3b3d0108b9851f09b4a556a57f59c Mon Sep 17 00:00:00 2001 From: Lars Mueller Date: Sat, 9 Nov 2024 17:25:56 +0100 Subject: [PATCH 116/178] Improve error messages for failed mesh loading --- irr/src/CGLTFMeshFileLoader.cpp | 2 +- irr/src/CSceneManager.cpp | 21 +++++++++++---------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/irr/src/CGLTFMeshFileLoader.cpp b/irr/src/CGLTFMeshFileLoader.cpp index e727b0410..fe67228a7 100644 --- a/irr/src/CGLTFMeshFileLoader.cpp +++ b/irr/src/CGLTFMeshFileLoader.cpp @@ -669,7 +669,7 @@ void SelfType::MeshExtractor::loadAnimation(const std::size_t animIdx) const auto &sampler = anim.samplers.at(channel.sampler); if (sampler.interpolation != tiniergltf::AnimationSampler::Interpolation::LINEAR) - throw std::runtime_error("unsupported interpolation"); + throw std::runtime_error("unsupported interpolation, only linear interpolation is supported"); const auto inputAccessor = Accessor::make(m_gltf_model, sampler.input); const auto n_frames = inputAccessor.getCount(); diff --git a/irr/src/CSceneManager.cpp b/irr/src/CSceneManager.cpp index c75a28a48..d75abc284 100644 --- a/irr/src/CSceneManager.cpp +++ b/irr/src/CSceneManager.cpp @@ -140,28 +140,29 @@ IAnimatedMesh *CSceneManager::getMesh(io::IReadFile *file) // load and create a mesh which we know already isn't in the cache and put it in there IAnimatedMesh *CSceneManager::getUncachedMesh(io::IReadFile *file, const io::path &filename, const io::path &cachename) { - IAnimatedMesh *msh = 0; - // iterate the list in reverse order so user-added loaders can override the built-in ones + + bool unsupported = true; for (auto it = MeshLoaderList.rbegin(); it != MeshLoaderList.rend(); it++) { if ((*it)->isALoadableFileExtension(filename)) { + unsupported = false; // reset file to avoid side effects of previous calls to createMesh file->seek(0); - msh = (*it)->createMesh(file); + IAnimatedMesh *msh = (*it)->createMesh(file); if (msh) { MeshCache->addMesh(cachename, msh); msh->drop(); - break; + os::Printer::log("Loaded mesh", filename, ELL_DEBUG); + return msh; } } } - if (!msh) - os::Printer::log("Could not load mesh, file format seems to be unsupported", filename, ELL_ERROR); - else - os::Printer::log("Loaded mesh", filename, ELL_DEBUG); - - return msh; + os::Printer::log(unsupported + ? "Could not load mesh, file format seems to be unsupported" + : "Attempt to load mesh failed", + filename, ELL_ERROR); + return nullptr; } //! returns the video driver From 4bb9c8c61b36b16720ead745d920d4a6ea5afe0e Mon Sep 17 00:00:00 2001 From: SmallJoker Date: Sun, 10 Nov 2024 13:20:30 +0100 Subject: [PATCH 117/178] Revert "Fix collisions with long dtime, in particular with bouncing" (#15400) This reverts commit cb6c8eb2f013edfe127ce18f760c432aee5aba01. --- src/collision.cpp | 257 +++++++++++++++++++++------------------------- 1 file changed, 119 insertions(+), 138 deletions(-) diff --git a/src/collision.cpp b/src/collision.cpp index 6bad618d8..dcb318b0f 100644 --- a/src/collision.cpp +++ b/src/collision.cpp @@ -70,14 +70,6 @@ inline v3f truncate(const v3f vec, const f32 factor) ); } -inline v3f rangelimv(const v3f vec, const f32 low, const f32 high) -{ - return v3f( - rangelim(vec.X, low, high), - rangelim(vec.Y, low, high), - rangelim(vec.Z, low, high) - ); -} } // Helper function: @@ -341,10 +333,6 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef, collisionMoveResult result; - // Assume no collisions when no velocity and no acceleration - if (*speed_f == v3f() && accel_f == v3f()) - return result; - /* Calculate new velocity */ @@ -359,19 +347,30 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef, time_notification_done = false; } - // Average speed - v3f aspeed_f = *speed_f + accel_f * 0.5f * dtime; - // Limit speed for avoiding hangs - aspeed_f = truncate(rangelimv(aspeed_f, -5000.0f, 5000.0f), 10000.0f); + v3f dpos_f = (*speed_f + accel_f * 0.5f * dtime) * dtime; + v3f newpos_f = *pos_f + dpos_f; + *speed_f += accel_f * dtime; - // Collect node boxes in movement range + // If the object is static, there are no collisions + if (dpos_f == v3f()) + return result; + + // Limit speed for avoiding hangs + speed_f->Y = rangelim(speed_f->Y, -5000, 5000); + speed_f->X = rangelim(speed_f->X, -5000, 5000); + speed_f->Z = rangelim(speed_f->Z, -5000, 5000); + + *speed_f = truncate(*speed_f, 10000.0f); + + /* + Collect node boxes in movement range + */ // cached allocation thread_local std::vector cinfo; cinfo.clear(); + { - // Movement if no collisions - v3f newpos_f = *pos_f + aspeed_f * dtime; v3f minpos_f( MYMIN(pos_f->X, newpos_f.X), MYMIN(pos_f->Y, newpos_f.Y) + 0.01f * BS, // bias rounding, player often at +/-n.5 @@ -397,16 +396,26 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef, } } - // Collect object boxes in movement range + /* + Collect object boxes in movement range + */ if (collide_with_objects) { - add_object_boxes(env, box_0, dtime, *pos_f, aspeed_f, self, cinfo); - } + add_object_boxes(env, box_0, dtime, *pos_f, *speed_f, self, cinfo); + } + + /* + Collision detection + */ - // Collision detection f32 d = 0.0f; - for (int loopcount = 0;; loopcount++) { + + int loopcount = 0; + + while(dtime > BS * 1e-10f) { + // Avoid infinite loop + loopcount++; if (loopcount >= 100) { - warningstream << "collisionMoveSimple: Loop count exceeded, aborting to avoid infinite loop" << std::endl; + warningstream << "collisionMoveSimple: Loop count exceeded, aborting to avoid infiniite loop" << std::endl; break; } @@ -418,7 +427,9 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef, f32 nearest_dtime = dtime; int nearest_boxindex = -1; - // Go through every nodebox, find nearest collision + /* + Go through every nodebox, find nearest collision + */ for (u32 boxindex = 0; boxindex < cinfo.size(); boxindex++) { const NearbyCollisionInfo &box_info = cinfo[boxindex]; // Ignore if already stepped up this nodebox. @@ -428,7 +439,8 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef, // Find nearest collision of the two boxes (raytracing-like) f32 dtime_tmp = nearest_dtime; CollisionAxis collided = axisAlignedCollision(box_info.box, - movingbox, aspeed_f, &dtime_tmp); + movingbox, *speed_f, &dtime_tmp); + if (collided == -1 || dtime_tmp >= nearest_dtime) continue; @@ -439,127 +451,96 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef, if (nearest_collided == COLLISION_AXIS_NONE) { // No collision with any collision box. - *pos_f += truncate(aspeed_f * dtime, 100.0f); - // Final speed: - *speed_f += accel_f * dtime; - // Limit speed for avoiding hangs - *speed_f = truncate(rangelimv(*speed_f, -5000.0f, 5000.0f), 10000.0f); - break; - } - // Otherwise, a collision occurred. - NearbyCollisionInfo &nearest_info = cinfo[nearest_boxindex]; - const aabb3f& cbox = nearest_info.box; + *pos_f += truncate(*speed_f * dtime, 100.0f); + dtime = 0; // Set to 0 to avoid "infinite" loop due to small FP numbers + } else { + // Otherwise, a collision occurred. + NearbyCollisionInfo &nearest_info = cinfo[nearest_boxindex]; + const aabb3f& cbox = nearest_info.box; - //movingbox except moved to the horizontal position it would be after step up - bool step_up = false; - if (nearest_collided != COLLISION_AXIS_Y) { + //movingbox except moved to the horizontal position it would be after step up aabb3f stepbox = movingbox; - // Look slightly ahead for checking the height when stepping - // to ensure we also check above the node we collided with - // otherwise, might allow glitches such as a stack of stairs - float extra_dtime = nearest_dtime + 0.1f * fabsf(dtime - nearest_dtime); - stepbox.MinEdge.X += aspeed_f.X * extra_dtime; - stepbox.MinEdge.Z += aspeed_f.Z * extra_dtime; - stepbox.MaxEdge.X += aspeed_f.X * extra_dtime; - stepbox.MaxEdge.Z += aspeed_f.Z * extra_dtime; + stepbox.MinEdge.X += speed_f->X * dtime; + stepbox.MinEdge.Z += speed_f->Z * dtime; + stepbox.MaxEdge.X += speed_f->X * dtime; + stepbox.MaxEdge.Z += speed_f->Z * dtime; // Check for stairs. - step_up = (movingbox.MinEdge.Y < cbox.MaxEdge.Y) && - (movingbox.MinEdge.Y + stepheight > cbox.MaxEdge.Y) && - (!wouldCollideWithCeiling(cinfo, stepbox, - cbox.MaxEdge.Y - movingbox.MinEdge.Y, - d)); - } + bool step_up = (nearest_collided != COLLISION_AXIS_Y) && // must not be Y direction + (movingbox.MinEdge.Y < cbox.MaxEdge.Y) && + (movingbox.MinEdge.Y + stepheight > cbox.MaxEdge.Y) && + (!wouldCollideWithCeiling(cinfo, stepbox, + cbox.MaxEdge.Y - movingbox.MinEdge.Y, + d)); - // Get bounce multiplier - float bounce = -(float)nearest_info.bouncy / 100.0f; + // Get bounce multiplier + float bounce = -(float)nearest_info.bouncy / 100.0f; - // Move to the point of collision and reduce dtime by nearest_dtime - if (nearest_dtime < 0) { - // Handle negative nearest_dtime - // This largely means an "instant" collision, e.g., with the floor. - // We use aspeed and nearest_dtime to be consistent with above and resolve this collision - if (!step_up) { - if (nearest_collided == COLLISION_AXIS_X) - pos_f->X += aspeed_f.X * nearest_dtime; - if (nearest_collided == COLLISION_AXIS_Y) - pos_f->Y += aspeed_f.Y * nearest_dtime; - if (nearest_collided == COLLISION_AXIS_Z) - pos_f->Z += aspeed_f.Z * nearest_dtime; - } - } else if (nearest_dtime > 0) { - // updated average speed for the sub-interval up to nearest_dtime - aspeed_f = *speed_f + accel_f * 0.5f * nearest_dtime; - *pos_f += truncate(aspeed_f * nearest_dtime, 100.0f); - // Speed at (approximated) collision: - *speed_f += accel_f * nearest_dtime; - // Limit speed for avoiding hangs - *speed_f = truncate(rangelimv(*speed_f, -5000.0f, 5000.0f), 10000.0f); - dtime -= nearest_dtime; - } - - bool is_collision = true; - if (nearest_info.is_unloaded) - is_collision = false; - - CollisionInfo info; - if (nearest_info.isObject()) - info.type = COLLISION_OBJECT; - else - info.type = COLLISION_NODE; - - info.node_p = nearest_info.position; - info.object = nearest_info.obj; - info.new_pos = *pos_f; - info.old_speed = *speed_f; - info.plane = nearest_collided; - - // Set the speed component that caused the collision to zero - if (step_up) { - // Special case: Handle stairs - nearest_info.is_step_up = true; - is_collision = false; - } else if (nearest_collided == COLLISION_AXIS_X) { - if (bounce < -1e-4 && fabsf(speed_f->X) > BS * 3) { - speed_f->X *= bounce; + // Move to the point of collision and reduce dtime by nearest_dtime + if (nearest_dtime < 0) { + // Handle negative nearest_dtime + if (!step_up) { + if (nearest_collided == COLLISION_AXIS_X) + pos_f->X += speed_f->X * nearest_dtime; + if (nearest_collided == COLLISION_AXIS_Y) + pos_f->Y += speed_f->Y * nearest_dtime; + if (nearest_collided == COLLISION_AXIS_Z) + pos_f->Z += speed_f->Z * nearest_dtime; + } } else { - speed_f->X = 0; - accel_f.X = 0; + *pos_f += truncate(*speed_f * nearest_dtime, 100.0f); + dtime -= nearest_dtime; } - result.collides = true; - } else if (nearest_collided == COLLISION_AXIS_Y) { - if(bounce < -1e-4 && fabsf(speed_f->Y) > BS * 3) { - speed_f->Y *= bounce; - } else { - speed_f->Y = 0; - accel_f.Y = 0; + + bool is_collision = true; + if (nearest_info.is_unloaded) + is_collision = false; + + CollisionInfo info; + if (nearest_info.isObject()) + info.type = COLLISION_OBJECT; + else + info.type = COLLISION_NODE; + + info.node_p = nearest_info.position; + info.object = nearest_info.obj; + info.new_pos = *pos_f; + info.old_speed = *speed_f; + info.plane = nearest_collided; + + // Set the speed component that caused the collision to zero + if (step_up) { + // Special case: Handle stairs + nearest_info.is_step_up = true; + is_collision = false; + } else if (nearest_collided == COLLISION_AXIS_X) { + if (fabs(speed_f->X) > BS * 3) + speed_f->X *= bounce; + else + speed_f->X = 0; + result.collides = true; + } else if (nearest_collided == COLLISION_AXIS_Y) { + if(fabs(speed_f->Y) > BS * 3) + speed_f->Y *= bounce; + else + speed_f->Y = 0; + result.collides = true; + } else if (nearest_collided == COLLISION_AXIS_Z) { + if (fabs(speed_f->Z) > BS * 3) + speed_f->Z *= bounce; + else + speed_f->Z = 0; + result.collides = true; } - result.collides = true; - } else if (nearest_collided == COLLISION_AXIS_Z) { - if (bounce < -1e-4 && fabsf(speed_f->Z) > BS * 3) { - speed_f->Z *= bounce; - } else { - speed_f->Z = 0; - accel_f.Z = 0; + + info.new_speed = *speed_f; + if (info.new_speed.getDistanceFrom(info.old_speed) < 0.1f * BS) + is_collision = false; + + if (is_collision) { + info.axis = nearest_collided; + result.collisions.push_back(std::move(info)); } - result.collides = true; } - - info.new_speed = *speed_f; - if (info.new_speed.getDistanceFrom(info.old_speed) < 0.1f * BS) - is_collision = false; - - if (is_collision) { - info.axis = nearest_collided; - result.collisions.push_back(info); - } - - if (dtime < BS * 1e-10f) - break; - - // Speed for finding the next collision - aspeed_f = *speed_f + accel_f * 0.5f * dtime; - // Limit speed for avoiding hangs - aspeed_f = truncate(rangelimv(aspeed_f, -5000.0f, 5000.0f), 10000.0f); } /* From 122b2d70d94bdd070bcb840e89d3b936f376f5ac Mon Sep 17 00:00:00 2001 From: sfan5 Date: Sat, 9 Nov 2024 12:12:01 +0100 Subject: [PATCH 118/178] Re-fix CAO mesh lighting with shaders disabled previously: 65af606729f7e3c162bf0b77a02570697f784c66 --- src/client/content_cao.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/client/content_cao.cpp b/src/client/content_cao.cpp index 5a8e1222f..16ceda4ec 100644 --- a/src/client/content_cao.cpp +++ b/src/client/content_cao.cpp @@ -741,7 +741,8 @@ void GenericCAO::addToScene(ITextureSource *tsrc, scene::ISceneManager *smgr) }); } else if (m_prop.visual == "mesh") { grabMatrixNode(); - scene::IAnimatedMesh *mesh = m_client->getMesh(m_prop.mesh, true); + // can't cache mesh if shaders disabled, since we modify vertices + scene::IAnimatedMesh *mesh = m_client->getMesh(m_prop.mesh, m_enable_shaders); if (mesh) { if (!checkMeshNormals(mesh)) { infostream << "GenericCAO: recalculating normals for mesh " From 7557a287e53a796e61c2287fda9c72a5ac1f32c6 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Sat, 9 Nov 2024 12:33:47 +0100 Subject: [PATCH 119/178] Update credits for 5.10.0 --- builtin/mainmenu/credits.json | 32 +++++++++++++++----------------- util/gather_git_credits.py | 2 +- 2 files changed, 16 insertions(+), 18 deletions(-) diff --git a/builtin/mainmenu/credits.json b/builtin/mainmenu/credits.json index 1e35cc6b3..8a946893c 100644 --- a/builtin/mainmenu/credits.json +++ b/builtin/mainmenu/credits.json @@ -13,7 +13,9 @@ "Desour/DS", "srifqi", "Gregor Parzefall (grorp)", - "Lars Müller (luatic)" + "Lars Müller (luatic)", + "cx384", + "sfence" ], "previous_core_developers": [ "BlockMen", @@ -44,30 +46,25 @@ ], "#": "For updating active/previous contributors, see the script in ./util/gather_git_credits.py", "contributors": [ - "cx384", - "numzero", - "AFCMS", - "sfence", - "Wuzzy", - "ROllerozxa", "JosiahWI", - "OgelGames", - "David Heidelberg", "1F616EMO", - "HybridDog", - "Bradley Pierce (Thresher)", - "savilli", - "Stvk imension", "y5nw", + "Erich Schubert", + "numzero", + "red-001 ", + "David Heidelberg", + "Wuzzy", + "paradust7", + "HybridDog", + "Zemtzov7", + "kromka-chleba", + "AFCMS", "chmodsayshello", - "jordan4ibanez", - "superfloh247" + "OgelGames" ], "previous_contributors": [ "Ælla Chiana Moskopp (erle) [Logo]", - "red-001 ", "Giuseppe Bilotta", - "HybridDog", "ClobberXD", "Dániel Juhász (juhdanad) ", "MirceaKitsune ", @@ -75,6 +72,7 @@ "MoNTE48", "Constantin Wenger (SpeedProg)", "Ciaran Gultnieks (CiaranG)", + "ROllerozxa", "Paul Ouellette (pauloue)", "stujones11", "Rogier ", diff --git a/util/gather_git_credits.py b/util/gather_git_credits.py index cb0f42dde..d531f81cb 100755 --- a/util/gather_git_credits.py +++ b/util/gather_git_credits.py @@ -6,7 +6,7 @@ from collections import defaultdict codefiles = r"(\.[ch](pp)?|\.lua|\.md|\.cmake|\.java|\.gradle|Makefile|CMakeLists\.txt)$" # two minor versions back, for "Active Contributors" -REVS_ACTIVE = "5.7.0..HEAD" +REVS_ACTIVE = "5.8.0..HEAD" # all time, for "Previous Contributors" REVS_PREVIOUS = "HEAD" From 8b27340b2eb30cd4efdbf50803af8b03170b22bd Mon Sep 17 00:00:00 2001 From: sfan5 Date: Sun, 10 Nov 2024 13:11:02 +0100 Subject: [PATCH 120/178] Work around Intel driver bug on Win 8.1 and older --- irr/src/COpenGLSLMaterialRenderer.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/irr/src/COpenGLSLMaterialRenderer.cpp b/irr/src/COpenGLSLMaterialRenderer.cpp index 556405d7b..27393adeb 100644 --- a/irr/src/COpenGLSLMaterialRenderer.cpp +++ b/irr/src/COpenGLSLMaterialRenderer.cpp @@ -401,8 +401,10 @@ bool COpenGLSLMaterialRenderer::linkProgram() #endif if (maxlen == 0) { - os::Printer::log("GLSL (> 2.x): failed to retrieve uniform information", ELL_ERROR); - return false; + // Intel driver bug that seems to primarily happen on Win 8.1 or older: + // There are >0 uniforms yet the driver reports a max name length of 0. + os::Printer::log("GLSL (> 2.x): failed to retrieve uniform information", ELL_WARNING); + maxlen = 256; // hope that this is enough } // seems that some implementations use an extra null terminator @@ -471,8 +473,10 @@ bool COpenGLSLMaterialRenderer::linkProgram() #endif if (maxlen == 0) { - os::Printer::log("GLSL: failed to retrieve uniform information", ELL_ERROR); - return false; + // Intel driver bug that seems to primarily happen on Win 8.1 or older: + // There are >0 uniforms yet the driver reports a max name length of 0. + os::Printer::log("GLSL: failed to retrieve uniform information", ELL_WARNING); + maxlen = 256; // hope that this is enough } // seems that some implementations use an extra null terminator From 2424c6409906a838869e619f6d2a7cb5f25b3954 Mon Sep 17 00:00:00 2001 From: grorp Date: Fri, 1 Nov 2024 14:00:28 +0000 Subject: [PATCH 121/178] Translated using Weblate (German) Currently translated at 99.7% (1380 of 1383 strings) --- po/de/luanti.po | 178 ++++++++++++++++++++++-------------------------- 1 file changed, 81 insertions(+), 97 deletions(-) diff --git a/po/de/luanti.po b/po/de/luanti.po index fab6cd4f9..fc68a06f3 100644 --- a/po/de/luanti.po +++ b/po/de/luanti.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: German (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-10-28 19:57+0100\n" -"PO-Revision-Date: 2024-07-12 14:09+0000\n" -"Last-Translator: Wuzzy \n" +"PO-Revision-Date: 2024-11-01 15:20+0000\n" +"Last-Translator: grorp \n" "Language-Team: German \n" "Language: de\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.7-dev\n" +"X-Generator: Weblate 5.8.2-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -159,7 +159,7 @@ msgstr "$1 laden herunter…" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "All" -msgstr "" +msgstr "Alle" #: builtin/mainmenu/content/dlg_contentdb.lua #: builtin/mainmenu/content/dlg_package.lua @@ -168,10 +168,8 @@ msgid "Back" msgstr "Zurück" #: builtin/mainmenu/content/dlg_contentdb.lua -#, fuzzy msgid "ContentDB is not available when Luanti was compiled without cURL" -msgstr "" -"ContentDB ist nicht verfügbar, wenn Minetest ohne cURL kompiliert wurde" +msgstr "ContentDB ist nicht verfügbar, wenn Luanti ohne cURL kompiliert wurde" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "Downloading..." @@ -215,7 +213,6 @@ msgid "Queued" msgstr "Eingereiht" #: builtin/mainmenu/content/dlg_contentdb.lua -#, fuzzy msgid "Texture Packs" msgstr "Texturenpakete" @@ -269,9 +266,8 @@ msgid "Dependencies:" msgstr "Abhängigkeiten:" #: builtin/mainmenu/content/dlg_install.lua -#, fuzzy msgid "Error getting dependencies for package $1" -msgstr "Fehler beim Holen der Abhängigkeiten für Paket" +msgstr "Fehler beim Laden der Abhängigkeiten für Paket $1" #: builtin/mainmenu/content/dlg_install.lua msgid "Install" @@ -307,44 +303,40 @@ msgid "Overwrite" msgstr "Überschreiben" #: builtin/mainmenu/content/dlg_package.lua -#, fuzzy msgid "ContentDB page" -msgstr "ContentDB-URL" +msgstr "ContentDB-Seite" #: builtin/mainmenu/content/dlg_package.lua -#, fuzzy msgid "Description" -msgstr "Serverbeschreibung" +msgstr "Beschreibung" #: builtin/mainmenu/content/dlg_package.lua msgid "Donate" -msgstr "" +msgstr "Spenden" #: builtin/mainmenu/content/dlg_package.lua msgid "Forum Topic" msgstr "" #: builtin/mainmenu/content/dlg_package.lua -#, fuzzy msgid "Information" -msgstr "Information:" +msgstr "Informationen" #: builtin/mainmenu/content/dlg_package.lua -#, fuzzy msgid "Install [$1]" -msgstr "$1 installieren" +msgstr "Installieren [$1]" #: builtin/mainmenu/content/dlg_package.lua msgid "Issue Tracker" -msgstr "" +msgstr "Issue-Tracker" #: builtin/mainmenu/content/dlg_package.lua msgid "Source" -msgstr "" +msgstr "Quellcode" #: builtin/mainmenu/content/dlg_package.lua msgid "Translate" -msgstr "" +msgstr "Übersetzen" #: builtin/mainmenu/content/dlg_package.lua builtin/mainmenu/tab_content.lua msgid "Uninstall" @@ -355,13 +347,12 @@ msgid "Update" msgstr "Updaten" #: builtin/mainmenu/content/dlg_package.lua -#, fuzzy msgid "Website" -msgstr "Webseite besuchen" +msgstr "Webseite" #: builtin/mainmenu/content/dlg_package.lua msgid "by $1 — $2 downloads — +$3 / $4 / -$5" -msgstr "" +msgstr "von $1 — $2 Downloads — +$3 / $4 / -$5" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" @@ -726,14 +717,13 @@ msgid "Dismiss" msgstr "Ablehnen" #: builtin/mainmenu/dlg_reinstall_mtg.lua -#, fuzzy msgid "" "For a long time, Luanti shipped with a default game called \"Minetest " "Game\". Since version 5.8.0, Luanti ships without a default game." msgstr "" -"Für eine lange Zeit wurde die Minetest-Engine mit einem Standardspiel namens " -"„Minetest Game“ ausgeliefert. Seit Minetest 5.8.0 wird Minetest ohne ein " -"Standardspiel ausgeliefert." +"Für eine lange Zeit wurde Luanti mit einem Standardspiel namens „Minetest " +"Game“ ausgeliefert. Seit Version 5.8.0 wird Luanti ohne ein Standardspiel " +"ausgeliefert." #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "" @@ -895,19 +885,16 @@ msgid "eased" msgstr "weich (eased)" #: builtin/mainmenu/settings/dlg_settings.lua -#, fuzzy msgid "(The game will need to enable automatic exposure as well)" -msgstr "(Das Spiel muss ebenfalls Schatten aktivieren)" +msgstr "(Das Spiel muss ebenfalls automatische Belichtung aktivieren)" #: builtin/mainmenu/settings/dlg_settings.lua -#, fuzzy msgid "(The game will need to enable bloom as well)" -msgstr "(Das Spiel muss ebenfalls Schatten aktivieren)" +msgstr "(Das Spiel muss ebenfalls Bloom aktivieren)" #: builtin/mainmenu/settings/dlg_settings.lua -#, fuzzy msgid "(The game will need to enable volumetric lighting as well)" -msgstr "(Das Spiel muss ebenfalls Schatten aktivieren)" +msgstr "(Das Spiel muss ebenfalls volumetrisches Licht aktivieren)" #: builtin/mainmenu/settings/dlg_settings.lua msgid "(Use system language)" @@ -919,7 +906,7 @@ msgstr "Barrierefreiheit" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Auto" -msgstr "" +msgstr "Automatisch" #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/gui/touchcontrols.cpp src/settings_translation_file.cpp @@ -985,18 +972,16 @@ msgid "Content: Mods" msgstr "Inhalt: Mods" #: builtin/mainmenu/settings/shader_warning_component.lua -#, fuzzy msgid "Enable" msgstr "Aktiviert" #: builtin/mainmenu/settings/shader_warning_component.lua -#, fuzzy msgid "Shaders are disabled." -msgstr "Kameraaktualisierung deaktiviert" +msgstr "Shader sind deaktiviert." #: builtin/mainmenu/settings/shader_warning_component.lua msgid "This is not a recommended configuration." -msgstr "" +msgstr "Dies ist keine empfohlene Konfiguration." #: builtin/mainmenu/settings/shadows_component.lua msgid "(The game will need to enable shadows as well)" @@ -1156,17 +1141,15 @@ msgid "Install games from ContentDB" msgstr "Spiele aus ContentDB installieren" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Luanti doesn't come with a game by default." -msgstr "Minetest wird standardmäßig nicht mehr mit einem Spiel ausgeliefert." +msgstr "Luanti wird standardmäßig nicht mit einem Spiel ausgeliefert." #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "" "Luanti is a game-creation platform that allows you to play many different " "games." msgstr "" -"Minetest ist eine Spielerschaffungsplattform, welche es Ihnen ermöglicht, " +"Luanti ist eine Spielerschaffungsplattform, welche es Ihnen ermöglicht, " "viele verschiedene Spiele zu spielen." #: builtin/mainmenu/tab_local.lua @@ -2272,18 +2255,16 @@ msgid "Sound Volume: %d%%" msgstr "Tonlautstärke: %d%%" #: src/gui/touchcontrols.cpp -#, fuzzy msgid "Joystick" -msgstr "Joystick-ID" +msgstr "Joystick" #: src/gui/touchcontrols.cpp msgid "Overflow menu" -msgstr "" +msgstr "Überlauf-Menü" #: src/gui/touchcontrols.cpp -#, fuzzy msgid "Toggle debug" -msgstr "Nebel an/aus" +msgstr "Debug an/aus" #: src/network/clientpackethandler.cpp msgid "" @@ -2294,15 +2275,16 @@ msgstr "" #: src/network/clientpackethandler.cpp msgid "Empty passwords are disallowed. Set a password and try again." msgstr "" +"Leere Passwörter sind nicht erlaubt. Legen Sie ein Passwort fest und " +"versuchen Sie es erneut." #: src/network/clientpackethandler.cpp msgid "Internal server error" -msgstr "" +msgstr "Interner Serverfehler" #: src/network/clientpackethandler.cpp -#, fuzzy msgid "Invalid password" -msgstr "Altes Passwort" +msgstr "Falsches Passwort" #. ~ DO NOT TRANSLATE THIS LITERALLY! #. This is a special string which needs to contain the translation's @@ -2325,46 +2307,51 @@ msgstr "Name ist belegt. Bitte einen anderen Namen wählen" #: src/network/clientpackethandler.cpp msgid "Player name contains disallowed characters" -msgstr "" +msgstr "Spielername enthält nicht erlaubte Zeichen" #: src/network/clientpackethandler.cpp -#, fuzzy msgid "Player name not allowed" -msgstr "Der Spielername ist zu lang." +msgstr "Spielername nicht erlaubt" #: src/network/clientpackethandler.cpp -#, fuzzy msgid "Server shutting down" -msgstr "Herunterfahren …" +msgstr "Server fährt herunter" #: src/network/clientpackethandler.cpp msgid "" "The server has experienced an internal error. You will now be disconnected." msgstr "" +"Auf dem Server ist ein interner Fehler aufgetreten. Die Verbindung wird " +"jetzt getrennt." #: src/network/clientpackethandler.cpp msgid "The server is running in singleplayer mode. You cannot connect." msgstr "" +"Der Server läuft im Einzelspielermodus. Sie können sich nicht verbinden." #: src/network/clientpackethandler.cpp msgid "Too many users" -msgstr "" +msgstr "Zu viele Benutzer" #: src/network/clientpackethandler.cpp msgid "Unknown disconnect reason." -msgstr "" +msgstr "Unbekannter Grund für die Trennung der Verbindung." #: src/network/clientpackethandler.cpp msgid "" "Your client sent something the server didn't expect. Try reconnecting or " "updating your client." msgstr "" +"Ihr Client hat etwas gesendet, das der Server nicht erwartet hat. Versuchen " +"Sie, sich erneut zu verbinden oder Ihren Client zu aktualisieren." #: src/network/clientpackethandler.cpp msgid "" "Your client's version is not supported.\n" "Please contact the server administrator." msgstr "" +"Ihre Client-Version wird nicht unterstützt.\n" +"Bitte kontaktieren Sie den Server-Administrator." #: src/server.cpp #, c-format @@ -2674,11 +2661,11 @@ msgstr "Kantenglättungsmethode" #: src/settings_translation_file.cpp msgid "Anticheat flags" -msgstr "" +msgstr "Anticheat-Flags" #: src/settings_translation_file.cpp msgid "Anticheat movement tolerance" -msgstr "" +msgstr "Anticheat-Bewegungs-Toleranz" #: src/settings_translation_file.cpp msgid "Append item name" @@ -2832,9 +2819,8 @@ msgid "Biome noise" msgstr "Biomrauschen" #: src/settings_translation_file.cpp -#, fuzzy msgid "Block bounds HUD radius" -msgstr "Blockgrenzen" +msgstr "Radius für Blockgrenzen-HUD" #: src/settings_translation_file.cpp msgid "Block cull optimize distance" @@ -3050,7 +3036,6 @@ msgstr "" "für Details." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Comma-separated list of flags to hide in the content repository.\n" "\"nonfree\" can be used to hide packages which do not qualify as 'free " @@ -3060,13 +3045,13 @@ msgid "" "These flags are independent from Luanti versions,\n" "so see a full list at https://content.minetest.net/help/content_flags/" msgstr "" -"Kommagetrennte Liste von Flags für Dinge, die im Inhaltespeicher verborgen " +"Kommagetrennte Liste von Flags für Dinge, die im Inhalte-Browser verborgen " "werden sollten.\n" "„nonfree“ kann benutzt werden, um Pakete, die nicht als „freie Software“ " "nach\n" "der Definition der Free Software Foundation gelten, zu verbergen.\n" "Sie können auch Inhaltseinstufungen festlegen.\n" -"Diese Flags sind von Minetestversionen unabhängig,\n" +"Diese Flags sind von Luanti-Versionen unabhängig,\n" "für eine vollständige Liste gehen Sie auf:\n" "https://content.minetest.net/help/content_flags/" @@ -3276,7 +3261,6 @@ msgstr "" "aber dies verbraucht auch mehr Ressourcen." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Define the oldest clients allowed to connect.\n" "Older clients are compatible in the sense that they will not crash when " @@ -3288,17 +3272,16 @@ msgid "" "Luanti still enforces its own internal minimum, and enabling\n" "strict_protocol_version_checking will effectively override this." msgstr "" -"Hier festlegen, welches die ältesten Clients sind, die sich verbinden " -"dürfen.\n" +"Hier festlegen, welches die ältesten Clients sind, die sich verbinden dürfen." +"\n" "Ältere Clients sind kompatibel in der Hinsicht, dass sie beim Verbinden zu " "neuen\n" "Servern nicht abstürzen, aber sie könnten nicht alle neuen Funktionen, die " "Sie\n" "erwarten, unterstützen.\n" -"Das ermöglicht eine genauere Kontrolle als " -"strict_protocol_version_checking.\n" -"Minetest wird immer noch ein internes Minimum erzwingen, und die " -"Aktivierung\n" +"Das ermöglicht eine genauere Kontrolle als strict_protocol_version_checking." +"\n" +"Luanti wird immer noch ein internes Minimum erzwingen, und die Aktivierung\n" "von strict_protocol_version_checking wird dies überschreiben." #: src/settings_translation_file.cpp @@ -3439,7 +3422,6 @@ msgid "Display Density Scaling Factor" msgstr "Anzeigendichtenskalierungsfaktor" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Distance in nodes at which transparency depth sorting is enabled.\n" "Use this to limit the performance impact of transparency depth sorting.\n" @@ -3448,7 +3430,8 @@ msgstr "" "Entfernung in Nodes, bei welcher die Transparenztiefensortierung aktiviert " "ist.\n" "Dies benutzen, um die Performanzeinbußen der Transparenztiefensortierung zu " -"begrenzen" +"begrenzen.\n" +"Auf 0 setzen, um sie vollständig zu deaktivieren." #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." @@ -3479,9 +3462,8 @@ msgid "Dungeon noise" msgstr "Verliesrauschen" #: src/settings_translation_file.cpp -#, fuzzy msgid "Effects" -msgstr "Grafikeffekte" +msgstr "Effekte" #: src/settings_translation_file.cpp msgid "Enable Automatic Exposure" @@ -3588,11 +3570,8 @@ msgid "Enable random user input (only used for testing)." msgstr "Schaltet zufällige Steuerung ein (nur zum Testen verwendet)." #: src/settings_translation_file.cpp -#, fuzzy msgid "Enable smooth lighting with simple ambient occlusion." -msgstr "" -"Weiches Licht mit einfacher Ambient-Occlusion aktivieren.\n" -"Für bessere Performanz oder anderes Aussehen deaktivieren." +msgstr "Weiches Licht mit einfacher Ambient-Occlusion aktivieren." #: src/settings_translation_file.cpp msgid "Enable split login/register" @@ -3615,7 +3594,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Enable updates available indicator on content tab" -msgstr "" +msgstr "Update-Indikator auf dem „Inhalt“-Tab aktivieren" #: src/settings_translation_file.cpp msgid "" @@ -3667,22 +3646,21 @@ msgid "Enables animation of inventory items." msgstr "Aktiviert die Animation von Inventargegenständen." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Enables caching of facedir rotated meshes.\n" "This is only effective with shaders disabled." msgstr "" "Aktiviert das Zwischenspeichern von 3-D-Modellen, die mittels facedir " -"rotiert werden." +"rotiert werden.\n" +"Dies hat nur einen Effekt, wenn Shader deaktiviert sind." #: src/settings_translation_file.cpp msgid "Enables debug and error-checking in the OpenGL driver." msgstr "Aktiviert Debug und Fehlerprüfungen im OpenGL-Treiber." #: src/settings_translation_file.cpp -#, fuzzy msgid "Enables smooth scrolling." -msgstr "Nachbearbeitung aktivieren" +msgstr "Weiches Scrollen aktivieren" #: src/settings_translation_file.cpp msgid "Enables the post processing pipeline." @@ -3695,6 +3673,11 @@ msgid "" "\"auto\" means that the touchscreen controls will be enabled and disabled\n" "automatically depending on the last used input method." msgstr "" +"Aktiviert die Touchscreen-Steuerung, so dass Sie das Spiel mit einem " +"Touchscreen spielen können.\n" +"„Automatisch“ bedeutet, dass die Touchscreen-Steuerung automatisch aktiviert " +"und deaktiviert wird,\n" +"basierend auf dem zuletzt verwendeten Eingabegerät." #: src/settings_translation_file.cpp msgid "" @@ -4289,6 +4272,9 @@ msgid "" "ContentDB to\n" "check for package updates when opening the mainmenu." msgstr "" +"Wenn dies aktiviert ist und Sie ContentDB-Pakete installiert haben, kann " +"Luanti beim Öffnen\n" +"des Hauptmenüs ContentDB kontaktieren, um nach Updates zu suchen." #: src/settings_translation_file.cpp msgid "" @@ -4433,13 +4419,12 @@ msgid "Instrument chat commands on registration." msgstr "Chatbefehle bei ihrer Registrierung instrumentieren." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Instrument global callback functions on registration.\n" "(anything you pass to a core.register_*() function)" msgstr "" "Globale Rückruffunktionen bei ihrer Registrierung instrumentieren\n" -"(alles, was man einer Funktion wie minetest.register_*() übergibt)." +"(alles, was man einer Funktion wie core.register_*() übergibt)." #: src/settings_translation_file.cpp msgid "" @@ -4650,7 +4635,6 @@ msgid "Leaves style" msgstr "Blätterstil" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Leaves style:\n" "- Fancy: all faces visible\n" @@ -4659,12 +4643,10 @@ msgid "" msgstr "" "Blätterstil:\n" "- Fancy: Alle Seiten sind sichtbar\n" -"- Simple: Nur äußere Seiten, falls definierte special_tiles benutzt " -"werden\n" +"- Simple: Nur äußere Seiten\n" "- Opaque: Transparenz deaktivieren" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Length of a server tick (the interval at which everything is generally " "updated),\n" @@ -4673,10 +4655,13 @@ msgid "" "This is a lower bound, i.e. server steps may not be shorter than this, but\n" "they are often longer." msgstr "" -"Länge eines Servertakts (dem Intervall, wo grundsätzlich alles aktualisiert " -"wird),\n" +"Länge eines Servertakts (dem Intervall, in dem grundsätzlich alles " +"aktualisiert wird),\n" "in Sekunden.\n" -"Wirkt sich nicht auf Sitzungen aus, die vom Clientmenü gestartet wurden." +"Wirkt sich nicht auf Sitzungen aus, die mit dem Hauptmenü gestartet wurden.\n" +"Dies ist eine Untergrenze, d.h. Server-Schritte dürfen nicht kürzer als " +"dieser Wert sein,\n" +"sind aber oft länger." #: src/settings_translation_file.cpp msgid "Length of liquid waves." @@ -4792,9 +4777,8 @@ msgid "Liquid queue purge time" msgstr "Aufräumzeit für Flüssigkeitswarteschlange" #: src/settings_translation_file.cpp -#, fuzzy msgid "Liquid reflections" -msgstr "Flüssigkeitswiderstand" +msgstr "Flüssigkeits-Reflexionen" #: src/settings_translation_file.cpp msgid "Liquid sinking" From 5891d0f5ec3b70bf2173652670e7495c549db877 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Fri, 1 Nov 2024 15:10:13 +0000 Subject: [PATCH 122/178] Translated using Weblate (German) Currently translated at 99.7% (1380 of 1383 strings) --- po/de/luanti.po | 81 +++++++++++++++++++++++++++---------------------- 1 file changed, 44 insertions(+), 37 deletions(-) diff --git a/po/de/luanti.po b/po/de/luanti.po index fc68a06f3..7fecb8b93 100644 --- a/po/de/luanti.po +++ b/po/de/luanti.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: German (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-10-28 19:57+0100\n" -"PO-Revision-Date: 2024-11-01 15:20+0000\n" -"Last-Translator: grorp \n" +"PO-Revision-Date: 2024-11-01 16:26+0000\n" +"Last-Translator: Wuzzy \n" "Language-Team: German \n" "Language: de\n" @@ -177,7 +177,7 @@ msgstr "Herunterladen …" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "Featured" -msgstr "" +msgstr "Vorgestellt" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "Games" @@ -316,7 +316,7 @@ msgstr "Spenden" #: builtin/mainmenu/content/dlg_package.lua msgid "Forum Topic" -msgstr "" +msgstr "Forumthema" #: builtin/mainmenu/content/dlg_package.lua msgid "Information" @@ -2271,6 +2271,8 @@ msgid "" "Another client is connected with this name. If your client closed " "unexpectedly, try again in a minute." msgstr "" +"Ein anderer Client ist mit diesem Namen verbunden. Falls Ihr Client " +"unerwartet geschlossen wurde, versuchen Sie es in einer Minute erneut." #: src/network/clientpackethandler.cpp msgid "Empty passwords are disallowed. Set a password and try again." @@ -2700,7 +2702,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Apply specular shading to nodes." -msgstr "" +msgstr "Specular-Shading auf Nodes anwenden." #: src/settings_translation_file.cpp msgid "Arm inertia" @@ -3660,7 +3662,7 @@ msgstr "Aktiviert Debug und Fehlerprüfungen im OpenGL-Treiber." #: src/settings_translation_file.cpp msgid "Enables smooth scrolling." -msgstr "Weiches Scrollen aktivieren" +msgstr "Weiches Scrollen aktivieren." #: src/settings_translation_file.cpp msgid "Enables the post processing pipeline." @@ -5124,6 +5126,10 @@ msgid "" "You generally don't need to change this, however busy servers may benefit " "from a higher number." msgstr "" +"Maximale Anzahl der Pakete, die jeden Server-Step im Low-Level-Netzwerkcode " +"gesendet werden.\n" +"Sie brauchen das normalerweise nicht ändern, jedoch können ausgelastete " +"Server von einer höheren Zahl profitieren." #: src/settings_translation_file.cpp msgid "Maximum number of players that can be connected simultaneously." @@ -5364,7 +5370,7 @@ msgstr "Blockhervorhebung" #: src/settings_translation_file.cpp msgid "Node specular" -msgstr "" +msgstr "Node-Specular" #: src/settings_translation_file.cpp msgid "NodeTimer interval" @@ -5421,14 +5427,13 @@ msgstr "" "darf." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Number of threads to use for mesh generation.\n" "Value of 0 (default) will let Luanti autodetect the number of available " "threads." msgstr "" "Anzahl der Threads, die für die Meshgenerierung benutzt werden.\n" -"Der Wert 0 (Standard) sorgt dafür, dass Minetest die Anzahl verfügbarer " +"Der Wert 0 (Standard) sorgt dafür, dass Luanti die Anzahl verfügbarer " "Threads automatisch ermittelt." #: src/settings_translation_file.cpp @@ -5460,18 +5465,16 @@ msgid "OpenGL debug" msgstr "OpenGL-Debug" #: src/settings_translation_file.cpp -#, fuzzy msgid "Optimize GUI for touchscreens" -msgstr "Fadenkreuz für Touchscreen benutzen" +msgstr "GUI für Touchscreens optimieren" #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "Optionaler manueller Wert für die Farbe von Chat-Weblinks." #: src/settings_translation_file.cpp -#, fuzzy msgid "Other Effects" -msgstr "Grafikeffekte" +msgstr "Andere Effekte" #: src/settings_translation_file.cpp msgid "" @@ -5589,7 +5592,6 @@ msgid "Prometheus listener address" msgstr "Prometheus-Lauschadresse" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Prometheus listener address.\n" "If Luanti is compiled with ENABLE_PROMETHEUS option enabled,\n" @@ -5597,7 +5599,7 @@ msgid "" "Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" "Prometheus-Lauschadresse.\n" -"Falls Minetest mit der ENABLE_PROMETEUS-Option kompiliert wurde,\n" +"Falls Luanti mit der ENABLE_PROMETEUS-Option kompiliert wurde,\n" "wird dies den Metriklauscher für Prometheus auf dieser Adresse aktivieren.\n" "Metriken können von http://127.0.0.1:30000/metrics abgegriffen werden." @@ -5626,6 +5628,8 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Radius to use when the block bounds HUD feature is set to near blocks." msgstr "" +"Der zu verwendende Radius, wenn sich die Blockbegrenzungs-HUD-Funktion im " +"Modus „Blöcke in Nähe“ befindet." #: src/settings_translation_file.cpp msgid "Raises terrain to make valleys around the rivers." @@ -5952,11 +5956,12 @@ msgid "" "Send names of online players to the serverlist. If disabled only the player " "count is revealed." msgstr "" +"Name von Spielern, die online sind, an die Serverliste senden. Fall " +"deaktiviert, wird nur die Anzahl der Spieler offengelegt." #: src/settings_translation_file.cpp -#, fuzzy msgid "Send player names to the server list" -msgstr "Zu dieser Serverliste ankündigen." +msgstr "Spielernamen an die Serverliste senden" #: src/settings_translation_file.cpp msgid "Server" @@ -5984,6 +5989,9 @@ msgid "" "Flags are positive. Uncheck the flag to disable corresponding anticheat " "module." msgstr "" +"Server-Anticheat-Konfiguration.\n" +"Flags sind positiv. Das Kreuzchen beim jeweiligen Flag entfernen, um das " +"dazugehörige Anticheatmodul zu deaktivieren." #: src/settings_translation_file.cpp msgid "Server description" @@ -6140,6 +6148,8 @@ msgid "" "Shaders are a fundamental part of rendering and enable advanced visual " "effects." msgstr "" +"Shader sind ein fundamentaler Teil des Renderns und aktivieren erweiterte " +"visuelle Effekte." #: src/settings_translation_file.cpp msgid "Shadow filter quality" @@ -6211,6 +6221,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Simulate translucency when looking at foliage in the sunlight." msgstr "" +"Transluzenz simulieren, wenn auf Blattwerk im Sonnenlicht geblickt wird." #: src/settings_translation_file.cpp msgid "" @@ -6264,9 +6275,8 @@ msgid "Smooth lighting" msgstr "Weiches Licht" #: src/settings_translation_file.cpp -#, fuzzy msgid "Smooth scrolling" -msgstr "Weiches Licht" +msgstr "Weiches Scrollen" #: src/settings_translation_file.cpp msgid "" @@ -6294,9 +6304,8 @@ msgid "Sneaking speed, in nodes per second." msgstr "Schleichgeschwindigkeit, in Blöcken pro Sekunde." #: src/settings_translation_file.cpp -#, fuzzy msgid "Soft clouds" -msgstr "3-D-Wolken" +msgstr "Weiche Wolken" #: src/settings_translation_file.cpp msgid "Soft shadow radius" @@ -6533,7 +6542,6 @@ msgstr "" "Der Dateipfad relativ zu Ihrem Weltpfad, in dem Profile abgespeichert werden." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The gesture for punching players/entities.\n" "This can be overridden by games and mods.\n" @@ -6553,7 +6561,7 @@ msgstr "" "sollen.\n" "\n" "* long_tap\n" -"Bekannt aus der klassischen Mineteststeuerung für mobile Endgeräte.\n" +"Bekannt aus der klassischen Luantisteuerung für mobile Endgeräte.\n" "Der Kampf ist mehr oder weniger unmöglich." #: src/settings_translation_file.cpp @@ -6620,7 +6628,6 @@ msgstr "" "konfiguriert werden." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The rendering back-end.\n" "Note: A restart is required after changing this!\n" @@ -6629,8 +6636,7 @@ msgstr "" "Das Renderer-Backend.\n" "Anmerkung: Ein Neustart ist nach einer Änderung notwendig!\n" "Auf Desktopsystemen ist OpenGL die Standardeinstellung. Bei Android ist " -"OGLES2 die Standardeinstellung.\n" -"Shader werden von allem außer OGLES1 unterstützt." +"OGLES2 die Standardeinstellung." #: src/settings_translation_file.cpp msgid "" @@ -6760,6 +6766,8 @@ msgid "" "Tolerance of movement cheat detector.\n" "Increase the value if players experience stuttery movement." msgstr "" +"Toleranz des Bewegungs-Cheaterkenners.\n" +"Erhöhen Sie den Wert, falls Spieler bei Bewegungen ein Stottern feststellen." #: src/settings_translation_file.cpp msgid "Tooltip delay" @@ -6770,9 +6778,8 @@ msgid "Touchscreen" msgstr "Touchscreen" #: src/settings_translation_file.cpp -#, fuzzy msgid "Touchscreen controls" -msgstr "Touchscreenschwellwert" +msgstr "Touchscreensteuerung" #: src/settings_translation_file.cpp msgid "Touchscreen sensitivity" @@ -6787,9 +6794,8 @@ msgid "Tradeoffs for performance" msgstr "Kompromisse für Performanz" #: src/settings_translation_file.cpp -#, fuzzy msgid "Translucent foliage" -msgstr "Transluzente Flüssigkeiten" +msgstr "Transluzentes Blattwerk" #: src/settings_translation_file.cpp msgid "Translucent liquids" @@ -6842,14 +6848,13 @@ msgstr "" "haben." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "URL to JSON file which provides information about the newest Luanti " "release.\n" "If this is empty the engine will never check for updates." msgstr "" -"URL zu einer JSON-Datei, welche Informationen über das neueste Minetest-" -"Release enthält\n" +"URL zu einer JSON-Datei, welche Informationen über das neueste Luanti-" +"Release enthält.\n" "Wenn dies leer ist, wird die Engine nie nach Updates suchen." #: src/settings_translation_file.cpp @@ -6952,7 +6957,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Use smooth cloud shading." -msgstr "" +msgstr "Weiches Wolken-Shading benutzen." #: src/settings_translation_file.cpp msgid "" @@ -7162,13 +7167,16 @@ msgstr "Weblinkfarbe" #: src/settings_translation_file.cpp msgid "When enabled, liquid reflections are simulated." -msgstr "" +msgstr "Falls aktiviert, werden Flüssigkeitsreflextionen simuliert." #: src/settings_translation_file.cpp msgid "" "When enabled, the GUI is optimized to be more usable on touchscreens.\n" "Whether this is enabled by default depends on your hardware form-factor." msgstr "" +"Falls aktiviert, wird die GUI optimiert, damit sie für Touchscreens " +"benutzbarer wird.\n" +"Die Standardeinstellung hängt von ihrem Hardware-Formfaktor ab." #: src/settings_translation_file.cpp msgid "" @@ -7290,13 +7298,12 @@ msgid "Window maximized" msgstr "Fenster maximiert" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Windows systems only: Start Luanti with the command line window in the " "background.\n" "Contains the same information as the file debug.txt (default name)." msgstr "" -"Nur für Windows-Systeme: Startet Minetest mit dem Kommandozeilenfenster im\n" +"Nur für Windows-Systeme: Startet Luanti mit dem Kommandozeilenfenster im\n" "Hintergrund. Enthält die selbe Information wie die Datei debug.txt " "(Standardname)." From e1be22a6ffde4a23a6b71fba2aa6bf2ddc898e9d Mon Sep 17 00:00:00 2001 From: BreadW Date: Fri, 1 Nov 2024 15:10:46 +0000 Subject: [PATCH 123/178] Translated using Weblate (Japanese) Currently translated at 94.5% (1308 of 1383 strings) --- po/ja/luanti.po | 365 +++++++++++++++++++++++------------------------- 1 file changed, 173 insertions(+), 192 deletions(-) diff --git a/po/ja/luanti.po b/po/ja/luanti.po index 79eebeb7c..2146c2304 100644 --- a/po/ja/luanti.po +++ b/po/ja/luanti.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: Japanese (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-10-28 19:57+0100\n" -"PO-Revision-Date: 2024-08-08 13:09+0000\n" +"PO-Revision-Date: 2024-11-04 01:00+0000\n" "Last-Translator: BreadW \n" "Language-Team: Japanese \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 5.7-dev\n" +"X-Generator: Weblate 5.8.2\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -159,7 +159,7 @@ msgstr "$1 ダウンロード中..." #: builtin/mainmenu/content/dlg_contentdb.lua msgid "All" -msgstr "" +msgstr "すべて" #: builtin/mainmenu/content/dlg_contentdb.lua #: builtin/mainmenu/content/dlg_package.lua @@ -168,9 +168,8 @@ msgid "Back" msgstr "戻る" #: builtin/mainmenu/content/dlg_contentdb.lua -#, fuzzy msgid "ContentDB is not available when Luanti was compiled without cURL" -msgstr "MinetestがcURLなしでコンパイルされた場合、コンテンツDBは使用できません" +msgstr "LuantiがcURLなしでコンパイルされたとき、コンテンツDBは利用できません" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "Downloading..." @@ -178,7 +177,7 @@ msgstr "ダウンロード中..." #: builtin/mainmenu/content/dlg_contentdb.lua msgid "Featured" -msgstr "" +msgstr "注目作" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "Games" @@ -214,7 +213,6 @@ msgid "Queued" msgstr "待機中" #: builtin/mainmenu/content/dlg_contentdb.lua -#, fuzzy msgid "Texture Packs" msgstr "テクスチャパック" @@ -268,9 +266,8 @@ msgid "Dependencies:" msgstr "依存MOD:" #: builtin/mainmenu/content/dlg_install.lua -#, fuzzy msgid "Error getting dependencies for package $1" -msgstr "パッケージの依存関係を取得するエラー" +msgstr "パッケージ $1 の依存関係を取得するエラー" #: builtin/mainmenu/content/dlg_install.lua msgid "Install" @@ -305,44 +302,40 @@ msgid "Overwrite" msgstr "上書き" #: builtin/mainmenu/content/dlg_package.lua -#, fuzzy msgid "ContentDB page" -msgstr "コンテンツDBのURL" +msgstr "コンテンツDBページ" #: builtin/mainmenu/content/dlg_package.lua -#, fuzzy msgid "Description" -msgstr "サーバーの説明" +msgstr "説明" #: builtin/mainmenu/content/dlg_package.lua msgid "Donate" -msgstr "" +msgstr "寄付" #: builtin/mainmenu/content/dlg_package.lua msgid "Forum Topic" -msgstr "" +msgstr "フォーラムトピック" #: builtin/mainmenu/content/dlg_package.lua -#, fuzzy msgid "Information" -msgstr "情報:" +msgstr "情報" #: builtin/mainmenu/content/dlg_package.lua -#, fuzzy msgid "Install [$1]" -msgstr "$1 のインストール" +msgstr "入手 [$1]" #: builtin/mainmenu/content/dlg_package.lua msgid "Issue Tracker" -msgstr "" +msgstr "問題追跡" #: builtin/mainmenu/content/dlg_package.lua msgid "Source" -msgstr "" +msgstr "ソース" #: builtin/mainmenu/content/dlg_package.lua msgid "Translate" -msgstr "" +msgstr "翻訳" #: builtin/mainmenu/content/dlg_package.lua builtin/mainmenu/tab_content.lua msgid "Uninstall" @@ -353,13 +346,12 @@ msgid "Update" msgstr "更新" #: builtin/mainmenu/content/dlg_package.lua -#, fuzzy msgid "Website" -msgstr "ウェブサイトを見る" +msgstr "ウェブサイト" #: builtin/mainmenu/content/dlg_package.lua msgid "by $1 — $2 downloads — +$3 / $4 / -$5" -msgstr "" +msgstr "by $1 — $2 ダウンロード — +$3 / $4 / -$5" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" @@ -618,7 +610,7 @@ msgstr "Seed値" #: builtin/mainmenu/dlg_create_world.lua msgid "Smooth transition between biomes" -msgstr "バイオーム間の円滑な移行" +msgstr "バイオーム間の滑らかな移行" #: builtin/mainmenu/dlg_create_world.lua msgid "" @@ -719,13 +711,13 @@ msgid "Dismiss" msgstr "免責事項" #: builtin/mainmenu/dlg_reinstall_mtg.lua -#, fuzzy msgid "" "For a long time, Luanti shipped with a default game called \"Minetest " "Game\". Since version 5.8.0, Luanti ships without a default game." msgstr "" -"長い間、Minetestエンジンは「Minetest Game」と呼ばれる基本のゲームとともに提供" -"してきました。Minetest 5.8.0 からはゲームなしで提供します。" +"長い間、Luantiは「Minetest " +"Game」と呼ばれるデフォルトのゲームとともに提供してきました。バージョン 5.8.0 " +"以降のLuantiはデフォルトゲームなしで提供します。" #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "" @@ -885,19 +877,16 @@ msgid "eased" msgstr "緩和する" #: builtin/mainmenu/settings/dlg_settings.lua -#, fuzzy msgid "(The game will need to enable automatic exposure as well)" -msgstr "(ゲームは影を有効にする必要があります)" +msgstr "(ゲームも自動露出を有効にする必要があります)" #: builtin/mainmenu/settings/dlg_settings.lua -#, fuzzy msgid "(The game will need to enable bloom as well)" -msgstr "(ゲームは影を有効にする必要があります)" +msgstr "(ゲームもブルームを有効にする必要があります)" #: builtin/mainmenu/settings/dlg_settings.lua -#, fuzzy msgid "(The game will need to enable volumetric lighting as well)" -msgstr "(ゲームは影を有効にする必要があります)" +msgstr "(ゲームもボリュームライティングを有効にする必要があります)" #: builtin/mainmenu/settings/dlg_settings.lua msgid "(Use system language)" @@ -909,7 +898,7 @@ msgstr "アクセシビリティ" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Auto" -msgstr "" +msgstr "自動" #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/gui/touchcontrols.cpp src/settings_translation_file.cpp @@ -918,7 +907,7 @@ msgstr "チャット" #: builtin/mainmenu/settings/dlg_settings.lua builtin/mainmenu/tab_online.lua msgid "Clear" -msgstr "Clear" +msgstr "クリア" #: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp #: src/settings_translation_file.cpp @@ -975,18 +964,16 @@ msgid "Content: Mods" msgstr "コンテンツ: MOD" #: builtin/mainmenu/settings/shader_warning_component.lua -#, fuzzy msgid "Enable" msgstr "有効" #: builtin/mainmenu/settings/shader_warning_component.lua -#, fuzzy msgid "Shaders are disabled." -msgstr "カメラ更新 無効" +msgstr "シェーダーは無効です。" #: builtin/mainmenu/settings/shader_warning_component.lua msgid "This is not a recommended configuration." -msgstr "" +msgstr "推奨されている設定ではありません。" #: builtin/mainmenu/settings/shadows_component.lua msgid "(The game will need to enable shadows as well)" @@ -1023,7 +1010,7 @@ msgstr "とても弱く" #: builtin/mainmenu/tab_about.lua msgid "About" -msgstr "ContentDBについて" +msgstr "私たちについて" #: builtin/mainmenu/tab_about.lua msgid "Active Contributors" @@ -1146,18 +1133,14 @@ msgid "Install games from ContentDB" msgstr "コンテンツDBからゲームをインストール" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Luanti doesn't come with a game by default." -msgstr "Minetest は初期状態でゲームが付属していません。" +msgstr "Luantiはデフォルトではゲームが付属していません。" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "" "Luanti is a game-creation platform that allows you to play many different " "games." -msgstr "" -"Minetestは、さまざまなゲームで遊ぶことを可能にするゲーム制作プラットフォーム" -"です." +msgstr "Luantiは、多くの異なるゲームを遊ぶことができるゲーム制作プラットフォームです." #: builtin/mainmenu/tab_local.lua msgid "New" @@ -1963,7 +1946,7 @@ msgstr "Shiftキー" #: src/client/keycode.cpp msgid "Sleep" -msgstr "Sleep" +msgstr "スリープ" #: src/client/keycode.cpp msgid "Snapshot" @@ -2219,7 +2202,7 @@ msgstr "開く" #: src/gui/guiOpenURL.cpp msgid "Open URL?" -msgstr "URLを開く?" +msgstr "このURLを開きますか?" #: src/gui/guiOpenURL.cpp msgid "Unable to open URL" @@ -2255,37 +2238,35 @@ msgid "Sound Volume: %d%%" msgstr "音量: %d%%" #: src/gui/touchcontrols.cpp -#, fuzzy msgid "Joystick" -msgstr "ジョイスティックID" +msgstr "ジョイスティック" #: src/gui/touchcontrols.cpp msgid "Overflow menu" -msgstr "" +msgstr "オーバーフローメニュー" #: src/gui/touchcontrols.cpp -#, fuzzy msgid "Toggle debug" -msgstr "霧表示切替" +msgstr "デバッグ切替" #: src/network/clientpackethandler.cpp msgid "" "Another client is connected with this name. If your client closed " "unexpectedly, try again in a minute." -msgstr "" +msgstr "別のクライアントがこの名前で接続されています。 " +"クライアントが予期せず終了した場合はもう一度お試しください。" #: src/network/clientpackethandler.cpp msgid "Empty passwords are disallowed. Set a password and try again." -msgstr "" +msgstr "パスワードが未入力です。 パスワードを設定し、もう一度お試しください。" #: src/network/clientpackethandler.cpp msgid "Internal server error" -msgstr "" +msgstr "内部サーバーエラー" #: src/network/clientpackethandler.cpp -#, fuzzy msgid "Invalid password" -msgstr "古いパスワード" +msgstr "無効なパスワード" #. ~ DO NOT TRANSLATE THIS LITERALLY! #. This is a special string which needs to contain the translation's @@ -2298,9 +2279,8 @@ msgstr "ja" #: src/network/clientpackethandler.cpp msgid "" "Name is not registered. To create an account on this server, click 'Register'" -msgstr "" -"名前が登録されていません。このサーバーにアカウントを作成するには「登録」をク" -"リック。" +msgstr "名前が登録されていません。このサーバーにアカウントを作成するには「登録」をク" +"リック" #: src/network/clientpackethandler.cpp msgid "Name is taken. Please choose another name" @@ -2308,46 +2288,47 @@ msgstr "名前は使われています。他の名前に変えてください" #: src/network/clientpackethandler.cpp msgid "Player name contains disallowed characters" -msgstr "" +msgstr "プレイヤー名に無効の文字が含まれている" #: src/network/clientpackethandler.cpp -#, fuzzy msgid "Player name not allowed" -msgstr "プレイヤー名が長過ぎます。" +msgstr "プレイヤー名 不可" #: src/network/clientpackethandler.cpp -#, fuzzy msgid "Server shutting down" -msgstr "終了中..." +msgstr "サーバのシャットダウン" #: src/network/clientpackethandler.cpp msgid "" "The server has experienced an internal error. You will now be disconnected." -msgstr "" +msgstr "サーバーで内部エラーが発生しました。 接続が切断されます。" #: src/network/clientpackethandler.cpp msgid "The server is running in singleplayer mode. You cannot connect." -msgstr "" +msgstr "サーバーはシングルプレイヤーモードで実行されています。 接続できません。" #: src/network/clientpackethandler.cpp msgid "Too many users" -msgstr "" +msgstr "多すぎるユーザー" #: src/network/clientpackethandler.cpp msgid "Unknown disconnect reason." -msgstr "" +msgstr "未知の切断理由です。" #: src/network/clientpackethandler.cpp msgid "" "Your client sent something the server didn't expect. Try reconnecting or " "updating your client." -msgstr "" +msgstr "クライアントはサーバーが予期しないものを送信しました。 " +"再接続するか、クライアントを更新してください。" #: src/network/clientpackethandler.cpp msgid "" "Your client's version is not supported.\n" "Please contact the server administrator." msgstr "" +"クライアントのバージョンはサポートされていません。\n" +"サーバーの管理者に問い合わせてください。" #: src/server.cpp #, c-format @@ -2511,7 +2492,7 @@ msgstr "サーバークラッシュ時にすべてのクライアントへ表示 #: src/settings_translation_file.cpp msgid "A message to be displayed to all clients when the server shuts down." -msgstr "サーバー終了時にすべてのクライアントへ表示するメッセージ。" +msgstr "サーバー終了時にすべてのクライアントへ表示するメッセージです。" #: src/settings_translation_file.cpp msgid "ABM interval" @@ -2551,7 +2532,7 @@ msgstr "アクティブなオブジェクトの送信範囲" #: src/settings_translation_file.cpp msgid "Adds particles when digging a node." -msgstr "ノードを掘る際にパーティクルを追加します。" +msgstr "ノード掘削時にパーティクルを追加します。" #: src/settings_translation_file.cpp msgid "Adjust the detected display density, used for scaling UI elements." @@ -2633,11 +2614,11 @@ msgstr "アンチエイリアス方式" #: src/settings_translation_file.cpp msgid "Anticheat flags" -msgstr "" +msgstr "アンチチートフラグ" #: src/settings_translation_file.cpp msgid "Anticheat movement tolerance" -msgstr "" +msgstr "アンチチート動作耐性" #: src/settings_translation_file.cpp msgid "Append item name" @@ -2675,7 +2656,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Apply specular shading to nodes." -msgstr "" +msgstr "ノードにスペキュラーシェーディングを適用します。" #: src/settings_translation_file.cpp msgid "Arm inertia" @@ -2712,7 +2693,7 @@ msgstr "" "洞窟で正しく描画されません)。\n" "max_block_send_distance より大きい値に設定すると、この最適化は\n" "無効になります。 \n" -"マップブロック(16ノード)で表記。" +"マップブロック(16ノード)で表記します。" #: src/settings_translation_file.cpp msgid "" @@ -2791,9 +2772,8 @@ msgid "Biome noise" msgstr "バイオームノイズ" #: src/settings_translation_file.cpp -#, fuzzy msgid "Block bounds HUD radius" -msgstr "ブロック境界線表示切替" +msgstr "ブロック境界 HUD 半径" #: src/settings_translation_file.cpp msgid "Block cull optimize distance" @@ -3008,7 +2988,6 @@ msgstr "" "テストのために有用です。 詳細は al_extensions.[h,cpp] を参照してください。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Comma-separated list of flags to hide in the content repository.\n" "\"nonfree\" can be used to hide packages which do not qualify as 'free " @@ -3018,13 +2997,12 @@ msgid "" "These flags are independent from Luanti versions,\n" "so see a full list at https://content.minetest.net/help/content_flags/" msgstr "" -"コンテンツリポジトリで非表示にするフラグのカンマ区切りリスト。\n" -"「nonfree」は、フリーソフトウェア財団によって定義されている\n" -"フリーソフトウェアとして認定されていないパッケージを隠すために\n" -"使うことができます。\n" +"コンテンツリポジトリで非表示にするフラグのカンマ区切りリストです。\n" +"『nonfree』を使用すると、フリーソフトウェア財団によって定義されている\n" +"「フリーソフトウェア」として認定されていないパッケージを非表示にできます。\n" "コンテンツの評価を指定することもできます。\n" -"これらのフラグはMinetestのバージョンから独立しています、\n" -"https://content.minetest.net/help/content_flags/ にある完全なリスト参照" +"これらのフラグはLuantiのバージョンとは無関係です。完全なリストについては\n" +"https://content.minetest.net/help/content_flags/ を参照してください。" #: src/settings_translation_file.cpp msgid "" @@ -3032,7 +3010,7 @@ msgid "" "allow them to upload and download data to/from the internet." msgstr "" "HTTP APIへのアクセスが許可され、インターネットでデータをアップロード\n" -"およびダウンロードできるようにするModのコンマ区切りリスト。" +"およびダウンロードできるようにするModのカンマ区切りリストです。" #: src/settings_translation_file.cpp msgid "" @@ -3041,7 +3019,7 @@ msgid "" msgstr "" "MODのセキュリティが有効の場合でも (request_insecure_environment() \n" "を介して) 安全でない機能へのアクセスが許可されている信頼できる\n" -"MODのコンマ区切りリスト。" +"MODのカンマ区切りリストです。" #: src/settings_translation_file.cpp msgid "" @@ -3227,7 +3205,6 @@ msgstr "" "しかし、より多くのリソースを消費します。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Define the oldest clients allowed to connect.\n" "Older clients are compatible in the sense that they will not crash when " @@ -3240,13 +3217,15 @@ msgid "" "strict_protocol_version_checking will effectively override this." msgstr "" "接続を許可する最も古いクライアントを定義します。\n" -"古いクライアントは、新しいサーバーに接続するときにクラッシュしないという意味" -"では\n" -"互換性がありますが、期待されるすべての新機能をサポートしているわけではない可" -"能性があります。\n" -"これにより、strict_protocol_version_checking よりも細かい管理ができます。\n" -"Minetest は依然として独自の内部最小値を強制しており、\n" -"strict_protocol_version_checking はこれをが効果的に上書きします。" +"古いクライアントは、" +"新しいサーバーに接続するときにクラッシュしないという意味では\n" +"互換性がありますが、期待するすべての新機能をサポートしていない可能性がありま" +"す。\n" +"これにより、strict_protocol_version_checking " +"よりきめ細かい制御が可能になります。\n" +"Luantiは独自の内部最小値を強制しますが、\n" +"strict_protocol_version_checking " +"を有効にすると、実質的にこれが上書きされます。" #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." @@ -3377,14 +3356,15 @@ msgid "Display Density Scaling Factor" msgstr "ディスプレイ密度スケーリング係数" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Distance in nodes at which transparency depth sorting is enabled.\n" "Use this to limit the performance impact of transparency depth sorting.\n" "Set to 0 to disable it entirely." msgstr "" -"透明度の深さの並べ替えが有効になっているノードの距離\n" -"これを使用して、透明度の深さの並べ替えによるパフォーマンスへの影響を制限" +"透明度の深さの並べ替えが有効になっているノードの距離です。\n" +"透明度の深さの並べ替えがパフォーマンスへの影響を制限するためにこれを使用しま" +"す。\n" +"完全に無効にするには 0 に設定します。" #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." @@ -3415,9 +3395,8 @@ msgid "Dungeon noise" msgstr "ダンジョンノイズ" #: src/settings_translation_file.cpp -#, fuzzy msgid "Effects" -msgstr "グラフィック効果" +msgstr "効果" #: src/settings_translation_file.cpp msgid "Enable Automatic Exposure" @@ -3521,11 +3500,8 @@ msgid "Enable random user input (only used for testing)." msgstr "ランダムなユーザー入力を有効にします (テストにのみ使用)。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Enable smooth lighting with simple ambient occlusion." -msgstr "" -"シンプルなアンビエントオクルージョンで滑らかな照明を有効にします。\n" -"速度や異なる見た目のために無効にしてください。" +msgstr "シンプルなアンビエントオクルージョンで滑らかな照明を実現にします。" #: src/settings_translation_file.cpp msgid "Enable split login/register" @@ -3546,7 +3522,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Enable updates available indicator on content tab" -msgstr "" +msgstr "コンテンツタブで利用可能な更新インジケーターを有効にする" #: src/settings_translation_file.cpp msgid "" @@ -3555,8 +3531,8 @@ msgid "" "textures)\n" "when connecting to the server." msgstr "" -"リモートメディアサーバーの使用を有効にします (サーバーによって提供\n" -"されている場合)。\n" +"リモートメディアサーバーの使用を有効にします " +"(サーバーによって提供されている場合)。\n" "リモートサーバはサーバーに接続するときにメディア (例えば、テクスチャ) を\n" "ダウンロードするための非常に高速な方法を提供します。" @@ -3595,20 +3571,20 @@ msgid "Enables animation of inventory items." msgstr "インベントリのアイテムのアニメーションを有効にします。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Enables caching of facedir rotated meshes.\n" "This is only effective with shaders disabled." -msgstr "facedir回転メッシュのキャッシングを有効にします。" +msgstr "" +"facesir回転メッシュのキャッシュを有効にします。\n" +"これはシェーダーが無効になっている場合にのみ有効です。" #: src/settings_translation_file.cpp msgid "Enables debug and error-checking in the OpenGL driver." msgstr "OpenGL ドライバでデバッグとエラーチェックを有効にします。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Enables smooth scrolling." -msgstr "後処理有効" +msgstr "滑らかなスクロールを有効にします。" #: src/settings_translation_file.cpp msgid "Enables the post processing pipeline." @@ -3621,6 +3597,10 @@ msgid "" "\"auto\" means that the touchscreen controls will be enabled and disabled\n" "automatically depending on the last used input method." msgstr "" +"タッチスクリーン制御を有効にして、タッチスクリーンでゲームをプレイできるよう" +"にします。\n" +"\"auto\" は、最後に使用した入力方法に応じて、タッチスクリーン制御が自動的に\n" +"有効または無効になることを意味します。" #: src/settings_translation_file.cpp msgid "" @@ -3956,7 +3936,7 @@ msgid "" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" "and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" -"全体的なマップ生成属性。\n" +"全体的なマップ生成属性です。\n" "マップジェネレータv6では、'decorations' フラグで木とジャングルの草を\n" "除くすべての装飾を制御しますが、他のすべてのマップジェネレータでは\n" "このフラグがすべての装飾を制御します。" @@ -4191,6 +4171,10 @@ msgid "" "ContentDB to\n" "check for package updates when opening the mainmenu." msgstr "" +"有効になっていて、コンテンツDBのパッケージがインストールされている場合、" +"Luantiは\n" +"メインメニューを開いたときにコンテンツDBに接続してパッケージの更新を確認する" +"ことがあります。" #: src/settings_translation_file.cpp msgid "" @@ -4321,13 +4305,12 @@ msgid "Instrument chat commands on registration." msgstr "チャットコマンドが登録されるとすぐに計測します。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Instrument global callback functions on registration.\n" "(anything you pass to a core.register_*() function)" msgstr "" -"グローバルコールバック関数が登録されるとすぐに計測します。\n" -"(あなたが minetest.register_*() 関数に渡すもの)" +"登録時にグローバルコールバック関数を測定します。\n" +"(core.register_*() 関数に渡すものすべて)" #: src/settings_translation_file.cpp msgid "" @@ -4531,7 +4514,6 @@ msgid "Leaves style" msgstr "葉のスタイル" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Leaves style:\n" "- Fancy: all faces visible\n" @@ -4540,11 +4522,10 @@ msgid "" msgstr "" "葉のスタイル:\n" "- Fancy: すべての面が見える\n" -"- Simple: special_tiles が定義されている場合は外側の面のみ\n" -"- Opaque: 透明性を無効化" +"- Simple: 外側の面のみ\n" +"- Opaque: 不透明" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Length of a server tick (the interval at which everything is generally " "updated),\n" @@ -4553,8 +4534,11 @@ msgid "" "This is a lower bound, i.e. server steps may not be shorter than this, but\n" "they are often longer." msgstr "" -"サーバーが時を刻む長さ (通常、すべてが更新される間隔) を秒単位で定めます。\n" -"クライアント メニューからホストされるセッションには適用されません。" +"サーバーが時を刻む長さ(すべてが通常更新される間隔)を、\n" +"秒単位で指定します。\n" +"クライアントメニューからホストされるセッションには適用されません。\n" +"これは下限値で、サーバーのステップがこれより短くなることはありませんが、\n" +"長くなることはよくあります。" #: src/settings_translation_file.cpp msgid "Length of liquid waves." @@ -4668,9 +4652,8 @@ msgid "Liquid queue purge time" msgstr "液体キューのパージ時間" #: src/settings_translation_file.cpp -#, fuzzy msgid "Liquid reflections" -msgstr "液体の流動性" +msgstr "液体の反射" #: src/settings_translation_file.cpp msgid "Liquid sinking" @@ -4678,7 +4661,7 @@ msgstr "液体中の沈降" #: src/settings_translation_file.cpp msgid "Liquid update interval in seconds." -msgstr "液体の秒単位の更新間隔。" +msgstr "液体の秒単位の更新間隔です。" #: src/settings_translation_file.cpp msgid "Liquid update tick" @@ -4903,7 +4886,7 @@ msgstr "ブロック送信最大距離" #: src/settings_translation_file.cpp msgid "Max liquids processed per step." -msgstr "ステップあたりの液体の最大処理。" +msgstr "ステップあたりの液体の最大処理数です。" #: src/settings_translation_file.cpp msgid "Max. clearobjects extra blocks" @@ -4947,7 +4930,7 @@ msgstr "マップチャンクあたりの小さな洞窟の乱数の最大値。 msgid "" "Maximum liquid resistance. Controls deceleration when entering liquid at\n" "high speed." -msgstr "最大の液体抵抗。高速で液体に入る際の減速を制御します。" +msgstr "液体抵抗の最大値です。高速で液体に入るさいの減速を制御します。" #: src/settings_translation_file.cpp msgid "" @@ -5004,6 +4987,10 @@ msgid "" "You generally don't need to change this, however busy servers may benefit " "from a higher number." msgstr "" +"低レベルのネットワーク " +"コードで送信ステップごとに送信されるパケットの最大数です。\n" +"通常、これを変更する必要はありませんが、ビジー状態のサーバーでは、数値を大き" +"くするとメリットが得られる場合があります。" #: src/settings_translation_file.cpp msgid "Maximum number of players that can be connected simultaneously." @@ -5079,7 +5066,7 @@ msgstr "接続中のプレイヤーに表示されるその日のメッセージ #: src/settings_translation_file.cpp msgid "Method used to highlight selected object." -msgstr "選択したオブジェクトを強調表示するために使用される方法。" +msgstr "選択したオブジェクトを強調表示するために使用される方法です。" #: src/settings_translation_file.cpp msgid "Minimal level of logging to be written to chat." @@ -5199,9 +5186,9 @@ msgid "" "When running a server, clients connecting with this name are admins.\n" "When starting from the main menu, this is overridden." msgstr "" -"プレイヤーの名前。\n" -"サーバーを実行している場合、この名前で接続しているクライアントは管理者\n" -"です。\n" +"プレイヤーの名前です。\n" +"サーバーを実行している場合、この名前で接続しているクライアントは\n" +"管理者です。\n" "メインメニューから起動すると、これは上書きされます。" #: src/settings_translation_file.cpp @@ -5235,7 +5222,7 @@ msgstr "ノードをハイライト" #: src/settings_translation_file.cpp msgid "Node specular" -msgstr "" +msgstr "ノード スペキュラー" #: src/settings_translation_file.cpp msgid "NodeTimer interval" @@ -5288,15 +5275,13 @@ msgid "Number of messages a player may send per 10 seconds." msgstr "プレイヤーが10秒間に送信できるメッセージの数です。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Number of threads to use for mesh generation.\n" "Value of 0 (default) will let Luanti autodetect the number of available " "threads." msgstr "" -"メッシュ生成に使用するスレッド数。\n" -"値 0 (既定値) を指定すると、Minetest は使用可能なスレッドの数を自動検出しま" -"す。" +"メッシュ生成に使用するスレッドの数です。\n" +"値 0 (既定値) を指定すると、Luantiは使用可能なスレッドの数を自動検出します。" #: src/settings_translation_file.cpp msgid "Occlusion Culler" @@ -5325,18 +5310,16 @@ msgid "OpenGL debug" msgstr "OpenGLのデバッグ" #: src/settings_translation_file.cpp -#, fuzzy msgid "Optimize GUI for touchscreens" -msgstr "タッチスクリーンに十字カーソルを使用する" +msgstr "タッチスクリーン用にGUIを最適化する" #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "チャットのウェブリンクの色を上書きするオプションです。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Other Effects" -msgstr "グラフィック効果" +msgstr "その他の効果" #: src/settings_translation_file.cpp msgid "" @@ -5360,7 +5343,7 @@ msgid "" "Path to shader directory. If no path is defined, default location will be " "used." msgstr "" -"シェーダーディレクトリへのパス。パスが定義されていない場合は、\n" +"シェーダーディレクトリへのパスです。パスが定義されていない場合は、\n" "既定の場所が使用されます。" #: src/settings_translation_file.cpp @@ -5448,17 +5431,15 @@ msgid "Prometheus listener address" msgstr "プロメテウスリスナーのアドレス" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Prometheus listener address.\n" "If Luanti is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" "Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" -"プロメテウスリスナーのアドレス。\n" -"Minetest が ENABLE_PROMETHEUS オプションを有効にしてコンパイルされている場" -"合、\n" -"そのアドレスのプロメテウスのメトリックスリスナーを有効にします。\n" +"プロメテウスリスナーのアドレスです。\n" +"Luantiが ENABLE_PROMETHEUS オプションを有効にしてコンパイルされている場合、\n" +"そのアドレスでプロメテウスのメトリックスリスナーを有効にします。\n" "メトリックスは http://127.0.0.1:30000/metrics で取得可能" #: src/settings_translation_file.cpp @@ -5484,7 +5465,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Radius to use when the block bounds HUD feature is set to near blocks." -msgstr "" +msgstr "ブロック境界HUD機能がブロックの近くに設定されている場合に使う半径です。" #: src/settings_translation_file.cpp msgid "Raises terrain to make valleys around the rivers." @@ -5519,9 +5500,8 @@ msgid "" "Remove color codes from incoming chat messages\n" "Use this to stop players from being able to use color in their messages" msgstr "" -"チャットメッセージから色コードを取り除きます\n" -"これを使用して、プレイヤーが自分のメッセージに色を使用できない\n" -"ようにします" +"チャットメッセージから色コードを取り除く\n" +"プレイヤーが自分のメッセージに色を使用できないようにする" #: src/settings_translation_file.cpp msgid "Replaces the default main menu with a custom one." @@ -5803,12 +5783,12 @@ msgstr "" msgid "" "Send names of online players to the serverlist. If disabled only the player " "count is revealed." -msgstr "" +msgstr "オンラインプレイヤーの名前をサーバー一覧に送信します。無効にすると、プレイヤ" +"ー数のみが表示されます。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Send player names to the server list" -msgstr "このサーバー一覧に告知します。" +msgstr "プレイヤー名をサーバー一覧に送信する" #: src/settings_translation_file.cpp msgid "Server" @@ -5836,6 +5816,8 @@ msgid "" "Flags are positive. Uncheck the flag to disable corresponding anticheat " "module." msgstr "" +"サーバーのアンチチート設定です。\n" +"フラグのチェックを外すと対応するアンチチートモジュールを無効にします。" #: src/settings_translation_file.cpp msgid "Server description" @@ -5987,7 +5969,7 @@ msgstr "シェーダー" msgid "" "Shaders are a fundamental part of rendering and enable advanced visual " "effects." -msgstr "" +msgstr "シェーダーはレンダリングの基本的な部分であり、高度な視覚効果を有効にします。" #: src/settings_translation_file.cpp msgid "Shadow filter quality" @@ -6056,7 +6038,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Simulate translucency when looking at foliage in the sunlight." -msgstr "" +msgstr "日光の下で葉を見るときの半透明感をシミュレートします。" #: src/settings_translation_file.cpp msgid "" @@ -6108,17 +6090,15 @@ msgid "Smooth lighting" msgstr "滑らかな照明" #: src/settings_translation_file.cpp -#, fuzzy msgid "Smooth scrolling" -msgstr "滑らかな照明" +msgstr "滑らかなスクロール" #: src/settings_translation_file.cpp msgid "" "Smooths rotation of camera when in cinematic mode, 0 to disable. Enter " "cinematic mode by using the key set in Controls." -msgstr "" -"シネマティックモードでのカメラの旋回を滑らかにし、0 で無効にします。\n" -"キー割り当てで設定されたキーを使用してシネマティックモードに切替えます。" +msgstr "シネマティックモードでのカメラの旋回を滑らかにし、0 で無効にします。キー割り" +"当てで設定されたキーを使用してシネマティックモードに切替えます。" #: src/settings_translation_file.cpp msgid "" @@ -6137,9 +6117,8 @@ msgid "Sneaking speed, in nodes per second." msgstr "スニーク時の速度、1秒あたりのノード数です。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Soft clouds" -msgstr "立体な雲" +msgstr "柔らかい雲" #: src/settings_translation_file.cpp msgid "Soft shadow radius" @@ -6366,7 +6345,6 @@ msgid "" msgstr "観測記録が保存されるワールドパスに対する相対的なファイルパスです。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The gesture for punching players/entities.\n" "This can be overridden by games and mods.\n" @@ -6385,7 +6363,7 @@ msgstr "" "使いやすく、名前は挙げませんが他のゲームでもよく知られています。\n" "\n" "* ロングタップ\n" -"古典的な Minetest のモバイル版操作として知られています。\n" +"古典的なLuantiのモバイル版操作として知られています。\n" "戦闘はほぼ不可能です。" #: src/settings_translation_file.cpp @@ -6447,7 +6425,6 @@ msgstr "" "これは active_object_send_range_blocks と一緒に設定する必要があります。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The rendering back-end.\n" "Note: A restart is required after changing this!\n" @@ -6455,14 +6432,15 @@ msgid "" msgstr "" "レンダリングのバックエンドです。\n" "注:これを変更した後は再起動が必要です!\n" -"デスクトップでは OpenGL が、Android では OGLES2 が規定です。\n" -"シェーダーは OGLES1 以外のすべてでサポートされています。" +"デスクトップではOpenGLが、AndroidではOGLES2が規定です。" #: src/settings_translation_file.cpp msgid "" "The sensitivity of the joystick axes for moving the\n" "in-game view frustum around." -msgstr "ゲーム内の視錐台を動かすためのジョイスティック軸の感度。" +msgstr "" +"ゲーム内の視錐台を動かすための\n" +"ジョイスティック軸の感度です。" #: src/settings_translation_file.cpp msgid "" @@ -6471,7 +6449,7 @@ msgid "" "setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n" "set to the nearest valid value." msgstr "" -"ノードのアンビエントオクルージョンシェーディングの強度 (暗さ)。\n" +"ノードのアンビエントオクルージョンシェーディングの強度 (暗さ)です。\n" "低いほど暗く、高いほど明るくなります。設定の有効範囲は 0.25~4.0 です。\n" "値が範囲外の場合は、最も近い有効な値に設定されます。" @@ -6481,8 +6459,9 @@ msgid "" "capacity until an attempt is made to decrease its size by dumping old queue\n" "items. A value of 0 disables the functionality." msgstr "" -"古いキューアイテムを出力してサイズを減らそうとするまでに、液体キューが\n" -"処理能力を超えて拡張できる時間(秒単位)。値 0 は機能を無効にします。" +"古いキューアイテムを出力してサイズを減らそうとするまでに、\n" +"液体キューが処理能力を超えて拡張できる時間(秒単位)です。\n" +"値 0 は機能を無効にします。" #: src/settings_translation_file.cpp msgid "" @@ -6504,7 +6483,7 @@ msgstr "" msgid "" "The time in seconds it takes between repeated node placements when holding\n" "the place button." -msgstr "設置ボタンを押したままノードの設置を繰り返す秒単位の間隔。" +msgstr "設置ボタンを押したままノードの設置を繰り返す秒単位の間隔です。" #: src/settings_translation_file.cpp msgid "The type of joystick" @@ -6562,14 +6541,16 @@ msgid "" "node." msgstr "" "ラグを減らすために、プレーヤーが何かを設置しているときブロック転送は\n" -"遅くなります。\n" -"これはノードを設置または破壊した後にどれくらい遅くなるかを決定します。" +"遅くなります。ノードを設置または破壊した後にどれくらい遅くなるかを決定します" +"。" #: src/settings_translation_file.cpp msgid "" "Tolerance of movement cheat detector.\n" "Increase the value if players experience stuttery movement." msgstr "" +"チートな動きの検出許容度です。\n" +"プレイヤーの動きがカクつく場合は値を増やします。" #: src/settings_translation_file.cpp msgid "Tooltip delay" @@ -6580,9 +6561,8 @@ msgid "Touchscreen" msgstr "タッチスクリーン" #: src/settings_translation_file.cpp -#, fuzzy msgid "Touchscreen controls" -msgstr "タッチスクリーンのしきい値" +msgstr "タッチスクリーン制御" #: src/settings_translation_file.cpp msgid "Touchscreen sensitivity" @@ -6597,9 +6577,8 @@ msgid "Tradeoffs for performance" msgstr "パフォーマンスのためのトレードオフ" #: src/settings_translation_file.cpp -#, fuzzy msgid "Translucent foliage" -msgstr "半透明な液体" +msgstr "半透明な葉" #: src/settings_translation_file.cpp msgid "Translucent liquids" @@ -6648,14 +6627,13 @@ msgstr "" "パフォーマンスの問題がある場合のみ、この設定を変更する必要があります。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "URL to JSON file which provides information about the newest Luanti " "release.\n" "If this is empty the engine will never check for updates." msgstr "" -"最新の Minetest リリースに関する情報を提供する JSON ファイルへの URL\n" -"これが空の場合、エンジンは更新をチェックしません。" +"最新のLuantiリリースに関する情報を提供するJSONファイルへの URLです。\n" +"空にするとエンジンの更新が確認されることはありません。" #: src/settings_translation_file.cpp msgid "URL to the server list displayed in the Multiplayer Tab." @@ -6748,7 +6726,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Use smooth cloud shading." -msgstr "" +msgstr "滑らかな雲を使用します。" #: src/settings_translation_file.cpp msgid "" @@ -6954,13 +6932,17 @@ msgstr "ウェブリンクの色" #: src/settings_translation_file.cpp msgid "When enabled, liquid reflections are simulated." -msgstr "" +msgstr "有効にすると、液体の反射がシミュレートされます。" #: src/settings_translation_file.cpp msgid "" "When enabled, the GUI is optimized to be more usable on touchscreens.\n" "Whether this is enabled by default depends on your hardware form-factor." msgstr "" +"有効にすると、タッチスクリーンでより使いやすくなるように GUI " +"が最適化されます。\n" +"デフォルトで有効になっているかどうかは、ハードウェアのフォームファクタに依存" +"します。" #: src/settings_translation_file.cpp msgid "" @@ -7064,7 +7046,7 @@ msgid "" "Whether to show the client debug info (has the same effect as hitting F5)." msgstr "" "クライアントのデバッグ情報を表示するかどうかの設定です\n" -"(F5を押すのと同じ効果)。" +"(F5キーを押すのと同じ効果)。" #: src/settings_translation_file.cpp msgid "Width component of the initial window size." @@ -7079,23 +7061,22 @@ msgid "Window maximized" msgstr "ウィンドウの最大化" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Windows systems only: Start Luanti with the command line window in the " "background.\n" "Contains the same information as the file debug.txt (default name)." msgstr "" -"Windowsのみ: Minetestと一緒にバックグランドでコマンドプロンプトを\n" -"起動します。\n" -"debug.txt (既定の名前) と同じ情報を含んでいます。" +"Windowsのみ: コマンドライン ウィンドウをバックグラウンドで使用して Luanti " +"を起動します。\n" +"ファイル debug.txt (デフォルト名) と同じ情報が含まれます。" #: src/settings_translation_file.cpp msgid "" "World directory (everything in the world is stored here).\n" "Not needed if starting from the main menu." msgstr "" -"ワールドを保存するディレクトリです(全てのワールドはここに保存\n" -"されます)。\n" +"ワールドを保存するディレクトリです(すべてのワールドは\n" +"ここに保存されます)。\n" "メインメニューから開始する場合必要ありません。" #: src/settings_translation_file.cpp From f25eaf126144b8e2aa85a3daa26dd632467151e2 Mon Sep 17 00:00:00 2001 From: BlackImpostor Date: Fri, 1 Nov 2024 15:12:57 +0000 Subject: [PATCH 124/178] Translated using Weblate (Russian) Currently translated at 94.7% (1310 of 1383 strings) --- .../app/src/main/res/values-ru/strings.xml | 11 + po/ru/luanti.po | 279 +++++++++--------- 2 files changed, 146 insertions(+), 144 deletions(-) create mode 100644 android/app/src/main/res/values-ru/strings.xml diff --git a/android/app/src/main/res/values-ru/strings.xml b/android/app/src/main/res/values-ru/strings.xml new file mode 100644 index 000000000..77748a9f6 --- /dev/null +++ b/android/app/src/main/res/values-ru/strings.xml @@ -0,0 +1,11 @@ + + + Загрузка Luanti + Меньше чам за 1 минуту… + Готово + Luаnti + Уведомления от Luanti + Основные уведомления + Загрузка… + Не найдено веб-браузера + \ No newline at end of file diff --git a/po/ru/luanti.po b/po/ru/luanti.po index ea7e0e1c2..4e55cc69b 100644 --- a/po/ru/luanti.po +++ b/po/ru/luanti.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: Russian (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-10-28 19:57+0100\n" -"PO-Revision-Date: 2024-10-19 17:16+0000\n" +"PO-Revision-Date: 2024-11-01 17:58+0000\n" "Last-Translator: BlackImpostor \n" "Language-Team: Russian \n" @@ -13,7 +13,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: Weblate 5.8-rc\n" +"X-Generator: Weblate 5.8.2-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -160,7 +160,7 @@ msgstr "$1 скачивается…" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "All" -msgstr "" +msgstr "Всё" #: builtin/mainmenu/content/dlg_contentdb.lua #: builtin/mainmenu/content/dlg_package.lua @@ -169,9 +169,8 @@ msgid "Back" msgstr "Назад" #: builtin/mainmenu/content/dlg_contentdb.lua -#, fuzzy msgid "ContentDB is not available when Luanti was compiled without cURL" -msgstr "ContentDB недоступен, когда Minetest скомпилирован без cURL" +msgstr "ContentDB недоступен, когда Luanti скомпилирован без cURL" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "Downloading..." @@ -179,7 +178,7 @@ msgstr "Загрузка…" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "Featured" -msgstr "" +msgstr "Рекомендуемое" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "Games" @@ -215,9 +214,8 @@ msgid "Queued" msgstr "В очереди" #: builtin/mainmenu/content/dlg_contentdb.lua -#, fuzzy msgid "Texture Packs" -msgstr "Наборы текстур" +msgstr "Наборы Текстур" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "The package $1 was not found." @@ -269,9 +267,8 @@ msgid "Dependencies:" msgstr "Зависимости:" #: builtin/mainmenu/content/dlg_install.lua -#, fuzzy msgid "Error getting dependencies for package $1" -msgstr "Ошибка при получении зависимостей для дополнения" +msgstr "Ошибка при получении зависимостей для дополнения $1" #: builtin/mainmenu/content/dlg_install.lua msgid "Install" @@ -306,44 +303,40 @@ msgid "Overwrite" msgstr "Перезаписать" #: builtin/mainmenu/content/dlg_package.lua -#, fuzzy msgid "ContentDB page" -msgstr "Ссылка ContentDB" +msgstr "Страница ContentDB" #: builtin/mainmenu/content/dlg_package.lua -#, fuzzy msgid "Description" -msgstr "Описание сервера" +msgstr "Описание" #: builtin/mainmenu/content/dlg_package.lua msgid "Donate" -msgstr "" +msgstr "Пожертвовать" #: builtin/mainmenu/content/dlg_package.lua msgid "Forum Topic" -msgstr "" +msgstr "Страница на Форуме" #: builtin/mainmenu/content/dlg_package.lua -#, fuzzy msgid "Information" -msgstr "Информация:" +msgstr "Информация" #: builtin/mainmenu/content/dlg_package.lua -#, fuzzy msgid "Install [$1]" -msgstr "Установить $1" +msgstr "Установить [$1]" #: builtin/mainmenu/content/dlg_package.lua msgid "Issue Tracker" -msgstr "" +msgstr "Треккер Проблем" #: builtin/mainmenu/content/dlg_package.lua msgid "Source" -msgstr "" +msgstr "Источник" #: builtin/mainmenu/content/dlg_package.lua msgid "Translate" -msgstr "" +msgstr "Перевести" #: builtin/mainmenu/content/dlg_package.lua builtin/mainmenu/tab_content.lua msgid "Uninstall" @@ -354,13 +347,12 @@ msgid "Update" msgstr "Обновить" #: builtin/mainmenu/content/dlg_package.lua -#, fuzzy msgid "Website" -msgstr "Посетить вебсайт" +msgstr "Веб-сайт" #: builtin/mainmenu/content/dlg_package.lua msgid "by $1 — $2 downloads — +$3 / $4 / -$5" -msgstr "" +msgstr "сделано $1 — $2 загрузок — +$3 / $4 / -$5" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" @@ -722,14 +714,13 @@ msgid "Dismiss" msgstr "Пропустить" #: builtin/mainmenu/dlg_reinstall_mtg.lua -#, fuzzy msgid "" "For a long time, Luanti shipped with a default game called \"Minetest " "Game\". Since version 5.8.0, Luanti ships without a default game." msgstr "" -"Долгое время движок Minetest поставлялся вместе с игрой по умолчанию под " -"названием «Minetest Game». Начиная с Minetest 5.8.0, Minetest поставляется " -"без игры по умолчанию." +"Долгое время движок Luanti поставлялся вместе с игрой по умолчанию под " +"названием «Minetest Game». Начиная с версии 5.8.0, Luanti поставляется без " +"игры по умолчанию." #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "" @@ -890,19 +881,16 @@ msgid "eased" msgstr "cглаженный" #: builtin/mainmenu/settings/dlg_settings.lua -#, fuzzy msgid "(The game will need to enable automatic exposure as well)" -msgstr "(В игре также необходимо будет включить тени)" +msgstr "(В игре также необходимо будет включить автоматическую экспозицию)" #: builtin/mainmenu/settings/dlg_settings.lua -#, fuzzy msgid "(The game will need to enable bloom as well)" -msgstr "(В игре также необходимо будет включить тени)" +msgstr "(В игре также нужно будет включить функцию размытия)" #: builtin/mainmenu/settings/dlg_settings.lua -#, fuzzy msgid "(The game will need to enable volumetric lighting as well)" -msgstr "(В игре также необходимо будет включить тени)" +msgstr "(В игре также необходимо будет включить объемное освещение)" #: builtin/mainmenu/settings/dlg_settings.lua msgid "(Use system language)" @@ -914,7 +902,7 @@ msgstr "Доступность" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Auto" -msgstr "" +msgstr "Авто" #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/gui/touchcontrols.cpp src/settings_translation_file.cpp @@ -945,7 +933,7 @@ msgstr "Основной" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Movement" -msgstr "Движение" +msgstr "Перемещение" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Reset setting to default" @@ -980,18 +968,16 @@ msgid "Content: Mods" msgstr "Контент: Дополнения" #: builtin/mainmenu/settings/shader_warning_component.lua -#, fuzzy msgid "Enable" -msgstr "Включено" +msgstr "Включить" #: builtin/mainmenu/settings/shader_warning_component.lua -#, fuzzy msgid "Shaders are disabled." -msgstr "Обновление камеры выключено" +msgstr "Шейдеры выключены." #: builtin/mainmenu/settings/shader_warning_component.lua msgid "This is not a recommended configuration." -msgstr "" +msgstr "Это конфигурация не рекомендуется." #: builtin/mainmenu/settings/shadows_component.lua msgid "(The game will need to enable shadows as well)" @@ -1028,7 +1014,7 @@ msgstr "Очень низкие" #: builtin/mainmenu/tab_about.lua msgid "About" -msgstr "Узнать подробнее" +msgstr "Подробней" #: builtin/mainmenu/tab_about.lua msgid "Active Contributors" @@ -1151,17 +1137,15 @@ msgid "Install games from ContentDB" msgstr "Установить игры с ContentDB" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Luanti doesn't come with a game by default." -msgstr "Minetest Game больше не стоит по умолчанию." +msgstr "Luanti больше не стоит по умолчанию." #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "" "Luanti is a game-creation platform that allows you to play many different " "games." msgstr "" -"Minetest - это платформа для создания модификаций, которая позволяет вам " +"Luanti - это платформа для создания модификаций, которая позволяет вам " "играть во множество различных игр и устанавливать дополнения." #: builtin/mainmenu/tab_local.lua @@ -1219,7 +1203,7 @@ msgstr "Избранное" #: builtin/mainmenu/tab_online.lua msgid "Incompatible Servers" -msgstr "Несовместимые серверы" +msgstr "Несовместимые Сервера" #: builtin/mainmenu/tab_online.lua msgid "Join Game" @@ -2261,37 +2245,36 @@ msgid "Sound Volume: %d%%" msgstr "Громкость звука: %d%%" #: src/gui/touchcontrols.cpp -#, fuzzy msgid "Joystick" -msgstr "ID контроллера" +msgstr "Джойстик" #: src/gui/touchcontrols.cpp msgid "Overflow menu" -msgstr "" +msgstr "Переполненное меню" #: src/gui/touchcontrols.cpp -#, fuzzy msgid "Toggle debug" -msgstr "Вкл/откл туман" +msgstr "Переключать отладку" #: src/network/clientpackethandler.cpp msgid "" "Another client is connected with this name. If your client closed " "unexpectedly, try again in a minute." msgstr "" +"Другой клиент уже подключён с таким именем. Если ваш клиент неожиданно " +"закрылся, повторите попытку через минуту." #: src/network/clientpackethandler.cpp msgid "Empty passwords are disallowed. Set a password and try again." -msgstr "" +msgstr "Пустые пароли не принимаются. Установите пароль и повторите попытку." #: src/network/clientpackethandler.cpp msgid "Internal server error" -msgstr "" +msgstr "Внутренняя ошибка сервера" #: src/network/clientpackethandler.cpp -#, fuzzy msgid "Invalid password" -msgstr "Старый пароль" +msgstr "Неверный пароль" #. ~ DO NOT TRANSLATE THIS LITERALLY! #. This is a special string which needs to contain the translation's @@ -2314,46 +2297,48 @@ msgstr "Имя занято. Пожалуйста, выберите другое #: src/network/clientpackethandler.cpp msgid "Player name contains disallowed characters" -msgstr "" +msgstr "Имя игрока содержит запрещенные символы" #: src/network/clientpackethandler.cpp -#, fuzzy msgid "Player name not allowed" -msgstr "Имя игрока слишком длинное." +msgstr "Имя игрока запрещено" #: src/network/clientpackethandler.cpp -#, fuzzy msgid "Server shutting down" -msgstr "Завершение…" +msgstr "Сервер завершает работу" #: src/network/clientpackethandler.cpp msgid "" "The server has experienced an internal error. You will now be disconnected." -msgstr "" +msgstr "У сервера произошла внутренняя ошибка. Вы будете отключены от сети." #: src/network/clientpackethandler.cpp msgid "The server is running in singleplayer mode. You cannot connect." -msgstr "" +msgstr "Сервер работает в одиночном режиме. Вам не удается подключиться." #: src/network/clientpackethandler.cpp msgid "Too many users" -msgstr "" +msgstr "Слишком много пользователей" #: src/network/clientpackethandler.cpp msgid "Unknown disconnect reason." -msgstr "" +msgstr "Неизвестная причина отключения." #: src/network/clientpackethandler.cpp msgid "" "Your client sent something the server didn't expect. Try reconnecting or " "updating your client." msgstr "" +"Ваш клиент отправил то, чего сервер не ожидал. Попробуйте повторно " +"подключиться или обновить свой клиент." #: src/network/clientpackethandler.cpp msgid "" "Your client's version is not supported.\n" "Please contact the server administrator." msgstr "" +"Версия вашего клиента не поддерживается.\n" +"Пожалуйста, свяжитесь с администратором сервера." #: src/server.cpp #, c-format @@ -2647,11 +2632,11 @@ msgstr "Метод сглаживания" #: src/settings_translation_file.cpp msgid "Anticheat flags" -msgstr "" +msgstr "Флаги Анти-чита" #: src/settings_translation_file.cpp msgid "Anticheat movement tolerance" -msgstr "" +msgstr "Допуск движения Анти-чита" #: src/settings_translation_file.cpp msgid "Append item name" @@ -2688,7 +2673,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Apply specular shading to nodes." -msgstr "" +msgstr "Применить зеркальное затенение к блокам." #: src/settings_translation_file.cpp msgid "Arm inertia" @@ -2809,9 +2794,8 @@ msgid "Biome noise" msgstr "Шум биомов" #: src/settings_translation_file.cpp -#, fuzzy msgid "Block bounds HUD radius" -msgstr "Границы мапблока" +msgstr "Радиус ограничения HUD блока" #: src/settings_translation_file.cpp msgid "Block cull optimize distance" @@ -3028,7 +3012,6 @@ msgstr "" "cpp]." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Comma-separated list of flags to hide in the content repository.\n" "\"nonfree\" can be used to hide packages which do not qualify as 'free " @@ -3038,12 +3021,13 @@ msgid "" "These flags are independent from Luanti versions,\n" "so see a full list at https://content.minetest.net/help/content_flags/" msgstr "" -"Список меток, разделённый запятыми, для скрытия в репозитории контента.\n" -"«nonfree» скрывает дополнения не являющиеся «свободным ПО»\n" -"по определению Фонда свободного программного обеспечения.\n" -"Вы также можете указать рейтинг дополнений.\n" -"Эти метки не зависят от версии Minetest,\n" -"узнать полный список можно на https://content.minetest.net/help/" +"Список разделенных запятыми флажков для скрытия в хранилище контента.\n" +"\"nonfree\" может использоваться для скрытия пакетов,\n" +"которые не подпадают под категорию Free Software Foundation,\n" +"как это определено Фондом свободного программного обеспечения.\n" +"Вы также можете указать рейтинг контента. Эти флаги не зависят от версий " +"Luanti,\n" +"поэтому смотрите полный список по адресу https://content.minetest.net/help/" "content_flags/" #: src/settings_translation_file.cpp @@ -3249,7 +3233,6 @@ msgstr "" "но также использует больше ресурсов." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Define the oldest clients allowed to connect.\n" "Older clients are compatible in the sense that they will not crash when " @@ -3263,14 +3246,12 @@ msgid "" msgstr "" "Определите, к каким самым старым клиентам разрешено подключаться.\n" "Старые клиенты совместимы в том смысле, что они не будут выходить из строя " -"при подключении\n" -"к новым серверам, но они могут поддерживать не все новые функции, которые вы " -"ожидаете.\n" +"при подключении к новым серверам,\n" +"но они могут поддерживать не все новые функции, которые вы ожидаете.\n" "Это позволяет осуществлять более детальный контроль, чем " "strict_protocol_version_checking.\n" -"Minetest по-прежнему применяет свой собственный внутренний минимум, и " -"включение\n" -"strict_protocol_version_checking эффективно отменит это." +"Luanti по-прежнему применяет свой собственный внутренний минимум,\n" +"и включение strict_protocol_version_checking эффективно отменит это." #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." @@ -3406,14 +3387,16 @@ msgid "Display Density Scaling Factor" msgstr "Коэффициент масштабирования плотности отображения" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Distance in nodes at which transparency depth sorting is enabled.\n" "Use this to limit the performance impact of transparency depth sorting.\n" "Set to 0 to disable it entirely." msgstr "" -"Расстояние в нодах на котором включено разделение по глубине прозрачности\n" -"Используйте это, чтобы ограничить его влияние на производительность" +"Расстояние в блоках, на котором включена сортировка по глубине прозрачности." +"\n" +"Используйте это значение, чтобы ограничить влияние сортировки по глубине " +"прозрачности на производительность.\n" +"Задайте значение 0, чтобы полностью отключить ее." #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." @@ -3444,9 +3427,8 @@ msgid "Dungeon noise" msgstr "Шум подземелий" #: src/settings_translation_file.cpp -#, fuzzy msgid "Effects" -msgstr "Графические эффекты" +msgstr "Эффекты" #: src/settings_translation_file.cpp msgid "Enable Automatic Exposure" @@ -3553,11 +3535,8 @@ msgid "Enable random user input (only used for testing)." msgstr "Включить случайный ввод пользователя (только для тестов)." #: src/settings_translation_file.cpp -#, fuzzy msgid "Enable smooth lighting with simple ambient occlusion." -msgstr "" -"Включить мягкое освещение с простым глобальным затенением.\n" -"Отключите для более высокой скорости или другого вида." +msgstr "Включить плавное освещение с помощью простой внешней окклюзии." #: src/settings_translation_file.cpp msgid "Enable split login/register" @@ -3579,7 +3558,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Enable updates available indicator on content tab" -msgstr "" +msgstr "Включить индикатор доступности обновлений на вкладке «Контент»" #: src/settings_translation_file.cpp msgid "" @@ -3629,20 +3608,20 @@ msgid "Enables animation of inventory items." msgstr "Включить анимацию предметов в инвентаре." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Enables caching of facedir rotated meshes.\n" "This is only effective with shaders disabled." -msgstr "Включает кэширование повёрнутых мешей." +msgstr "" +"Включает кэширование повернутых сеток facedir.\n" +"Это работает только при отключенных шейдерах." #: src/settings_translation_file.cpp msgid "Enables debug and error-checking in the OpenGL driver." msgstr "Включает отладку и проверку ошибок в драйвере OpenGL." #: src/settings_translation_file.cpp -#, fuzzy msgid "Enables smooth scrolling." -msgstr "Включить Постобработку" +msgstr "Обеспечивает плавную прокрутку." #: src/settings_translation_file.cpp msgid "Enables the post processing pipeline." @@ -3655,6 +3634,11 @@ msgid "" "\"auto\" means that the touchscreen controls will be enabled and disabled\n" "automatically depending on the last used input method." msgstr "" +"Включает сенсорные элементы управления, позволяя вам играть в игру с помощью " +"сенсорного экрана.\n" +"\"auto\" означает, что сенсорные элементы управления будут включаться и " +"отключаться\n" +"автоматически в зависимости от последнего использованного метода ввода." #: src/settings_translation_file.cpp msgid "" @@ -4225,6 +4209,9 @@ msgid "" "ContentDB to\n" "check for package updates when opening the mainmenu." msgstr "" +"Если включено и у вас установлены пакеты ContentDB, Luanti может связаться с " +"ContentDB,\n" +"чтобы проверить наличие обновлений пакетов при открытии главного меню." #: src/settings_translation_file.cpp msgid "" @@ -4356,13 +4343,12 @@ msgid "Instrument chat commands on registration." msgstr "Замерять команды чата при регистрации." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Instrument global callback functions on registration.\n" "(anything you pass to a core.register_*() function)" msgstr "" -"Замерять глобальные обратные вызовы\n" -"(всё, что вы передаёте в функции вида minetest.register_*())" +"Функции глобального обратного вызова инструмента при регистрации.\n" +"(все, что вы передаете в функцию core.register_*())" #: src/settings_translation_file.cpp msgid "" @@ -4565,7 +4551,6 @@ msgid "Leaves style" msgstr "Стиль листвы" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Leaves style:\n" "- Fancy: all faces visible\n" @@ -4574,11 +4559,10 @@ msgid "" msgstr "" "Стили листвы:\n" "- Fancy: видны все стороны\n" -"- Simple: видны внешние стороны, если используется special_tiles\n" -"- Opaque: прозачность отключена" +"- Simple: видны внешние стороны\n" +"- Opaque: отключённая прозрачность" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Length of a server tick (the interval at which everything is generally " "updated),\n" @@ -4587,9 +4571,12 @@ msgid "" "This is a lower bound, i.e. server steps may not be shorter than this, but\n" "they are often longer." msgstr "" -"Длительность тика сервера (интервал, с которым обычно все обновляется),\n" +"Длительность тика сервера (интервал, с которым обычно обновляется вся " +"информация),\n" "указанная в секундах.\n" -"Не применяется к сеансам, размещенным из клиентского меню." +"Не применяется к сеансам, размещаемым из клиентского меню.\n" +"Это нижняя граница, т.е. шаги сервера могут быть не короче этого значения,\n" +"но часто они длиннее." #: src/settings_translation_file.cpp msgid "Length of liquid waves." @@ -4704,9 +4691,8 @@ msgid "Liquid queue purge time" msgstr "Время очистки очереди жидкостей" #: src/settings_translation_file.cpp -#, fuzzy msgid "Liquid reflections" -msgstr "Текучесть жидкости" +msgstr "Отражения жидкости" #: src/settings_translation_file.cpp msgid "Liquid sinking" @@ -5043,6 +5029,10 @@ msgid "" "You generally don't need to change this, however busy servers may benefit " "from a higher number." msgstr "" +"Максимальное количество пакетов, отправляемых на шаг отправки в коде " +"низкоуровневой сети.\n" +"Обычно это не требуется изменять, однако для загруженных серверов может быть " +"полезно большее количество." #: src/settings_translation_file.cpp msgid "Maximum number of players that can be connected simultaneously." @@ -5272,7 +5262,7 @@ msgstr "Подсветка нод" #: src/settings_translation_file.cpp msgid "Node specular" -msgstr "" +msgstr "Зеркальный блок" #: src/settings_translation_file.cpp msgid "NodeTimer interval" @@ -5328,14 +5318,13 @@ msgstr "" "Количество сообщений, которые игрок может отправить в течении 10 секунд." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Number of threads to use for mesh generation.\n" "Value of 0 (default) will let Luanti autodetect the number of available " "threads." msgstr "" "Количество потоков, используемых для генерации мешей.\n" -"Значение 0 (по умолчанию) позволит Minetest автоматически определять " +"Значение 0 (по умолчанию) позволит Luanti автоматически определять " "количество доступных потоков." #: src/settings_translation_file.cpp @@ -5365,18 +5354,16 @@ msgid "OpenGL debug" msgstr "Отладка OpenGL" #: src/settings_translation_file.cpp -#, fuzzy msgid "Optimize GUI for touchscreens" -msgstr "Использовать перекрестие для сенсорного экрана" +msgstr "Оптимизирует графический интерфейс для сенсорных экранов" #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "Опциональное переопределение цвета ссылки в чате." #: src/settings_translation_file.cpp -#, fuzzy msgid "Other Effects" -msgstr "Графические эффекты" +msgstr "Другие Эффекты" #: src/settings_translation_file.cpp msgid "" @@ -5492,7 +5479,6 @@ msgid "Prometheus listener address" msgstr "Адрес прослушивания Prometheus" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Prometheus listener address.\n" "If Luanti is compiled with ENABLE_PROMETHEUS option enabled,\n" @@ -5500,7 +5486,7 @@ msgid "" "Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" "Адрес прослушивания Prometheus.\n" -"Если Minetest скомпилирован с опцией ENABLE_PROMETHEUS,\n" +"Если Luanti скомпилирован с опцией ENABLE_PROMETHEUS,\n" "включить прослушивание метрик для Prometheus по этому адресу.\n" "Метрики можно получить на http://127.0.0.1:30000/metrics" @@ -5528,6 +5514,8 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Radius to use when the block bounds HUD feature is set to near blocks." msgstr "" +"Радиус, используемый, когда функция отображения границ блоков установлена на " +"ближние блоки." #: src/settings_translation_file.cpp msgid "Raises terrain to make valleys around the rivers." @@ -5851,11 +5839,12 @@ msgid "" "Send names of online players to the serverlist. If disabled only the player " "count is revealed." msgstr "" +"Отправлять имена онлайн-игроков в список серверов. Если этот параметр " +"отключен, отображается только количество игроков." #: src/settings_translation_file.cpp -#, fuzzy msgid "Send player names to the server list" -msgstr "Анонсировать в этот список серверов." +msgstr "Отправлять имена игроков на список серверов" #: src/settings_translation_file.cpp msgid "Server" @@ -5883,6 +5872,9 @@ msgid "" "Flags are positive. Uncheck the flag to disable corresponding anticheat " "module." msgstr "" +"Конфигурация Ати-чита сервера.\n" +"Флажки являются положительными. Снимите флажок, чтобы отключить " +"соответствующий модуль анти-чита." #: src/settings_translation_file.cpp msgid "Server description" @@ -6037,6 +6029,8 @@ msgid "" "Shaders are a fundamental part of rendering and enable advanced visual " "effects." msgstr "" +"Шейдеры являются фундаментальной частью рендеринга и обеспечивают " +"расширенные визуальные эффекты." #: src/settings_translation_file.cpp msgid "Shadow filter quality" @@ -6107,7 +6101,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Simulate translucency when looking at foliage in the sunlight." -msgstr "" +msgstr "Имитировать прозрачность при взгляде на листву в солнечном свете." #: src/settings_translation_file.cpp msgid "" @@ -6161,9 +6155,8 @@ msgid "Smooth lighting" msgstr "Мягкое освещение" #: src/settings_translation_file.cpp -#, fuzzy msgid "Smooth scrolling" -msgstr "Мягкое освещение" +msgstr "Плавная прокрутка" #: src/settings_translation_file.cpp msgid "" @@ -6191,9 +6184,8 @@ msgid "Sneaking speed, in nodes per second." msgstr "Скорость ходьбы украдкой, в нодах в секунду." #: src/settings_translation_file.cpp -#, fuzzy msgid "Soft clouds" -msgstr "Объёмные облака" +msgstr "Мягкие облака" #: src/settings_translation_file.cpp msgid "Soft shadow radius" @@ -6431,7 +6423,6 @@ msgstr "" "Путь к файлу, куда будут сохранены профили, относительно пути к вашему миру." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The gesture for punching players/entities.\n" "This can be overridden by games and mods.\n" @@ -6451,7 +6442,7 @@ msgstr "" "указываются.\n" "\n" "* длинный удар\n" -"Известен по классическому мобильному элементу управления Minetest.\n" +"Известен по классическому мобильному элементу управления Luanti.\n" "Сражение более или менее невозможно." #: src/settings_translation_file.cpp @@ -6516,7 +6507,6 @@ msgstr "" "Это должно быть настроено вместе с active_object_send_range_blocks." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The rendering back-end.\n" "Note: A restart is required after changing this!\n" @@ -6525,8 +6515,7 @@ msgstr "" "Серверная часть рендеринга.\n" "Примечание: После изменения этого параметра требуется перезагрузка!\n" "По умолчанию для настольных компьютеров используется OpenGL, а для Android - " -"OGLES2.\n" -"Шейдеры поддерживаются всеми, кроме OGLES1." +"OGLES2." #: src/settings_translation_file.cpp msgid "" @@ -6651,6 +6640,8 @@ msgid "" "Tolerance of movement cheat detector.\n" "Increase the value if players experience stuttery movement." msgstr "" +"Детектор читерства \"Устойчивость к движению\".\n" +"Увеличьте значение, если игроки начинают неуверенно двигаться." #: src/settings_translation_file.cpp msgid "Tooltip delay" @@ -6661,9 +6652,8 @@ msgid "Touchscreen" msgstr "Сенсорный экран" #: src/settings_translation_file.cpp -#, fuzzy msgid "Touchscreen controls" -msgstr "Порог сенсорного экрана" +msgstr "Сенсорное управление" #: src/settings_translation_file.cpp msgid "Touchscreen sensitivity" @@ -6678,9 +6668,8 @@ msgid "Tradeoffs for performance" msgstr "Компромиссы для производительности" #: src/settings_translation_file.cpp -#, fuzzy msgid "Translucent foliage" -msgstr "Полупрозрачные жидкости" +msgstr "Полупрозрачная листва" #: src/settings_translation_file.cpp msgid "Translucent liquids" @@ -6731,14 +6720,13 @@ msgstr "" "производительностью." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "URL to JSON file which provides information about the newest Luanti " "release.\n" "If this is empty the engine will never check for updates." msgstr "" "URL-адрес файла JSON, который предоставляет информацию о последней версии " -"Minetest\n" +"Luanti.\n" "Если поле не заполнено, движок никогда не будет проверять наличие обновлений." #: src/settings_translation_file.cpp @@ -6838,7 +6826,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Use smooth cloud shading." -msgstr "" +msgstr "Используйте плавный шейдинг облаков." #: src/settings_translation_file.cpp msgid "" @@ -7046,13 +7034,17 @@ msgstr "Цвет ссылки" #: src/settings_translation_file.cpp msgid "When enabled, liquid reflections are simulated." -msgstr "" +msgstr "При включении имитируются отражения от жидкости." #: src/settings_translation_file.cpp msgid "" "When enabled, the GUI is optimized to be more usable on touchscreens.\n" "Whether this is enabled by default depends on your hardware form-factor." msgstr "" +"Если этот параметр будет включен, графический интерфейс оптимизирован для " +"более удобного использования на сенсорных экранах.\n" +"Будет ли он включен по умолчанию, зависит от форм-фактора вашего " +"оборудования." #: src/settings_translation_file.cpp msgid "" @@ -7167,15 +7159,14 @@ msgid "Window maximized" msgstr "Окно развёрнуто" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Windows systems only: Start Luanti with the command line window in the " "background.\n" "Contains the same information as the file debug.txt (default name)." msgstr "" -"Только для Windows: запускать Minetest с окном командной строки на заднем " -"плане\n" -"Содержит ту же информацию, что и файл debug.txt (имя файла по умолчанию)." +"Только для систем Windows: Запустите Luanti с помощью окна командной строки " +"в фоновом режиме.\n" +"Содержит ту же информацию, что и файл debug.txt (имя по умолчанию)." #: src/settings_translation_file.cpp msgid "" From eed109c72450a1b44e8ea1027fe2f834f37d8240 Mon Sep 17 00:00:00 2001 From: chocomint Date: Fri, 1 Nov 2024 16:58:32 +0000 Subject: [PATCH 125/178] Translated using Weblate (Spanish) Currently translated at 96.6% (1337 of 1383 strings) --- po/es/luanti.po | 166 +++++++++++++++++++++--------------------------- 1 file changed, 72 insertions(+), 94 deletions(-) diff --git a/po/es/luanti.po b/po/es/luanti.po index 966f234db..749e4f320 100644 --- a/po/es/luanti.po +++ b/po/es/luanti.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Spanish (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-10-28 19:57+0100\n" -"PO-Revision-Date: 2024-10-12 03:08+0000\n" -"Last-Translator: gallegonovato \n" +"PO-Revision-Date: 2024-11-01 22:24+0000\n" +"Last-Translator: chocomint \n" "Language-Team: Spanish \n" "Language: es\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.8-dev\n" +"X-Generator: Weblate 5.8.2-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -159,7 +159,7 @@ msgstr "$1 descargando..." #: builtin/mainmenu/content/dlg_contentdb.lua msgid "All" -msgstr "" +msgstr "Todo" #: builtin/mainmenu/content/dlg_contentdb.lua #: builtin/mainmenu/content/dlg_package.lua @@ -168,10 +168,8 @@ msgid "Back" msgstr "Atrás" #: builtin/mainmenu/content/dlg_contentdb.lua -#, fuzzy msgid "ContentDB is not available when Luanti was compiled without cURL" -msgstr "" -"ContentDB no se encuentra disponible cuando Minetest se compiló sin cURL" +msgstr "ContentDB no se encuentra disponible cuando Luanti se compiló sin cURL" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "Downloading..." @@ -179,7 +177,7 @@ msgstr "Descargando..." #: builtin/mainmenu/content/dlg_contentdb.lua msgid "Featured" -msgstr "" +msgstr "Destacado" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "Games" @@ -215,9 +213,8 @@ msgid "Queued" msgstr "En cola" #: builtin/mainmenu/content/dlg_contentdb.lua -#, fuzzy msgid "Texture Packs" -msgstr "Paq. de texturas" +msgstr "Paquetes de texturas" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "The package $1 was not found." @@ -269,9 +266,8 @@ msgid "Dependencies:" msgstr "Dependencias:" #: builtin/mainmenu/content/dlg_install.lua -#, fuzzy msgid "Error getting dependencies for package $1" -msgstr "Error obteniendo dependencias para el paquete" +msgstr "Error obteniendo dependencias para el paquete $1" #: builtin/mainmenu/content/dlg_install.lua msgid "Install" @@ -306,44 +302,40 @@ msgid "Overwrite" msgstr "Sobreescribir" #: builtin/mainmenu/content/dlg_package.lua -#, fuzzy msgid "ContentDB page" -msgstr "URL de ContentDB" +msgstr "Página de ContentDB" #: builtin/mainmenu/content/dlg_package.lua -#, fuzzy msgid "Description" -msgstr "Descripción del servidor" +msgstr "Descripción" #: builtin/mainmenu/content/dlg_package.lua msgid "Donate" -msgstr "" +msgstr "Donar" #: builtin/mainmenu/content/dlg_package.lua msgid "Forum Topic" -msgstr "" +msgstr "Tema del foro" #: builtin/mainmenu/content/dlg_package.lua -#, fuzzy msgid "Information" -msgstr "Información:" +msgstr "Información" #: builtin/mainmenu/content/dlg_package.lua -#, fuzzy msgid "Install [$1]" -msgstr "Instalar $1" +msgstr "Instalar [$1]" #: builtin/mainmenu/content/dlg_package.lua msgid "Issue Tracker" -msgstr "" +msgstr "Rastreador de problemas" #: builtin/mainmenu/content/dlg_package.lua msgid "Source" -msgstr "" +msgstr "Fuente" #: builtin/mainmenu/content/dlg_package.lua msgid "Translate" -msgstr "" +msgstr "Traducir" #: builtin/mainmenu/content/dlg_package.lua builtin/mainmenu/tab_content.lua msgid "Uninstall" @@ -354,13 +346,12 @@ msgid "Update" msgstr "Actualizar" #: builtin/mainmenu/content/dlg_package.lua -#, fuzzy msgid "Website" -msgstr "Visitar el sitio web" +msgstr "Sitio web" #: builtin/mainmenu/content/dlg_package.lua msgid "by $1 — $2 downloads — +$3 / $4 / -$5" -msgstr "" +msgstr "por $1 — $2 descargas — +$3 / $4 / -$5" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" @@ -725,13 +716,12 @@ msgid "Dismiss" msgstr "Descartar" #: builtin/mainmenu/dlg_reinstall_mtg.lua -#, fuzzy msgid "" "For a long time, Luanti shipped with a default game called \"Minetest " "Game\". Since version 5.8.0, Luanti ships without a default game." msgstr "" -"Por un largo tiempo, el motor de Minetest incluía un juego default llamado " -"\"Minetest Game\". Desde Minetest 5.8.0, Minetest se incluye sin un juego " +"Por un largo tiempo, Luanti incluía un juego predeterminado llamado " +"'Minetest Game'. Desde la versión 5.8.0, Luanti se incluye sin un juego " "predeterminado." #: builtin/mainmenu/dlg_reinstall_mtg.lua @@ -894,19 +884,16 @@ msgid "eased" msgstr "Suavizado" #: builtin/mainmenu/settings/dlg_settings.lua -#, fuzzy msgid "(The game will need to enable automatic exposure as well)" -msgstr "(El juego necesitará habilitar las sombras también)" +msgstr "(El juego necesitará habilitar la exposición automática también)" #: builtin/mainmenu/settings/dlg_settings.lua -#, fuzzy msgid "(The game will need to enable bloom as well)" -msgstr "(El juego necesitará habilitar las sombras también)" +msgstr "(El juego necesitará habilitar el efecto de bloom también)" #: builtin/mainmenu/settings/dlg_settings.lua -#, fuzzy msgid "(The game will need to enable volumetric lighting as well)" -msgstr "(El juego necesitará habilitar las sombras también)" +msgstr "(El juego necesitará habilitar la iluminación volumétrica también)" #: builtin/mainmenu/settings/dlg_settings.lua msgid "(Use system language)" @@ -918,7 +905,7 @@ msgstr "Accesibilidad" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Auto" -msgstr "" +msgstr "Automático" #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/gui/touchcontrols.cpp src/settings_translation_file.cpp @@ -984,18 +971,16 @@ msgid "Content: Mods" msgstr "Contenido: Mods" #: builtin/mainmenu/settings/shader_warning_component.lua -#, fuzzy msgid "Enable" -msgstr "Activado" +msgstr "Habilitar" #: builtin/mainmenu/settings/shader_warning_component.lua -#, fuzzy msgid "Shaders are disabled." -msgstr "Actualización de la cámara desactivada" +msgstr "Los Shaders están deshabilitados." #: builtin/mainmenu/settings/shader_warning_component.lua msgid "This is not a recommended configuration." -msgstr "" +msgstr "Esta no es una configuración recomendada." #: builtin/mainmenu/settings/shadows_component.lua msgid "(The game will need to enable shadows as well)" @@ -1155,18 +1140,16 @@ msgid "Install games from ContentDB" msgstr "Instalar juegos desde ContentDB" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Luanti doesn't come with a game by default." -msgstr "Minetest no viene con un juego por defecto." +msgstr "Luanti no viene con un juego por defecto." #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "" "Luanti is a game-creation platform that allows you to play many different " "games." msgstr "" -"Minetest es una plataforma de creación de juegos que te permite jugar a " -"muchos juegos diferentes." +"Luanti es una plataforma de creación de juegos que te permite jugar a muchos " +"diferentes juegos." #: builtin/mainmenu/tab_local.lua msgid "New" @@ -2273,37 +2256,38 @@ msgid "Sound Volume: %d%%" msgstr "Volumen del sonido: %d%%" #: src/gui/touchcontrols.cpp -#, fuzzy msgid "Joystick" -msgstr "ID de Joystick" +msgstr "Joystick" #: src/gui/touchcontrols.cpp msgid "Overflow menu" -msgstr "" +msgstr "Menú de desborde" #: src/gui/touchcontrols.cpp -#, fuzzy msgid "Toggle debug" -msgstr "Alternar la niebla" +msgstr "Alternar depuración" #: src/network/clientpackethandler.cpp msgid "" "Another client is connected with this name. If your client closed " "unexpectedly, try again in a minute." msgstr "" +"Otro cliente está conectado con este nombre. Si su cliente se cerró " +"inesperadamente, intente nuevamente en un minuto." #: src/network/clientpackethandler.cpp msgid "Empty passwords are disallowed. Set a password and try again." msgstr "" +"Las contraseñas vacías no están permitidas. Establezca una contraseña y " +"vuelva a intentarlo." #: src/network/clientpackethandler.cpp msgid "Internal server error" -msgstr "" +msgstr "Error interno del servidor" #: src/network/clientpackethandler.cpp -#, fuzzy msgid "Invalid password" -msgstr "Contraseña anterior" +msgstr "Contraseña inválida" #. ~ DO NOT TRANSLATE THIS LITERALLY! #. This is a special string which needs to contain the translation's @@ -2326,30 +2310,30 @@ msgstr "El nombre ya ha sido tomado. Por favor, elegir otro nombre" #: src/network/clientpackethandler.cpp msgid "Player name contains disallowed characters" -msgstr "" +msgstr "El nombre del jugador contiene caracteres no permitidos" #: src/network/clientpackethandler.cpp -#, fuzzy msgid "Player name not allowed" -msgstr "Nombre de jugador demasiado largo." +msgstr "Nombre de jugador no permitido" #: src/network/clientpackethandler.cpp -#, fuzzy msgid "Server shutting down" -msgstr "Cerrando..." +msgstr "El servidor se está cerrando" #: src/network/clientpackethandler.cpp msgid "" "The server has experienced an internal error. You will now be disconnected." msgstr "" +"El servidor ha experimentado un error interno. Ahora serás desconectado." #: src/network/clientpackethandler.cpp msgid "The server is running in singleplayer mode. You cannot connect." msgstr "" +"El servidor está funcionando en modo un jugador. No puedes conectarte." #: src/network/clientpackethandler.cpp msgid "Too many users" -msgstr "" +msgstr "Muchos usuarios" #: src/network/clientpackethandler.cpp msgid "Unknown disconnect reason." @@ -2831,9 +2815,8 @@ msgid "Biome noise" msgstr "Ruido del bioma" #: src/settings_translation_file.cpp -#, fuzzy msgid "Block bounds HUD radius" -msgstr "Límites de bloque" +msgstr "Radio de límites de bloque en HUD" #: src/settings_translation_file.cpp msgid "Block cull optimize distance" @@ -3049,7 +3032,6 @@ msgstr "" "Útil para pruebas. Ver al_extensions.[h,cpp] para más detalles." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Comma-separated list of flags to hide in the content repository.\n" "\"nonfree\" can be used to hide packages which do not qualify as 'free " @@ -3059,14 +3041,14 @@ msgid "" "These flags are independent from Luanti versions,\n" "so see a full list at https://content.minetest.net/help/content_flags/" msgstr "" -"Lista separada por comas de etiquetas a ocultar en el repositorio de " +"Lista de banderas separadas por comas para ocultar en el repositorio de " "contenido.\n" -"Se puede usar la etiqueta 'nonfree' para ocultar paquetes que no califican\n" -"como \"software libre\", tal como es definido por la Fundación de Software " -"Libre (FSF).\n" +"\"nonfree\" se puede usar para ocultar paquetes que no califican como " +"'software libre',\n" +"según lo definido por la Free Software Foundation.\n" "También puedes especificar clasificaciones de contenido.\n" -"Estas etiquetas son independientes de la versión de Minetest.\n" -"Si quieres ver una lista completa visita https://content.minetest.net/help/" +"Estas banderas son independientes de las versiones de Luanti,\n" +"así que consulta una lista completa en https://content.minetest.net/help/" "content_flags/" #: src/settings_translation_file.cpp @@ -3273,7 +3255,6 @@ msgstr "" "pero tambien utiliza más recursos." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Define the oldest clients allowed to connect.\n" "Older clients are compatible in the sense that they will not crash when " @@ -3285,15 +3266,15 @@ msgid "" "Luanti still enforces its own internal minimum, and enabling\n" "strict_protocol_version_checking will effectively override this." msgstr "" -"Definir los clientes más antiguos con permiso para conectarse.\n" -"Los clientes más antiguos no se colgarán al intento de conectarse\n" -"a nuevos servidores, pero no soportarán todas las nuevas características que " -"espera.\n" -"Esto permite un control mucho más ajustado que " -"strict_protocol_version_checking.\n" -"Aún así, Minetest sigue forzando su minimo interno, y activar\n" -"strict_protocol_version_checking ignorará efectivamente todos los parámetros " -"que haya definido." +"Define los clientes más antiguos permitidos para conectarse.\n" +"Los clientes más antiguos son compatibles en el sentido de que no se " +"bloquearán al conectarse\n" +"a nuevos servidores, pero pueden no soportar todas las nuevas " +"características que esperas.\n" +"Esto permite un control más detallado que la verificación estricta de la " +"versión del protocolo.\n" +"Luanti aún aplica su propio mínimo interno, y habilitar la verificación " +"estricta de la versión del protocolo anulará efectivamente esto." #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." @@ -3432,16 +3413,16 @@ msgid "Display Density Scaling Factor" msgstr "Factor del Escalado de la Densidad de Visualización" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Distance in nodes at which transparency depth sorting is enabled.\n" "Use this to limit the performance impact of transparency depth sorting.\n" "Set to 0 to disable it entirely." msgstr "" "Distancia en nodos a la que se activa la clasificación por profundidad de " -"transparencia\n" +"transparencia.\n" "Utilice esto para limitar el impacto en el rendimiento de la clasificación " -"por profundidad de transparencia" +"por profundidad de transparencia.\n" +"Establezca en 0 para desactivarlo por completo." #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." @@ -3473,9 +3454,8 @@ msgid "Dungeon noise" msgstr "Ruido de mazmorra" #: src/settings_translation_file.cpp -#, fuzzy msgid "Effects" -msgstr "Efectos gráficos" +msgstr "Efectos" #: src/settings_translation_file.cpp msgid "Enable Automatic Exposure" @@ -3584,11 +3564,8 @@ msgid "Enable random user input (only used for testing)." msgstr "Habilitar entrada aleatoria (solo usar para pruebas)." #: src/settings_translation_file.cpp -#, fuzzy msgid "Enable smooth lighting with simple ambient occlusion." -msgstr "" -"Habilita iluminación suave con oclusión ambiental simple.\n" -"Deshabilítalo para mayor velocidad o una vista diferente." +msgstr "Habilita iluminación suave con oclusión ambiental simple." #: src/settings_translation_file.cpp msgid "Enable split login/register" @@ -3659,20 +3636,21 @@ msgid "Enables animation of inventory items." msgstr "Habilita la animación de objetos en el inventario." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Enables caching of facedir rotated meshes.\n" "This is only effective with shaders disabled." -msgstr "Habilitar cacheado de mallas giradas." +msgstr "" +"Habilita el almacenamiento en caché de mallas rotadas por dirección de cara." +"\n" +"Esto solo es efectivo con los shaders desactivados." #: src/settings_translation_file.cpp msgid "Enables debug and error-checking in the OpenGL driver." msgstr "Activa depuración y comprobación de errores en el driver OpenGL." #: src/settings_translation_file.cpp -#, fuzzy msgid "Enables smooth scrolling." -msgstr "Habilitar posprocesamiento" +msgstr "Habilita el desplazamiento suave." #: src/settings_translation_file.cpp msgid "Enables the post processing pipeline." From c96455b2e4591fdccebd639387cb2927ec108b81 Mon Sep 17 00:00:00 2001 From: gallegonovato Date: Fri, 1 Nov 2024 18:11:21 +0000 Subject: [PATCH 126/178] Translated using Weblate (Spanish) Currently translated at 98.6% (1365 of 1383 strings) --- po/es/luanti.po | 73 +++++++++++++++++++++++++++++++++++-------------- 1 file changed, 53 insertions(+), 20 deletions(-) diff --git a/po/es/luanti.po b/po/es/luanti.po index 749e4f320..cb6444177 100644 --- a/po/es/luanti.po +++ b/po/es/luanti.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Spanish (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-10-28 19:57+0100\n" -"PO-Revision-Date: 2024-11-01 22:24+0000\n" -"Last-Translator: chocomint \n" +"PO-Revision-Date: 2024-11-01 22:25+0000\n" +"Last-Translator: gallegonovato \n" "Language-Team: Spanish \n" "Language: es\n" @@ -347,7 +347,7 @@ msgstr "Actualizar" #: builtin/mainmenu/content/dlg_package.lua msgid "Website" -msgstr "Sitio web" +msgstr "Página web" #: builtin/mainmenu/content/dlg_package.lua msgid "by $1 — $2 downloads — +$3 / $4 / -$5" @@ -720,8 +720,8 @@ msgid "" "For a long time, Luanti shipped with a default game called \"Minetest " "Game\". Since version 5.8.0, Luanti ships without a default game." msgstr "" -"Por un largo tiempo, Luanti incluía un juego predeterminado llamado " -"'Minetest Game'. Desde la versión 5.8.0, Luanti se incluye sin un juego " +"Durante mucho tiempo, Luanti se entregó con un juego predeterminado llamado " +"\"Minetest Game\". Desde la versión 5.8.0, Luanti se entrega sin un juego " "predeterminado." #: builtin/mainmenu/dlg_reinstall_mtg.lua @@ -729,16 +729,16 @@ msgid "" "If you want to continue playing in your Minetest Game worlds, you need to " "reinstall Minetest Game." msgstr "" -"Si quieres continuar jugando en tus mundos de Minetest, necesitarás " -"reinstalar Minetest Game." +"Si deseas seguir jugando en los mundos de Minetest Game, deberás reinstalar " +"Minetest Game." #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "Minetest Game is no longer installed by default" -msgstr "Minetest Game ya no es instalado por predeterminado" +msgstr "Minetest Game ya no se instala de forma predeterminada" #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "Reinstall Minetest Game" -msgstr "Reinstala Minetest Game" +msgstr "Reinstalar Minetest Game" #: builtin/mainmenu/dlg_rename_modpack.lua msgid "Accept" @@ -893,7 +893,7 @@ msgstr "(El juego necesitará habilitar el efecto de bloom también)" #: builtin/mainmenu/settings/dlg_settings.lua msgid "(The game will need to enable volumetric lighting as well)" -msgstr "(El juego necesitará habilitar la iluminación volumétrica también)" +msgstr "(El juego también deberá habilitar la iluminación volumétrica)" #: builtin/mainmenu/settings/dlg_settings.lua msgid "(Use system language)" @@ -2333,23 +2333,27 @@ msgstr "" #: src/network/clientpackethandler.cpp msgid "Too many users" -msgstr "Muchos usuarios" +msgstr "Demasiados usuarios" #: src/network/clientpackethandler.cpp msgid "Unknown disconnect reason." -msgstr "" +msgstr "Motivo de desconexión desconocido." #: src/network/clientpackethandler.cpp msgid "" "Your client sent something the server didn't expect. Try reconnecting or " "updating your client." msgstr "" +"Su cliente envió algo que el servidor no esperaba. Intente reconectarse o " +"actualizar su cliente." #: src/network/clientpackethandler.cpp msgid "" "Your client's version is not supported.\n" "Please contact the server administrator." msgstr "" +"La versión de su cliente no es compatible.\n" +"Por favor, póngase en contacto con el administrador del servidor." #: src/server.cpp #, c-format @@ -2654,11 +2658,11 @@ msgstr "Método de suavizado" #: src/settings_translation_file.cpp msgid "Anticheat flags" -msgstr "" +msgstr "Banderas antitrampas" #: src/settings_translation_file.cpp msgid "Anticheat movement tolerance" -msgstr "" +msgstr "Tolerancia al movimiento antitrampas" #: src/settings_translation_file.cpp msgid "Append item name" @@ -2695,7 +2699,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Apply specular shading to nodes." -msgstr "" +msgstr "Aplique la sombra especulativa a los nodos." #: src/settings_translation_file.cpp msgid "Arm inertia" @@ -3587,6 +3591,8 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Enable updates available indicator on content tab" msgstr "" +"Habilitar el indicador de actualizaciones disponibles en la pestaña de " +"contenido" #: src/settings_translation_file.cpp msgid "" @@ -3650,11 +3656,11 @@ msgstr "Activa depuración y comprobación de errores en el driver OpenGL." #: src/settings_translation_file.cpp msgid "Enables smooth scrolling." -msgstr "Habilita el desplazamiento suave." +msgstr "Activar el desplazamiento suave." #: src/settings_translation_file.cpp msgid "Enables the post processing pipeline." -msgstr "Activas el proceso de posprocesamiento." +msgstr "Habilita la canalización para el posprocesamiento." #: src/settings_translation_file.cpp msgid "" @@ -3663,6 +3669,11 @@ msgid "" "\"auto\" means that the touchscreen controls will be enabled and disabled\n" "automatically depending on the last used input method." msgstr "" +"Habilita los controles de pantalla táctil, lo que te permite jugar el juego " +"con una pantalla táctil.\n" +"\"auto\" significa que los controles de la pantalla táctil se habilitarán y " +"deshabilitarán\n" +"automáticamente dependiendo del último método de entrada utilizado." #: src/settings_translation_file.cpp msgid "" @@ -4248,6 +4259,9 @@ msgid "" "ContentDB to\n" "check for package updates when opening the mainmenu." msgstr "" +"Si está habilitado y tiene paquetes ContentDB instalados, Luanti puede " +"comunicarse con ContentDB para\n" +"Compruebe si hay actualizaciones del paquete al abrir el menú principal." #: src/settings_translation_file.cpp msgid "" @@ -5099,6 +5113,10 @@ msgid "" "You generally don't need to change this, however busy servers may benefit " "from a higher number." msgstr "" +"Número máximo de paquetes enviados por paso de envío en el código de red de " +"bajo nivel.\n" +"Generalmente no es necesario cambiar esto, sin embargo los servidores " +"ocupados pueden beneficiarse de un número mayor." #: src/settings_translation_file.cpp msgid "Maximum number of players that can be connected simultaneously." @@ -5597,6 +5615,8 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Radius to use when the block bounds HUD feature is set to near blocks." msgstr "" +"El radio que se utilizará cuando la función HUD de límite de bloque está en " +"el modo Bloques cercanos." #: src/settings_translation_file.cpp msgid "Raises terrain to make valleys around the rivers." @@ -5928,6 +5948,8 @@ msgid "" "Send names of online players to the serverlist. If disabled only the player " "count is revealed." msgstr "" +"Envía los nombres de los jugadores en línea a la lista de servidores. Si " +"está deshabilitada, solo se revela el número de jugadores." #: src/settings_translation_file.cpp #, fuzzy @@ -5960,6 +5982,9 @@ msgid "" "Flags are positive. Uncheck the flag to disable corresponding anticheat " "module." msgstr "" +"Configuración antitrampas del servidor.\n" +"Las banderas son positivas. Desmarque la bandera para desactivar el módulo " +"antitrampas correspondiente." #: src/settings_translation_file.cpp msgid "Server description" @@ -6120,6 +6145,8 @@ msgid "" "Shaders are a fundamental part of rendering and enable advanced visual " "effects." msgstr "" +"Los Shaders son una parte fundamental del renderizado y permiten efectos " +"visuales avanzados." #: src/settings_translation_file.cpp msgid "Shadow filter quality" @@ -6192,7 +6219,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Simulate translucency when looking at foliage in the sunlight." -msgstr "" +msgstr "Simule la translucidez al mirar el follaje a la luz del sol." #: src/settings_translation_file.cpp msgid "" @@ -6746,6 +6773,8 @@ msgid "" "Tolerance of movement cheat detector.\n" "Increase the value if players experience stuttery movement." msgstr "" +"Detector de trampas de tolerancia de movimiento.\n" +"Aumente el valor si los jugadores experimentan movimientos entrecortados." #: src/settings_translation_file.cpp msgid "Tooltip delay" @@ -6931,7 +6960,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Use smooth cloud shading." -msgstr "" +msgstr "Utilice un sombreado de nubes suave." #: src/settings_translation_file.cpp msgid "" @@ -7140,13 +7169,17 @@ msgstr "Color de los enlaces web" #: src/settings_translation_file.cpp msgid "When enabled, liquid reflections are simulated." -msgstr "" +msgstr "Cuando está habilitado, se simulan reflejos de líquidos." #: src/settings_translation_file.cpp msgid "" "When enabled, the GUI is optimized to be more usable on touchscreens.\n" "Whether this is enabled by default depends on your hardware form-factor." msgstr "" +"Cuando está habilitada, la GUI se optimiza para que sea más fácil de usar en " +"pantallas táctiles.\n" +"Si esta opción está habilitada de manera predeterminada depende del factor " +"de forma de su hardware." #: src/settings_translation_file.cpp msgid "" From 112c0719cde3dadf19e5cdfdff5707bc98840e39 Mon Sep 17 00:00:00 2001 From: y5nw Date: Fri, 1 Nov 2024 19:43:19 +0000 Subject: [PATCH 127/178] Translated using Weblate (Chinese (Simplified Han script)) Currently translated at 91.7% (1269 of 1383 strings) --- po/zh_CN/luanti.po | 51 +++++++++++++++++++++++----------------------- 1 file changed, 25 insertions(+), 26 deletions(-) diff --git a/po/zh_CN/luanti.po b/po/zh_CN/luanti.po index 12789f9dc..6fdf6bbec 100644 --- a/po/zh_CN/luanti.po +++ b/po/zh_CN/luanti.po @@ -3,16 +3,16 @@ msgstr "" "Project-Id-Version: Chinese (Simplified) (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-10-28 19:57+0100\n" -"PO-Revision-Date: 2024-07-31 22:09+0000\n" +"PO-Revision-Date: 2024-11-01 22:24+0000\n" "Last-Translator: y5nw \n" -"Language-Team: Chinese (Simplified) \n" +"Language-Team: Chinese (Simplified Han script) \n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 5.7-dev\n" +"X-Generator: Weblate 5.8.2-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -267,9 +267,8 @@ msgid "Dependencies:" msgstr "依赖项:" #: builtin/mainmenu/content/dlg_install.lua -#, fuzzy msgid "Error getting dependencies for package $1" -msgstr "无法获取这个包的依赖项" +msgstr "无法获取$1的依赖项" #: builtin/mainmenu/content/dlg_install.lua msgid "Install" @@ -309,9 +308,8 @@ msgid "ContentDB page" msgstr "ContentDB网址" #: builtin/mainmenu/content/dlg_package.lua -#, fuzzy msgid "Description" -msgstr "服务器描述" +msgstr "描述" #: builtin/mainmenu/content/dlg_package.lua msgid "Donate" @@ -324,7 +322,7 @@ msgstr "" #: builtin/mainmenu/content/dlg_package.lua #, fuzzy msgid "Information" -msgstr "信息:" +msgstr "信息" #: builtin/mainmenu/content/dlg_package.lua #, fuzzy @@ -337,11 +335,11 @@ msgstr "" #: builtin/mainmenu/content/dlg_package.lua msgid "Source" -msgstr "" +msgstr "源代码" #: builtin/mainmenu/content/dlg_package.lua msgid "Translate" -msgstr "" +msgstr "翻译" #: builtin/mainmenu/content/dlg_package.lua builtin/mainmenu/tab_content.lua msgid "Uninstall" @@ -352,9 +350,8 @@ msgid "Update" msgstr "更新" #: builtin/mainmenu/content/dlg_package.lua -#, fuzzy msgid "Website" -msgstr "访问网站" +msgstr "网站" #: builtin/mainmenu/content/dlg_package.lua msgid "by $1 — $2 downloads — +$3 / $4 / -$5" @@ -718,8 +715,8 @@ msgid "" "For a long time, Luanti shipped with a default game called \"Minetest " "Game\". Since version 5.8.0, Luanti ships without a default game." msgstr "" -"一直以来,Minetest 游戏引擎默认已经自带了“Minetest Game”这个子游戏。但是从 " -"Minetest 5.8.0 版本起,Minetest 将不再自带任何子游戏。" +"一直以来,Luanti 游戏引擎默认自带了“Minetest Game”这个子游戏。但是从 5.8.0 " +"版本起,Luanti 不再自带任何子游戏。" #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "" @@ -1140,7 +1137,7 @@ msgstr "从 ContentDB 安装游戏" #: builtin/mainmenu/tab_local.lua #, fuzzy msgid "Luanti doesn't come with a game by default." -msgstr "Minetest Game 不再是默认自带的子游戏了" +msgstr "Luanti 不自带任何子游戏。" #: builtin/mainmenu/tab_local.lua msgid "" @@ -1181,7 +1178,6 @@ msgid "Start Game" msgstr "启动游戏" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "You need to install a game before you can create a world." msgstr "您需要先安装一个子游戏才能创建新的世界。" @@ -2207,12 +2203,10 @@ msgid "Open" msgstr "打开" #: src/gui/guiOpenURL.cpp -#, fuzzy msgid "Open URL?" msgstr "是否打开网页?" #: src/gui/guiOpenURL.cpp -#, fuzzy msgid "Unable to open URL" msgstr "无法打开网页" @@ -2296,18 +2290,19 @@ msgid "Name is taken. Please choose another name" msgstr "名称已被占用。请选择其他名称" #: src/network/clientpackethandler.cpp +#, fuzzy msgid "Player name contains disallowed characters" -msgstr "" +msgstr "玩家名称包含不允许使用的字符" #: src/network/clientpackethandler.cpp #, fuzzy msgid "Player name not allowed" -msgstr "玩家名称过长。" +msgstr "不允许使用该玩家名称" #: src/network/clientpackethandler.cpp #, fuzzy msgid "Server shutting down" -msgstr "关闭中..." +msgstr "服务器正在关闭" #: src/network/clientpackethandler.cpp msgid "" @@ -2337,6 +2332,8 @@ msgid "" "Your client's version is not supported.\n" "Please contact the server administrator." msgstr "" +"服务器不支持这个客户端版本。\n" +"请联系管理员。" #: src/server.cpp #, c-format @@ -5735,15 +5732,15 @@ msgstr "" "18 = 4D \"Mandelbulb\" 朱利亚集." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Send names of online players to the serverlist. If disabled only the player " "count is revealed." -msgstr "" +msgstr "向服务器列表发送在线玩家的名称。如果禁用此设置,服务器只发送玩家数量。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Send player names to the server list" -msgstr "向服务器表公开服务器。" +msgstr "向服务器列表公开玩家名称" #: src/settings_translation_file.cpp msgid "Server" @@ -6574,7 +6571,9 @@ msgid "" "URL to JSON file which provides information about the newest Luanti " "release.\n" "If this is empty the engine will never check for updates." -msgstr "提供最新 Minetest 版本信息的 JSON 文件的 URL" +msgstr "" +"提供最新 Luanti 版本信息的 JSON 文件的 URL。\n" +"如果设置为空,Luanti 不会查找新版本。" #: src/settings_translation_file.cpp msgid "URL to the server list displayed in the Multiplayer Tab." From 62bee9f502aeca59daa960b16873341450b0b1ff Mon Sep 17 00:00:00 2001 From: chocomint Date: Fri, 1 Nov 2024 22:24:24 +0000 Subject: [PATCH 128/178] Translated using Weblate (Spanish) Currently translated at 98.7% (1366 of 1383 strings) --- po/es/luanti.po | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/po/es/luanti.po b/po/es/luanti.po index cb6444177..725f0e45d 100644 --- a/po/es/luanti.po +++ b/po/es/luanti.po @@ -4,7 +4,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-10-28 19:57+0100\n" "PO-Revision-Date: 2024-11-01 22:25+0000\n" -"Last-Translator: gallegonovato \n" +"Last-Translator: chocomint \n" "Language-Team: Spanish \n" "Language: es\n" @@ -4406,13 +4406,12 @@ msgid "Instrument chat commands on registration." msgstr "Instrumento de comandos del chat al registrarse." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Instrument global callback functions on registration.\n" "(anything you pass to a core.register_*() function)" msgstr "" -"Funciones de devolución de llamada global del instrumento en el registro.\n" -"(Cualquier cosa que pase a una función minetest.register _ * ())" +"Manejar funciones de devolución de llamada global en el registro.\n" +"(Cualquier cosa que pase a una función core.register_*())" #: src/settings_translation_file.cpp msgid "" From 31c50c470c9e39b7854c101db2152618476e0fa5 Mon Sep 17 00:00:00 2001 From: gallegonovato Date: Fri, 1 Nov 2024 22:26:00 +0000 Subject: [PATCH 129/178] Translated using Weblate (Spanish) Currently translated at 99.1% (1371 of 1383 strings) --- po/es/luanti.po | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/po/es/luanti.po b/po/es/luanti.po index 725f0e45d..df4380769 100644 --- a/po/es/luanti.po +++ b/po/es/luanti.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Spanish (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-10-28 19:57+0100\n" -"PO-Revision-Date: 2024-11-01 22:25+0000\n" -"Last-Translator: chocomint \n" +"PO-Revision-Date: 2024-11-01 22:28+0000\n" +"Last-Translator: gallegonovato \n" "Language-Team: Spanish \n" "Language: es\n" @@ -4410,21 +4410,21 @@ msgid "" "Instrument global callback functions on registration.\n" "(anything you pass to a core.register_*() function)" msgstr "" -"Manejar funciones de devolución de llamada global en el registro.\n" -"(Cualquier cosa que pase a una función core.register_*())" +"Instrumentar funciones callback globales en el registro.\n" +"(cualquier cosa que se pase a una función core.register_*())" #: src/settings_translation_file.cpp msgid "" "Instrument the action function of Active Block Modifiers on registration." msgstr "" -"Instrumenta la función de acción de los Modificadores de Bloque Activos en " +"Instrumentar la función de acción de los modificadores de bloque activo en " "el registro." #: src/settings_translation_file.cpp msgid "" "Instrument the action function of Loading Block Modifiers on registration." msgstr "" -"Instrumenta la función de acción de Carga de Modificadores de Bloque en el " +"Instrumentar la función de acción de Cargar modificadores de bloque en el " "registro." #: src/settings_translation_file.cpp From 0c61461b07d128a8723bd9ba56b42ef3b82fba8d Mon Sep 17 00:00:00 2001 From: chocomint Date: Fri, 1 Nov 2024 22:26:03 +0000 Subject: [PATCH 130/178] Translated using Weblate (Spanish) Currently translated at 99.1% (1371 of 1383 strings) --- po/es/luanti.po | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/po/es/luanti.po b/po/es/luanti.po index df4380769..87ab0f095 100644 --- a/po/es/luanti.po +++ b/po/es/luanti.po @@ -4,7 +4,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-10-28 19:57+0100\n" "PO-Revision-Date: 2024-11-01 22:28+0000\n" -"Last-Translator: gallegonovato \n" +"Last-Translator: chocomint \n" "Language-Team: Spanish \n" "Language: es\n" @@ -4619,7 +4619,6 @@ msgid "Leaves style" msgstr "Estilo de las hojas" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Leaves style:\n" "- Fancy: all faces visible\n" @@ -4627,12 +4626,11 @@ msgid "" "- Opaque: disable transparency" msgstr "" "Estilo de hojas:\n" -"- Fabuloso: Todas las caras son visibles\n" -"- Simple: Solo caras externas, si se utilizan special_tiles definidos\n" -"- Opaco: Transparencia desactivada" +"- Fabuloso: todas las caras son visibles\n" +"- Simple: solo caras externas\n" +"- Opaco: desactivar transparencia" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Length of a server tick (the interval at which everything is generally " "updated),\n" @@ -4644,7 +4642,10 @@ msgstr "" "Duración de un tick del servidor (el intervalo en el que todo es " "actualizado),\n" "expresado en segundos.\n" -"No se aplica a las sesiones iniciadas desde el menú del cliente." +"No se aplica a las sesiones iniciadas desde el menú del cliente.\n" +"Esta es una cota inferior, es decir, los pasos del servidor no pueden ser " +"más cortos que esto, pero\n" +"a menudo son más largos." #: src/settings_translation_file.cpp msgid "Length of liquid waves." @@ -4766,9 +4767,8 @@ msgid "Liquid queue purge time" msgstr "Tiempo de purga de colas de líquidos" #: src/settings_translation_file.cpp -#, fuzzy msgid "Liquid reflections" -msgstr "Fluidez líquida" +msgstr "Reflejos líquidos" #: src/settings_translation_file.cpp msgid "Liquid sinking" @@ -5353,7 +5353,7 @@ msgstr "Resaltado de los nodos" #: src/settings_translation_file.cpp msgid "Node specular" -msgstr "" +msgstr "Nodo especular" #: src/settings_translation_file.cpp msgid "NodeTimer interval" @@ -5409,15 +5409,14 @@ msgid "Number of messages a player may send per 10 seconds." msgstr "Número de mensajes que un jugador puede enviar cada 10 segundos." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Number of threads to use for mesh generation.\n" "Value of 0 (default) will let Luanti autodetect the number of available " "threads." msgstr "" -"Numero de hilos del procesador a usar para la generación de mayas.\n" -"Un valor de 0 (default) dejará que Minetest detecte automáticamente el " -"número de hilos disponibles." +"Número de hilos a utilizar para la generación de mallas.\n" +"Un valor de 0 (predeterminado) permitirá que Luanti detecte automáticamente " +"el número de hilos disponibles." #: src/settings_translation_file.cpp msgid "Occlusion Culler" From aaf487773093fcc5a5c763273591ff4774348d5a Mon Sep 17 00:00:00 2001 From: gallegonovato Date: Fri, 1 Nov 2024 22:28:53 +0000 Subject: [PATCH 131/178] Translated using Weblate (Spanish) Currently translated at 99.3% (1374 of 1383 strings) --- po/es/luanti.po | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/po/es/luanti.po b/po/es/luanti.po index 87ab0f095..43eaf1f14 100644 --- a/po/es/luanti.po +++ b/po/es/luanti.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Spanish (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-10-28 19:57+0100\n" -"PO-Revision-Date: 2024-11-01 22:28+0000\n" -"Last-Translator: chocomint \n" +"PO-Revision-Date: 2024-11-01 22:30+0000\n" +"Last-Translator: gallegonovato \n" "Language-Team: Spanish \n" "Language: es\n" @@ -4625,10 +4625,10 @@ msgid "" "- Simple: only outer faces\n" "- Opaque: disable transparency" msgstr "" -"Estilo de hojas:\n" -"- Fabuloso: todas las caras son visibles\n" -"- Simple: solo caras externas\n" -"- Opaco: desactivar transparencia" +"Estilo de las hojas:\n" +"- Elegante: todas las caras visibles\n" +"- Simple: solo las caras exteriores\n" +"- Opaco: desactivar la transparencia" #: src/settings_translation_file.cpp msgid "" @@ -4639,12 +4639,12 @@ msgid "" "This is a lower bound, i.e. server steps may not be shorter than this, but\n" "they are often longer." msgstr "" -"Duración de un tick del servidor (el intervalo en el que todo es " -"actualizado),\n" -"expresado en segundos.\n" -"No se aplica a las sesiones iniciadas desde el menú del cliente.\n" -"Esta es una cota inferior, es decir, los pasos del servidor no pueden ser " -"más cortos que esto, pero\n" +"Duración de un tick del servidor (intervalo en el que generalmente se " +"actualiza todo),\n" +"indicada en segundos.\n" +"No se aplica a las sesiones alojadas desde el menú cliente.\n" +"Se trata de un límite inferior, es decir, los pasos del servidor no pueden " +"ser más cortos que esto, pero\n" "a menudo son más largos." #: src/settings_translation_file.cpp From 000f0c78bc766037655b939aa31162c6b61e350b Mon Sep 17 00:00:00 2001 From: chocomint Date: Fri, 1 Nov 2024 22:29:02 +0000 Subject: [PATCH 132/178] Translated using Weblate (Spanish) Currently translated at 99.3% (1374 of 1383 strings) --- po/es/luanti.po | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/po/es/luanti.po b/po/es/luanti.po index 43eaf1f14..c4b5236d0 100644 --- a/po/es/luanti.po +++ b/po/es/luanti.po @@ -4,7 +4,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-10-28 19:57+0100\n" "PO-Revision-Date: 2024-11-01 22:30+0000\n" -"Last-Translator: gallegonovato \n" +"Last-Translator: chocomint \n" "Language-Team: Spanish \n" "Language: es\n" @@ -5448,18 +5448,16 @@ msgid "OpenGL debug" msgstr "Depuración OpenGL" #: src/settings_translation_file.cpp -#, fuzzy msgid "Optimize GUI for touchscreens" -msgstr "Usar retícula en pantalla táctil" +msgstr "Optimizar la interfaz gráfica de usuario para pantallas táctiles" #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "Anulación opcional del color de un enlace web en el chat." #: src/settings_translation_file.cpp -#, fuzzy msgid "Other Effects" -msgstr "Efectos gráficos" +msgstr "Otros Efectos" #: src/settings_translation_file.cpp msgid "" @@ -5576,16 +5574,15 @@ msgid "Prometheus listener address" msgstr "Dirección del receptor \"Prometheus\"" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Prometheus listener address.\n" "If Luanti is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" "Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" -"Dirección de escucha de \"Prometheus\".\n" -"Si Minetest se compila con la opción 'ENABLE_PROMETHEUS' activada,\n" -"se habilitará el detector de métricas para \"Prometheus\" en esa dirección.\n" +"Dirección de escucha de Prometheus.\n" +"Si Luanti se compila con la opción ENABLE_PROMETHEUS activada,\n" +"habilite el detector de métricas para Prometheus en esa dirección.\n" "Las métricas pueden obtenerse en http://127.0.0.1:30000/metrics" #: src/settings_translation_file.cpp From 58ebe0a58f7b4a06f948ad96e71047b4b172cd5c Mon Sep 17 00:00:00 2001 From: gallegonovato Date: Fri, 1 Nov 2024 22:30:48 +0000 Subject: [PATCH 133/178] Translated using Weblate (Spanish) Currently translated at 99.7% (1380 of 1383 strings) --- po/es/luanti.po | 36 ++++++++++++++++-------------------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/po/es/luanti.po b/po/es/luanti.po index c4b5236d0..e994d2149 100644 --- a/po/es/luanti.po +++ b/po/es/luanti.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Spanish (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-10-28 19:57+0100\n" -"PO-Revision-Date: 2024-11-01 22:30+0000\n" -"Last-Translator: chocomint \n" +"PO-Revision-Date: 2024-11-01 22:34+0000\n" +"Last-Translator: gallegonovato \n" "Language-Team: Spanish \n" "Language: es\n" @@ -5449,15 +5449,15 @@ msgstr "Depuración OpenGL" #: src/settings_translation_file.cpp msgid "Optimize GUI for touchscreens" -msgstr "Optimizar la interfaz gráfica de usuario para pantallas táctiles" +msgstr "Optimización de la interfaz gráfica para pantallas táctiles" #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." -msgstr "Anulación opcional del color de un enlace web en el chat." +msgstr "Cambio opcional del color del enlace web del chat." #: src/settings_translation_file.cpp msgid "Other Effects" -msgstr "Otros Efectos" +msgstr "Otros efectos" #: src/settings_translation_file.cpp msgid "" @@ -5582,12 +5582,12 @@ msgid "" msgstr "" "Dirección de escucha de Prometheus.\n" "Si Luanti se compila con la opción ENABLE_PROMETHEUS activada,\n" -"habilite el detector de métricas para Prometheus en esa dirección.\n" -"Las métricas pueden obtenerse en http://127.0.0.1:30000/metrics" +"habilita la escucha de métricas para Prometheus en esa dirección.\n" +"Las métricas se pueden obtener en http://127.0.0.1:30000/metrics" #: src/settings_translation_file.cpp msgid "Proportion of large caves that contain liquid." -msgstr "Proporción de cuevas grandes que contienen líquido." +msgstr "Proporción de grandes cuevas que contienen líquido." #: src/settings_translation_file.cpp msgid "Protocol version minimum" @@ -6544,7 +6544,6 @@ msgstr "" "los perfiles." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The gesture for punching players/entities.\n" "This can be overridden by games and mods.\n" @@ -6556,14 +6555,14 @@ msgid "" "Known from the classic Luanti mobile controls.\n" "Combat is more or less impossible." msgstr "" -"El gesto para golpear jugadores/entidades.\n" -"Los juegos y mods pueden ignorar esto.\n" +"El gesto para golpear a jugadores/entidades.\n" +"Esto puede ser anulado por juegos y mods.\n" "\n" -"* sort_tap\n" -"Fácil de usar y muy conocido por otros juegos que no se mencionarán.\n" +"* short_tap\n" +"Fácil de usar y bien conocido de otros juegos que no deben ser nombrados.\n" "\n" "* long_tap\n" -"Conocido por los controles clásicos para móviles de Minetest.\n" +"Conocido por los controles clásicos del móvil Luanti.\n" "El combate es más o menos imposible." #: src/settings_translation_file.cpp @@ -6630,16 +6629,14 @@ msgstr "" "Esto debe configurarse junto con active_object_send_range_blocks." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The rendering back-end.\n" "Note: A restart is required after changing this!\n" "OpenGL is the default for desktop, and OGLES2 for Android." msgstr "" "El back-end de renderizado.\n" -"Nota: ¡se debe reiniciar después de cambiar esto!\n" -"OpenGL es el predeterminado para PC, y OGLES2 para Android.\n" -"Los shaders son compatibles con todos los sistemas excepto OGLES1." +"Nota: ¡es necesario reiniciar después de cambiar esto!\n" +"OpenGL es el predeterminado para escritorio, y OGLES2 para Android." #: src/settings_translation_file.cpp msgid "" @@ -6780,9 +6777,8 @@ msgid "Touchscreen" msgstr "Pantalla táctil" #: src/settings_translation_file.cpp -#, fuzzy msgid "Touchscreen controls" -msgstr "Umbral de la pantalla táctil" +msgstr "Controles táctiles" #: src/settings_translation_file.cpp msgid "Touchscreen sensitivity" From e23c191232f9d8f2d637cd7300036ba93a1177c4 Mon Sep 17 00:00:00 2001 From: chocomint Date: Fri, 1 Nov 2024 22:31:49 +0000 Subject: [PATCH 134/178] Translated using Weblate (Spanish) Currently translated at 99.7% (1380 of 1383 strings) --- po/es/luanti.po | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/po/es/luanti.po b/po/es/luanti.po index e994d2149..0a85da8fb 100644 --- a/po/es/luanti.po +++ b/po/es/luanti.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Spanish (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-10-28 19:57+0100\n" -"PO-Revision-Date: 2024-11-01 22:34+0000\n" -"Last-Translator: gallegonovato \n" +"PO-Revision-Date: 2024-11-01 22:36+0000\n" +"Last-Translator: chocomint \n" "Language-Team: Spanish \n" "Language: es\n" @@ -5947,9 +5947,8 @@ msgstr "" "está deshabilitada, solo se revela el número de jugadores." #: src/settings_translation_file.cpp -#, fuzzy msgid "Send player names to the server list" -msgstr "Anunciar en esta lista de servidores." +msgstr "Enviar nombres de los jugadores a la lista de servidores" #: src/settings_translation_file.cpp msgid "Server" @@ -6269,9 +6268,8 @@ msgid "Smooth lighting" msgstr "Iluminación suave" #: src/settings_translation_file.cpp -#, fuzzy msgid "Smooth scrolling" -msgstr "Iluminación suave" +msgstr "Desplazado suave" #: src/settings_translation_file.cpp msgid "" @@ -6298,9 +6296,8 @@ msgid "Sneaking speed, in nodes per second." msgstr "Velocidad agachado, en nodos por segundo." #: src/settings_translation_file.cpp -#, fuzzy msgid "Soft clouds" -msgstr "Nubes 3D" +msgstr "Nubes suaves" #: src/settings_translation_file.cpp msgid "Soft shadow radius" @@ -6562,7 +6559,7 @@ msgstr "" "Fácil de usar y bien conocido de otros juegos que no deben ser nombrados.\n" "\n" "* long_tap\n" -"Conocido por los controles clásicos del móvil Luanti.\n" +"Conocido por los controles clásicos de móvil en Luanti.\n" "El combate es más o menos imposible." #: src/settings_translation_file.cpp @@ -6634,9 +6631,9 @@ msgid "" "Note: A restart is required after changing this!\n" "OpenGL is the default for desktop, and OGLES2 for Android." msgstr "" -"El back-end de renderizado.\n" -"Nota: ¡es necesario reiniciar después de cambiar esto!\n" -"OpenGL es el predeterminado para escritorio, y OGLES2 para Android." +"El renderizado de back-end.\n" +"Nota: ¡Se requiere un reinicio después de cambiar esto!\n" +"OpenGL es el predeterminado para el escritorio, y OGLES2 para Android." #: src/settings_translation_file.cpp msgid "" @@ -6778,7 +6775,7 @@ msgstr "Pantalla táctil" #: src/settings_translation_file.cpp msgid "Touchscreen controls" -msgstr "Controles táctiles" +msgstr "Controles de pantalla táctil" #: src/settings_translation_file.cpp msgid "Touchscreen sensitivity" From 2d6592a8044c5461ebae0dbbaf8a0d415e461d10 Mon Sep 17 00:00:00 2001 From: gallegonovato Date: Fri, 1 Nov 2024 22:34:21 +0000 Subject: [PATCH 135/178] Translated using Weblate (Spanish) Currently translated at 100.0% (1383 of 1383 strings) --- po/es/luanti.po | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/po/es/luanti.po b/po/es/luanti.po index 0a85da8fb..0d9225609 100644 --- a/po/es/luanti.po +++ b/po/es/luanti.po @@ -4,7 +4,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-10-28 19:57+0100\n" "PO-Revision-Date: 2024-11-01 22:36+0000\n" -"Last-Translator: chocomint \n" +"Last-Translator: gallegonovato \n" "Language-Team: Spanish \n" "Language: es\n" @@ -6790,9 +6790,8 @@ msgid "Tradeoffs for performance" msgstr "Contrapartidas para el rendimiento" #: src/settings_translation_file.cpp -#, fuzzy msgid "Translucent foliage" -msgstr "Líquidos translúcidos" +msgstr "Follaje translúcido" #: src/settings_translation_file.cpp msgid "Translucent liquids" @@ -6842,14 +6841,13 @@ msgstr "" "Esta configuración solo debe cambiarse si tiene problemas de rendimiento." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "URL to JSON file which provides information about the newest Luanti " "release.\n" "If this is empty the engine will never check for updates." msgstr "" -"URL del archivo JSON que proporciona información sobre la última versión de " -"Minetest\n" +"Dirección URL al archivo JSON que proporciona información sobre la última " +"versión de Luanti.\n" "Si está vacío, el motor nunca buscará actualizaciones." #: src/settings_translation_file.cpp @@ -7293,15 +7291,14 @@ msgid "Window maximized" msgstr "Ventana maximizada" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Windows systems only: Start Luanti with the command line window in the " "background.\n" "Contains the same information as the file debug.txt (default name)." msgstr "" -"Solo para sistemas Windows: Iniciar Minetest con la ventana de la linea de " -"comandos en el fondo.\n" -"Contiene la misma información que el archivo debug.txt (Nombre por defecto)." +"Solo sistemas Windows: Inicia Luanti con la ventana de línea de comandos en " +"segundo plano.\n" +"Contiene la misma información que el archivo debug.txt (nombre por defecto)." #: src/settings_translation_file.cpp msgid "" From 812abba33be63f89691d6c5c5f2eef46123623b2 Mon Sep 17 00:00:00 2001 From: chocomint Date: Fri, 1 Nov 2024 22:39:49 +0000 Subject: [PATCH 136/178] Translated using Weblate (Spanish) Currently translated at 100.0% (1383 of 1383 strings) --- po/es/luanti.po | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/po/es/luanti.po b/po/es/luanti.po index 0d9225609..5be7c093a 100644 --- a/po/es/luanti.po +++ b/po/es/luanti.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Spanish (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-10-28 19:57+0100\n" -"PO-Revision-Date: 2024-11-01 22:36+0000\n" -"Last-Translator: gallegonovato \n" +"PO-Revision-Date: 2024-11-01 22:40+0000\n" +"Last-Translator: chocomint \n" "Language-Team: Spanish \n" "Language: es\n" @@ -3052,7 +3052,7 @@ msgstr "" "según lo definido por la Free Software Foundation.\n" "También puedes especificar clasificaciones de contenido.\n" "Estas banderas son independientes de las versiones de Luanti,\n" -"así que consulta una lista completa en https://content.minetest.net/help/" +"así que consulta una lista completa en https://content.luanti.org/help/" "content_flags/" #: src/settings_translation_file.cpp @@ -6846,9 +6846,9 @@ msgid "" "release.\n" "If this is empty the engine will never check for updates." msgstr "" -"Dirección URL al archivo JSON que proporciona información sobre la última " -"versión de Luanti.\n" -"Si está vacío, el motor nunca buscará actualizaciones." +"URL al archivo JSON que proporciona información sobre la nueva versión de " +"Luanti.\n" +"Si esto está vacío el motor nunca comprobará las actualizaciones." #: src/settings_translation_file.cpp msgid "URL to the server list displayed in the Multiplayer Tab." From 0be1fe11ca68aea1fdecb95adc75ccf48286defa Mon Sep 17 00:00:00 2001 From: gallegonovato Date: Fri, 1 Nov 2024 22:38:02 +0000 Subject: [PATCH 137/178] Translated using Weblate (Spanish) Currently translated at 100.0% (1383 of 1383 strings) --- po/es/luanti.po | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/po/es/luanti.po b/po/es/luanti.po index 5be7c093a..91b10e486 100644 --- a/po/es/luanti.po +++ b/po/es/luanti.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Spanish (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-10-28 19:57+0100\n" -"PO-Revision-Date: 2024-11-01 22:40+0000\n" -"Last-Translator: chocomint \n" +"PO-Revision-Date: 2024-11-02 23:00+0000\n" +"Last-Translator: gallegonovato \n" "Language-Team: Spanish \n" "Language: es\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.8.2-dev\n" +"X-Generator: Weblate 5.8.2\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -3052,7 +3052,7 @@ msgstr "" "según lo definido por la Free Software Foundation.\n" "También puedes especificar clasificaciones de contenido.\n" "Estas banderas son independientes de las versiones de Luanti,\n" -"así que consulta una lista completa en https://content.luanti.org/help/" +"así que consulta una lista completa en https://content.minetest.net/help/" "content_flags/" #: src/settings_translation_file.cpp @@ -6631,9 +6631,9 @@ msgid "" "Note: A restart is required after changing this!\n" "OpenGL is the default for desktop, and OGLES2 for Android." msgstr "" -"El renderizado de back-end.\n" -"Nota: ¡Se requiere un reinicio después de cambiar esto!\n" -"OpenGL es el predeterminado para el escritorio, y OGLES2 para Android." +"El back-end de renderizado.\n" +"Nota: ¡Es necesario reiniciar después de cambiar esto!\n" +"OpenGL es el predeterminado para escritorio y OGLES2 para Android." #: src/settings_translation_file.cpp msgid "" @@ -6775,7 +6775,7 @@ msgstr "Pantalla táctil" #: src/settings_translation_file.cpp msgid "Touchscreen controls" -msgstr "Controles de pantalla táctil" +msgstr "Controles en pantalla táctil" #: src/settings_translation_file.cpp msgid "Touchscreen sensitivity" @@ -6846,9 +6846,9 @@ msgid "" "release.\n" "If this is empty the engine will never check for updates." msgstr "" -"URL al archivo JSON que proporciona información sobre la nueva versión de " -"Luanti.\n" -"Si esto está vacío el motor nunca comprobará las actualizaciones." +"URL del archivo JSON que proporciona información sobre la versión más " +"reciente de Luanti.\n" +"Si está vacío, el motor nunca buscará actualizaciones." #: src/settings_translation_file.cpp msgid "URL to the server list displayed in the Multiplayer Tab." From 66a5ddca258c4e460b9339dac4405fcf31b6496f Mon Sep 17 00:00:00 2001 From: grorp Date: Sat, 2 Nov 2024 12:48:21 +0000 Subject: [PATCH 138/178] Translated using Weblate (German) Currently translated at 100.0% (1383 of 1383 strings) --- po/de/luanti.po | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/po/de/luanti.po b/po/de/luanti.po index 7fecb8b93..f22502be5 100644 --- a/po/de/luanti.po +++ b/po/de/luanti.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: German (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-10-28 19:57+0100\n" -"PO-Revision-Date: 2024-11-01 16:26+0000\n" -"Last-Translator: Wuzzy \n" +"PO-Revision-Date: 2024-11-02 23:00+0000\n" +"Last-Translator: grorp \n" "Language-Team: German \n" "Language: de\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.8.2-dev\n" +"X-Generator: Weblate 5.8.2\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -6532,8 +6532,8 @@ msgid "" "The delay in milliseconds after which a touch interaction is considered a " "long tap." msgstr "" -"Die Verzögerung in Millisekunden, nachdem eine Berührungsinteraktion als " -"langes Antippen zählt." +"Die Verzögerung in Millisekunden, nach der eine Touch-Interaktion als langes " +"Antippen zählt." #: src/settings_translation_file.cpp msgid "" @@ -6553,16 +6553,16 @@ msgid "" "Known from the classic Luanti mobile controls.\n" "Combat is more or less impossible." msgstr "" -"Die Geste für für das Schlagen von Spielern/Entitys.\n" +"Die Geste für das Schlagen von Spielern/Entitys.\n" "Dies kann von Spielen und Mods überschrieben werden.\n" "\n" "* short_tap\n" -"Leicht zu benutzen und bekannt von anderen Spielen, die nicht genannt werden " +"Leicht zu benutzen und bekannt aus anderen Spielen, die nicht genannt werden " "sollen.\n" "\n" "* long_tap\n" -"Bekannt aus der klassischen Luantisteuerung für mobile Endgeräte.\n" -"Der Kampf ist mehr oder weniger unmöglich." +"Bekannt aus der klassischen Luanti-Touchscreen-Steuerung.\n" +"Kämpfen ist mehr oder weniger unmöglich." #: src/settings_translation_file.cpp msgid "The identifier of the joystick to use" @@ -6572,7 +6572,7 @@ msgstr "Die Kennung des zu verwendeten Joysticks" msgid "" "The length in pixels after which a touch interaction is considered movement." msgstr "" -"Die Länge in Pixeln, die benötigt wird, damit die Touch-Interaktion als " +"Die Länge in Pixeln, die benötigt wird, damit eine Touch-Interaktion als " "Bewegung zählt." #: src/settings_translation_file.cpp @@ -6779,15 +6779,15 @@ msgstr "Touchscreen" #: src/settings_translation_file.cpp msgid "Touchscreen controls" -msgstr "Touchscreensteuerung" +msgstr "Touchscreen-Steuerung" #: src/settings_translation_file.cpp msgid "Touchscreen sensitivity" -msgstr "Touchscreenempfindlichkeit" +msgstr "Touchscreen-Empfindlichkeit" #: src/settings_translation_file.cpp msgid "Touchscreen sensitivity multiplier." -msgstr "Faktor für die Touchscreenempfindlichkeit." +msgstr "Faktor für die Touchscreen-Empfindlichkeit." #: src/settings_translation_file.cpp msgid "Tradeoffs for performance" From d9df06cda31d835664264e639ef554036a5672df Mon Sep 17 00:00:00 2001 From: ninjum Date: Sat, 2 Nov 2024 12:09:36 +0000 Subject: [PATCH 139/178] Translated using Weblate (Galician) Currently translated at 100.0% (1383 of 1383 strings) --- po/gl/luanti.po | 308 +++++++++++++++++++++++------------------------- 1 file changed, 149 insertions(+), 159 deletions(-) diff --git a/po/gl/luanti.po b/po/gl/luanti.po index f0c163f00..90dba133f 100644 --- a/po/gl/luanti.po +++ b/po/gl/luanti.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-10-28 19:57+0100\n" -"PO-Revision-Date: 2024-08-14 04:09+0000\n" +"PO-Revision-Date: 2024-11-02 23:00+0000\n" "Last-Translator: ninjum \n" "Language-Team: Galician \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.7-dev\n" +"X-Generator: Weblate 5.8.2\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -159,7 +159,7 @@ msgstr "Descargando $1..." #: builtin/mainmenu/content/dlg_contentdb.lua msgid "All" -msgstr "" +msgstr "Todo" #: builtin/mainmenu/content/dlg_contentdb.lua #: builtin/mainmenu/content/dlg_package.lua @@ -168,7 +168,6 @@ msgid "Back" msgstr "Voltar" #: builtin/mainmenu/content/dlg_contentdb.lua -#, fuzzy msgid "ContentDB is not available when Luanti was compiled without cURL" msgstr "ContentDB non está dispoñible cando Minetest compilouse sen cURL" @@ -178,7 +177,7 @@ msgstr "Descargando..." #: builtin/mainmenu/content/dlg_contentdb.lua msgid "Featured" -msgstr "" +msgstr "Destacado" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "Games" @@ -214,7 +213,6 @@ msgid "Queued" msgstr "En cola" #: builtin/mainmenu/content/dlg_contentdb.lua -#, fuzzy msgid "Texture Packs" msgstr "Paquetes de texturas" @@ -268,9 +266,8 @@ msgid "Dependencies:" msgstr "Dependencias:" #: builtin/mainmenu/content/dlg_install.lua -#, fuzzy msgid "Error getting dependencies for package $1" -msgstr "Produciuse un erro ao obter dependencias para o paquete" +msgstr "Produciuse un erro ao obter dependencias para o paquete $1" #: builtin/mainmenu/content/dlg_install.lua msgid "Install" @@ -305,44 +302,40 @@ msgid "Overwrite" msgstr "Sobrescribir" #: builtin/mainmenu/content/dlg_package.lua -#, fuzzy msgid "ContentDB page" -msgstr "Ligazón URL de ContentDB" +msgstr "Ligazón de ContentDB" #: builtin/mainmenu/content/dlg_package.lua -#, fuzzy msgid "Description" -msgstr "Descripción do servidor" +msgstr "Descripción" #: builtin/mainmenu/content/dlg_package.lua msgid "Donate" -msgstr "" +msgstr "Doar" #: builtin/mainmenu/content/dlg_package.lua msgid "Forum Topic" -msgstr "" +msgstr "Tema do foro" #: builtin/mainmenu/content/dlg_package.lua -#, fuzzy msgid "Information" -msgstr "Información:" +msgstr "Información" #: builtin/mainmenu/content/dlg_package.lua -#, fuzzy msgid "Install [$1]" -msgstr "Instalar $1" +msgstr "Instalar [$1]" #: builtin/mainmenu/content/dlg_package.lua msgid "Issue Tracker" -msgstr "" +msgstr "Rastrexador de Problemas" #: builtin/mainmenu/content/dlg_package.lua msgid "Source" -msgstr "" +msgstr "Fonte" #: builtin/mainmenu/content/dlg_package.lua msgid "Translate" -msgstr "" +msgstr "Traducir" #: builtin/mainmenu/content/dlg_package.lua builtin/mainmenu/tab_content.lua msgid "Uninstall" @@ -353,13 +346,12 @@ msgid "Update" msgstr "Actualizar" #: builtin/mainmenu/content/dlg_package.lua -#, fuzzy msgid "Website" -msgstr "Visitar sitio web" +msgstr "Páxina web" #: builtin/mainmenu/content/dlg_package.lua msgid "by $1 — $2 downloads — +$3 / $4 / -$5" -msgstr "" +msgstr "por $1 — $2 descargas — +$3 / $4 / -$5" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" @@ -723,14 +715,12 @@ msgid "Dismiss" msgstr "Descartar" #: builtin/mainmenu/dlg_reinstall_mtg.lua -#, fuzzy msgid "" "For a long time, Luanti shipped with a default game called \"Minetest " "Game\". Since version 5.8.0, Luanti ships without a default game." msgstr "" -"Durante moito tempo, o motor Minetest incluía un xogo predeterminado chamado " -"\"Minetest Game\". Dende Minetest 5.8.0, Minetest inclúese sen un xogo " -"predeterminado." +"Durante moito tempo, Luanti incluía un xogo por defecto chamado 'Minetest " +"Game'. Desde a versión 5.8.0, Luanti distribúese sen un xogo por defecto." #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "" @@ -892,19 +882,16 @@ msgid "eased" msgstr "Suavizado" #: builtin/mainmenu/settings/dlg_settings.lua -#, fuzzy msgid "(The game will need to enable automatic exposure as well)" -msgstr "(O xogo tamén precisará activar as sombras)" +msgstr "(O xogo tamén necesitará habilitar a exposición automática.)" #: builtin/mainmenu/settings/dlg_settings.lua -#, fuzzy msgid "(The game will need to enable bloom as well)" -msgstr "(O xogo tamén precisará activar as sombras)" +msgstr "(O xogo tamén necesitará habilitar efecto de bloom.)" #: builtin/mainmenu/settings/dlg_settings.lua -#, fuzzy msgid "(The game will need to enable volumetric lighting as well)" -msgstr "(O xogo tamén precisará activar as sombras)" +msgstr "(O xogo tamén necesitará habilitar a iluminación volumétrica.)" #: builtin/mainmenu/settings/dlg_settings.lua msgid "(Use system language)" @@ -916,7 +903,7 @@ msgstr "Accesibilidade" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Auto" -msgstr "" +msgstr "Automático" #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/gui/touchcontrols.cpp src/settings_translation_file.cpp @@ -982,18 +969,16 @@ msgid "Content: Mods" msgstr "Contido: modificacións" #: builtin/mainmenu/settings/shader_warning_component.lua -#, fuzzy msgid "Enable" -msgstr "Activado" +msgstr "Habilitar" #: builtin/mainmenu/settings/shader_warning_component.lua -#, fuzzy msgid "Shaders are disabled." -msgstr "Actualización da cámara desactivada" +msgstr "Os sombreadores están deshabilitados." #: builtin/mainmenu/settings/shader_warning_component.lua msgid "This is not a recommended configuration." -msgstr "" +msgstr "Esta non é unha configuración recomendada." #: builtin/mainmenu/settings/shadows_component.lua msgid "(The game will need to enable shadows as well)" @@ -1154,18 +1139,16 @@ msgid "Install games from ContentDB" msgstr "Instalar xogos do ContentDB" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Luanti doesn't come with a game by default." -msgstr "Minetest non trae un xogo por defecto." +msgstr "Luanti non vén cun xogo por defecto." #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "" "Luanti is a game-creation platform that allows you to play many different " "games." msgstr "" -"Minetest é unha plataforma de creación de xogos que che permite xogar a " -"moitos xogos diferentes." +"Luanti é unha plataforma de creación de xogos que che permite xogar a moitos " +"xogos diferentes." #: builtin/mainmenu/tab_local.lua msgid "New" @@ -2269,37 +2252,38 @@ msgid "Sound Volume: %d%%" msgstr "Son: %d%%" #: src/gui/touchcontrols.cpp -#, fuzzy msgid "Joystick" -msgstr "ID do joystick" +msgstr "Joystick" #: src/gui/touchcontrols.cpp msgid "Overflow menu" -msgstr "" +msgstr "Menú de desbordamento" #: src/gui/touchcontrols.cpp -#, fuzzy msgid "Toggle debug" -msgstr "Alt. néboa" +msgstr "Activar/desactivar depuración" #: src/network/clientpackethandler.cpp msgid "" "Another client is connected with this name. If your client closed " "unexpectedly, try again in a minute." msgstr "" +"Outro cliente está conectado con este nome. Se o seu cliente pechouse " +"inesperadamente, tenteo de novo nun minuto." #: src/network/clientpackethandler.cpp msgid "Empty passwords are disallowed. Set a password and try again." msgstr "" +"Non se permiten contrasinais baleiros. Estableza un contrasinal e intente " +"de novo." #: src/network/clientpackethandler.cpp msgid "Internal server error" -msgstr "" +msgstr "Erro interno do servidor" #: src/network/clientpackethandler.cpp -#, fuzzy msgid "Invalid password" -msgstr "Anterior contrasinal" +msgstr "Contrasinal non válido" #. ~ DO NOT TRANSLATE THIS LITERALLY! #. This is a special string which needs to contain the translation's @@ -2322,46 +2306,48 @@ msgstr "O nome está en uso. Por favor, escolle outro nome" #: src/network/clientpackethandler.cpp msgid "Player name contains disallowed characters" -msgstr "" +msgstr "O nome do xogador contén caracteres non permitidos" #: src/network/clientpackethandler.cpp -#, fuzzy msgid "Player name not allowed" -msgstr "Nome do xogador demasiado longo." +msgstr "Nome de xogador non permitido" #: src/network/clientpackethandler.cpp -#, fuzzy msgid "Server shutting down" -msgstr "Cerrando..." +msgstr "O Servidor tase pechando" #: src/network/clientpackethandler.cpp msgid "" "The server has experienced an internal error. You will now be disconnected." -msgstr "" +msgstr "O servidor experimentou un erro interno. Agora será desconectado." #: src/network/clientpackethandler.cpp msgid "The server is running in singleplayer mode. You cannot connect." -msgstr "" +msgstr "O servidor está en modo un xogador. Non pode conectar." #: src/network/clientpackethandler.cpp msgid "Too many users" -msgstr "" +msgstr "Demasiados usuarios" #: src/network/clientpackethandler.cpp msgid "Unknown disconnect reason." -msgstr "" +msgstr "Razón da desconexión descoñecida." #: src/network/clientpackethandler.cpp msgid "" "Your client sent something the server didn't expect. Try reconnecting or " "updating your client." msgstr "" +"O seu cliente enviou algo que o servidor non esperaba. Tente volver " +"conectar ou actualizar o seu cliente." #: src/network/clientpackethandler.cpp msgid "" "Your client's version is not supported.\n" "Please contact the server administrator." msgstr "" +"A versión do seu cliente non é compatible.\n" +"Por favor, contacte co administrador do servidor." #: src/server.cpp #, c-format @@ -2660,11 +2646,11 @@ msgstr "Método de suavizado (antialiasing)" #: src/settings_translation_file.cpp msgid "Anticheat flags" -msgstr "" +msgstr "Bandeiras antitrampas" #: src/settings_translation_file.cpp msgid "Anticheat movement tolerance" -msgstr "" +msgstr "Tolerancia ao movemento antitrampas" #: src/settings_translation_file.cpp msgid "Append item name" @@ -2699,7 +2685,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Apply specular shading to nodes." -msgstr "" +msgstr "Aplique sombreado especular aos nodos." #: src/settings_translation_file.cpp msgid "Arm inertia" @@ -2819,9 +2805,8 @@ msgid "Biome noise" msgstr "Ruído de bioma" #: src/settings_translation_file.cpp -#, fuzzy msgid "Block bounds HUD radius" -msgstr "Lím. bloques" +msgstr "Raio de límites de bloques no HUD" #: src/settings_translation_file.cpp msgid "Block cull optimize distance" @@ -3036,7 +3021,6 @@ msgstr "" "Útil para probas. Vexa al_extensions.[h,cpp] para máis detalles." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Comma-separated list of flags to hide in the content repository.\n" "\"nonfree\" can be used to hide packages which do not qualify as 'free " @@ -3046,13 +3030,14 @@ msgid "" "These flags are independent from Luanti versions,\n" "so see a full list at https://content.minetest.net/help/content_flags/" msgstr "" -"Lista de marcas separadas por comas para ocultar no repositorio de contido.\n" -"\"Non libre\" pódese usar para ocultar paquetes que non sexan \"software " -"libre\",\n" -"segundo a definición da Free Software Foundation.\n" -"Tamén podes especificar clasificacións de contido.\n" -"Estas marcas son independentes das versións de Minetest,\n" -"así que consulta unha lista completa en https://content.minetest.net/help/" +"Lista de bandeiras separadas por comas que se ocultarán no repositorio de " +"contido.\n" +"\"nonfree\" pódese usar para ocultar paquetes que non cualifican como " +"'software libre',\n" +"tal como o define a Free Software Foundation.\n" +"Tamén podes especificar valoracións de contido.\n" +"Estas bandeiras son independentes das versións de Luanti,\n" +"así que consulta a lista completa en https://content.minetest.net/help/" "content_flags/" #: src/settings_translation_file.cpp @@ -3257,7 +3242,6 @@ msgstr "" "pero tamén consume máis recursos." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Define the oldest clients allowed to connect.\n" "Older clients are compatible in the sense that they will not crash when " @@ -3269,16 +3253,15 @@ msgid "" "Luanti still enforces its own internal minimum, and enabling\n" "strict_protocol_version_checking will effectively override this." msgstr "" -"Define os clientes máis antigos aos que se permite conectarse.\n" -"Os clientes máis antigos son compatibles no sentido de que non fallarán ao " -"conectarse\n" -"a novos servidores, pero é posible que non admitan todas as novas " -"características que esperas.\n" +"Define os clientes máis antigos permitidos para conectarse.\n" +"Os clientes máis antigos son compatibles no sentido de que non se bloquearán " +"ao conectarse\n" +"a servidores novos, pero poden non soportar todas as novas características " +"que esperas.\n" "Isto permite un control máis detallado que a verificación estrita da versión " "do protocolo.\n" -"Minetest segue aplicando o seu propio mínimo interno, e habilitar a\n" -"verificación estrita da versión do protocolo sobreporá efectivamente esta " -"configuración." +"Luanti sigue aplicando o seu mínimo interno, e habilitar\n" +"a verificación estrita da versión do protocolo anulará efectivamente isto." #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." @@ -3417,16 +3400,16 @@ msgid "Display Density Scaling Factor" msgstr "Factor de escala de densidade de exposición" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Distance in nodes at which transparency depth sorting is enabled.\n" "Use this to limit the performance impact of transparency depth sorting.\n" "Set to 0 to disable it entirely." msgstr "" -"Distancia en nodos á que se habilita a ordenación de profundidade de " -"transparencia\n" -"Usa isto para limitar o impacto no rendemento da ordenación de profundidade " -"de transparencia" +"Distancia en nodos na que se habilita a ordenación de profundidade da " +"translucidez.\n" +"Usa isto para limitar o impacto na rendibilidade da ordenación de " +"profundidade da translucidez.\n" +"Establece a 0 para deshabilitalo completamente." #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." @@ -3457,9 +3440,8 @@ msgid "Dungeon noise" msgstr "Sonido de calabozos" #: src/settings_translation_file.cpp -#, fuzzy msgid "Effects" -msgstr "Efectos gráficos" +msgstr "Efectos" #: src/settings_translation_file.cpp msgid "Enable Automatic Exposure" @@ -3570,11 +3552,8 @@ msgid "Enable random user input (only used for testing)." msgstr "Activar a entrada de comandos aleatoria (só para tests)." #: src/settings_translation_file.cpp -#, fuzzy msgid "Enable smooth lighting with simple ambient occlusion." -msgstr "" -"Activar a iluminación suave con oclusión de ambiente simple.\n" -"Desactivar para velocidade ou vistas diferentes." +msgstr "Habilitar iluminación suave cunha oclusión ambiental simple." #: src/settings_translation_file.cpp msgid "Enable split login/register" @@ -3596,6 +3575,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Enable updates available indicator on content tab" msgstr "" +"Habilitar o indicador de actualizacións dispoñibles na lapela de contido" #: src/settings_translation_file.cpp msgid "" @@ -3644,11 +3624,12 @@ msgid "Enables animation of inventory items." msgstr "Activa a animación de obxectos no inventario." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Enables caching of facedir rotated meshes.\n" "This is only effective with shaders disabled." -msgstr "Activa o rexistro de mallas xiradas." +msgstr "" +"Habilita a caché de mallas rotadas por cara.\n" +"Isto só é efectivo cos sombreadores deshabilitados." #: src/settings_translation_file.cpp msgid "Enables debug and error-checking in the OpenGL driver." @@ -3656,9 +3637,8 @@ msgstr "" "Habilita a depuración e a verificación de erros no controlador de OpenGL." #: src/settings_translation_file.cpp -#, fuzzy msgid "Enables smooth scrolling." -msgstr "Habilitar o postprocesado" +msgstr "Habilita o desprazamento suave." #: src/settings_translation_file.cpp msgid "Enables the post processing pipeline." @@ -3671,6 +3651,11 @@ msgid "" "\"auto\" means that the touchscreen controls will be enabled and disabled\n" "automatically depending on the last used input method." msgstr "" +"Habilita os controis de pantalla táctil, permitindo que xogues ao xogo cunha " +"pantalla táctil.\n" +"\"auto\" significa que os controis de pantalla táctil serán habilitados e " +"deshabilitados\n" +"automaticamente, dependendo do último método de entrada utilizado." #: src/settings_translation_file.cpp msgid "" @@ -4254,6 +4239,9 @@ msgid "" "ContentDB to\n" "check for package updates when opening the mainmenu." msgstr "" +"Se está habilitado e ten instalados paquetes de ContentDB, Luanti pode " +"contactar con ContentDB para\n" +"comprobar se hai actualizacións de paquetes ao abrir o menú principal." #: src/settings_translation_file.cpp msgid "" @@ -4391,13 +4379,12 @@ msgid "Instrument chat commands on registration." msgstr "Instrumento de comandos do chat no rexistro." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Instrument global callback functions on registration.\n" "(anything you pass to a core.register_*() function)" msgstr "" -"Instrumentación das funcións de chamadas de retorno globais no rexistro.\n" -"(todo o que pasee a unha función minetest.register_*())" +"Instrumentar funcións de devolución de chamada globais ao rexistrarse.\n" +"(calquera cousa que pases a unha función core.register_*())" #: src/settings_translation_file.cpp msgid "" @@ -4603,21 +4590,18 @@ msgid "Leaves style" msgstr "Apariencia das follas" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Leaves style:\n" "- Fancy: all faces visible\n" "- Simple: only outer faces\n" "- Opaque: disable transparency" msgstr "" -"Apariencia das follas:\n" -"- Detalladas: todas as caras son visibles\n" -"- Simples: só vense as caras externas, cando se utilizan special_tiles " -"definidos\n" -"- Opacas: desactiva a transparencia" +"Estilo das follas:\n" +"- Elegante: todas as caras son visibles\n" +"- Simple: só as caras exteriores\n" +"- Opaco: desactiva a transparencia" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Length of a server tick (the interval at which everything is generally " "updated),\n" @@ -4626,10 +4610,13 @@ msgid "" "This is a lower bound, i.e. server steps may not be shorter than this, but\n" "they are often longer." msgstr "" -"Duración dun tick de servidor (o intervalo no que xeralmente se actualiza " -"todo),\n" -"indicado en segundos.\n" -"Non se aplica ás sesións aloxadas desde o menú do cliente." +"Lonxitude dun tick do servidor (o intervalo no que todo se actualiza en " +"xeral),\n" +"expresada en segundos.\n" +"Non se aplica a sesións hospedadas desde o menú do cliente.\n" +"Este é un límite inferior, é dicir, os pasos do servidor non poden ser máis " +"curtos que isto, pero\n" +"a miúdo son máis longos." #: src/settings_translation_file.cpp msgid "Length of liquid waves." @@ -4749,9 +4736,8 @@ msgid "Liquid queue purge time" msgstr "Tempo para eliminar filas de líquidos" #: src/settings_translation_file.cpp -#, fuzzy msgid "Liquid reflections" -msgstr "Fluidez dos líquidos" +msgstr "Reflexións de líquidos" #: src/settings_translation_file.cpp msgid "Liquid sinking" @@ -5093,6 +5079,10 @@ msgid "" "You generally don't need to change this, however busy servers may benefit " "from a higher number." msgstr "" +"Número máximo de paquetes enviados por cada paso de envío no código de redes " +"de baixo nivel.\n" +"Xeralmente, non é necesario cambiar isto; con todo, os servidores moi " +"ocupados poden beneficiarse dun número máis alto." #: src/settings_translation_file.cpp msgid "Maximum number of players that can be connected simultaneously." @@ -5327,7 +5317,7 @@ msgstr "Resaltado dos nós" #: src/settings_translation_file.cpp msgid "Node specular" -msgstr "" +msgstr "Nodo especular" #: src/settings_translation_file.cpp msgid "NodeTimer interval" @@ -5381,14 +5371,13 @@ msgid "Number of messages a player may send per 10 seconds." msgstr "Cantidade de mensaxes que un xogador pode enviar por cada 10 segundos." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Number of threads to use for mesh generation.\n" "Value of 0 (default) will let Luanti autodetect the number of available " "threads." msgstr "" -"Número de fíos a usar para xeración de mallas.\n" -"O valor 0 (predeterminado) permitirá a Minetest detectar automaticamente o " +"Número de fíos a utilizar para a xeración de mallas.\n" +"Un valor de 0 (por defecto) permitirá que Luanti detecte automaticamente o " "número de fíos dispoñibles." #: src/settings_translation_file.cpp @@ -5421,18 +5410,16 @@ msgid "OpenGL debug" msgstr "Depuración de OpenGL" #: src/settings_translation_file.cpp -#, fuzzy msgid "Optimize GUI for touchscreens" -msgstr "Usar retículo para pantalla táctil" +msgstr "Optimizar a GUI para pantallas táctiles" #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "Substitución opcional da cor da ligazón web do chat." #: src/settings_translation_file.cpp -#, fuzzy msgid "Other Effects" -msgstr "Efectos gráficos" +msgstr "Outros efectos" #: src/settings_translation_file.cpp msgid "" @@ -5548,17 +5535,16 @@ msgid "Prometheus listener address" msgstr "Enderezo do Prometheus" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Prometheus listener address.\n" "If Luanti is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" "Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" -"Enderezo do Prometheus.\n" -"Se Minetest se compila coa opción ENABLE_PROMETHEUS activada,\n" -"habilita a obteción de métricas para Prometheus nese enderezo.\n" -"As métricas pódense obter en http://127.0.0.1:30000/metrics" +"Enderezo do escoitador de Prometheus.\n" +"Se Luanti está compilado coa opción ENABLE_PROMETHEUS habilitada,\n" +"habilita a escoita de métricas para Prometheus nese enderezo.\n" +"As métricas poden ser obtidas en http://127.0.0.1:30000/metrics" #: src/settings_translation_file.cpp msgid "Proportion of large caves that contain liquid." @@ -5585,6 +5571,8 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Radius to use when the block bounds HUD feature is set to near blocks." msgstr "" +"Raio a utilizar cando a función de HUD de límites de bloques está " +"configurada para bloques próximos." #: src/settings_translation_file.cpp msgid "Raises terrain to make valleys around the rivers." @@ -5906,11 +5894,12 @@ msgid "" "Send names of online players to the serverlist. If disabled only the player " "count is revealed." msgstr "" +"Enviar os nomes dos xogadores en liña á lista de servidores. Se está " +"deshabilitado, só se revela o número de xogadores." #: src/settings_translation_file.cpp -#, fuzzy msgid "Send player names to the server list" -msgstr "Anuncar en esta lista de servidores." +msgstr "Enviar os nomes dos xogadores á lista de servidores" #: src/settings_translation_file.cpp msgid "Server" @@ -5938,6 +5927,9 @@ msgid "" "Flags are positive. Uncheck the flag to disable corresponding anticheat " "module." msgstr "" +"Configuración antitrampas do servidor.\n" +"As bandeiras son positivas. Desmarque a bandeira para deshabilitar o módulo " +"antitrampas correspondente." #: src/settings_translation_file.cpp msgid "Server description" @@ -6096,6 +6088,8 @@ msgid "" "Shaders are a fundamental part of rendering and enable advanced visual " "effects." msgstr "" +"Os sombreadores son unha parte fundamental do renderizado e permiten efectos " +"visuais avanzados." #: src/settings_translation_file.cpp msgid "Shadow filter quality" @@ -6166,7 +6160,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Simulate translucency when looking at foliage in the sunlight." -msgstr "" +msgstr "Simular a translucidez ao mirar a follaxe á luz do sol." #: src/settings_translation_file.cpp msgid "" @@ -6220,9 +6214,8 @@ msgid "Smooth lighting" msgstr "Iluminación suave" #: src/settings_translation_file.cpp -#, fuzzy msgid "Smooth scrolling" -msgstr "Iluminación suave" +msgstr "Desprazamento suave" #: src/settings_translation_file.cpp msgid "" @@ -6249,9 +6242,8 @@ msgid "Sneaking speed, in nodes per second." msgstr "Velocidade ao se agachar, en nós por segundo." #: src/settings_translation_file.cpp -#, fuzzy msgid "Soft clouds" -msgstr "Nubes 3D" +msgstr "Nubes suaves" #: src/settings_translation_file.cpp msgid "Soft shadow radius" @@ -6492,7 +6484,6 @@ msgstr "" "O camiño do ficheiro relativa ao camiño do mundo onde se gardarán os perfís." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The gesture for punching players/entities.\n" "This can be overridden by games and mods.\n" @@ -6504,14 +6495,14 @@ msgid "" "Known from the classic Luanti mobile controls.\n" "Combat is more or less impossible." msgstr "" -"O xesto para golpear xogadores/entidades.\n" -"Isto pode ser anulado por xogos e modificacións.\n" +"A xesto para golpear xogadores/entidades.\n" +"Isto pode ser substituído por xogos e mods.\n" "\n" -"* toque_curto\n" -"Fácil de usar e coñecido doutros xogos que non deben ser nomeados.\n" +"* toque curto\n" +"Fácil de usar e ben coñecido doutros xogos que non se deben nomear.\n" "\n" -"* toque_longo\n" -"Coñecido polos controis móbiles clásicos de Minetest.\n" +"* toque longo\n" +"Coñecido polos controis móbiles clásicos en Luanti.\n" "O combate é máis ou menos imposible." #: src/settings_translation_file.cpp @@ -6577,16 +6568,14 @@ msgstr "" "Isto debería configurarse xunto con active_object_send_range_blocks." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The rendering back-end.\n" "Note: A restart is required after changing this!\n" "OpenGL is the default for desktop, and OGLES2 for Android." msgstr "" "O backend de renderizado.\n" -"Nota: É preciso reiniciar despois de cambiar isto!\n" -"OpenGL é o predeterminado para escritorio, e OGLES2 para Android.\n" -"Os sombreadores son compatibles con todo menos con OGLES1." +"Nota: É necesario reiniciar despois de cambiar isto!\n" +"OpenGL é o predeterminado para escritorio, e OGLES2 para Android" #: src/settings_translation_file.cpp msgid "" @@ -6714,6 +6703,8 @@ msgid "" "Tolerance of movement cheat detector.\n" "Increase the value if players experience stuttery movement." msgstr "" +"Tolerancia do detector de trampas de movemento.\n" +"Aumenta o valor se os xogadores experimentan movementos entrecortados." #: src/settings_translation_file.cpp msgid "Tooltip delay" @@ -6724,9 +6715,8 @@ msgid "Touchscreen" msgstr "Pantalla táctil" #: src/settings_translation_file.cpp -#, fuzzy msgid "Touchscreen controls" -msgstr "Límite da pantalla táctil" +msgstr "Controis de pantalla táctil" #: src/settings_translation_file.cpp msgid "Touchscreen sensitivity" @@ -6741,9 +6731,8 @@ msgid "Tradeoffs for performance" msgstr "Compensacións para o rendemento" #: src/settings_translation_file.cpp -#, fuzzy msgid "Translucent foliage" -msgstr "Líquidos translúcidos" +msgstr "Follaxe translúcida" #: src/settings_translation_file.cpp msgid "Translucent liquids" @@ -6793,15 +6782,14 @@ msgstr "" "Esta configuración só debe ser cambiada se tes problemas de rendemento." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "URL to JSON file which provides information about the newest Luanti " "release.\n" "If this is empty the engine will never check for updates." msgstr "" -"Enderezo para ficheiro JSON que proporciona información sobre a versión máis " -"recente de Minetest\n" -"Se está baleiro, o motor nunca buscará actualizacións." +"URL do arquivo JSON que proporciona información sobre a versión máis nova de " +"Luanti.\n" +"Se isto está baleiro, o motor nunca comprobará se hai actualizacións." #: src/settings_translation_file.cpp msgid "URL to the server list displayed in the Multiplayer Tab." @@ -6897,7 +6885,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Use smooth cloud shading." -msgstr "" +msgstr "Usar sombreado suave das nubes." #: src/settings_translation_file.cpp msgid "" @@ -7105,13 +7093,16 @@ msgstr "Cor de ligazóns web" #: src/settings_translation_file.cpp msgid "When enabled, liquid reflections are simulated." -msgstr "" +msgstr "Unha vez habilitado, simúlase a reflexión de líquidos." #: src/settings_translation_file.cpp msgid "" "When enabled, the GUI is optimized to be more usable on touchscreens.\n" "Whether this is enabled by default depends on your hardware form-factor." msgstr "" +"Unha vez habilitado, a GUI está optimizada para ser máis sinxelo de usar en " +"pantallas táctiles.\n" +"Se isto está habilitado por defecto depende do formato do seu hardware." #: src/settings_translation_file.cpp msgid "" @@ -7233,15 +7224,14 @@ msgid "Window maximized" msgstr "Xanela maximizada" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Windows systems only: Start Luanti with the command line window in the " "background.\n" "Contains the same information as the file debug.txt (default name)." msgstr "" -"Só sistemas Windows: Inicia Minetest coa xanela da liña de comandos en " +"Só Sistemas Windows: Iniciar Luanti coa xanela da liña de comandos en " "segundo plano.\n" -"Contén a mesma información que o ficheiro debug.txt (nome por defecto)." +"Contén a mesma información co arquivo debug.txt (nome por defecto)." #: src/settings_translation_file.cpp msgid "" From cf76dac464708013233aa708e23461776c8945e5 Mon Sep 17 00:00:00 2001 From: Yof Date: Sun, 3 Nov 2024 17:28:05 +0000 Subject: [PATCH 140/178] Translated using Weblate (Ukrainian) Currently translated at 94.6% (1309 of 1383 strings) --- po/uk/luanti.po | 31 ++++++++++++------------------- 1 file changed, 12 insertions(+), 19 deletions(-) diff --git a/po/uk/luanti.po b/po/uk/luanti.po index 972ccfc16..5a281c7ec 100644 --- a/po/uk/luanti.po +++ b/po/uk/luanti.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: Ukrainian (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-10-28 19:57+0100\n" -"PO-Revision-Date: 2024-08-04 22:09+0000\n" +"PO-Revision-Date: 2024-11-04 01:00+0000\n" "Last-Translator: Yof \n" "Language-Team: Ukrainian \n" @@ -13,7 +13,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: Weblate 5.7-dev\n" +"X-Generator: Weblate 5.8.2\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -160,7 +160,7 @@ msgstr "$1 завантажується..." #: builtin/mainmenu/content/dlg_contentdb.lua msgid "All" -msgstr "" +msgstr "Все" #: builtin/mainmenu/content/dlg_contentdb.lua #: builtin/mainmenu/content/dlg_package.lua @@ -169,9 +169,8 @@ msgid "Back" msgstr "Назад" #: builtin/mainmenu/content/dlg_contentdb.lua -#, fuzzy msgid "ContentDB is not available when Luanti was compiled without cURL" -msgstr "ContentDB недоступний, якщо Minetest було скомпільовано без cURL" +msgstr "ContentDB недоступний, якщо Luanti скомпільовано без cURL" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "Downloading..." @@ -215,7 +214,6 @@ msgid "Queued" msgstr "У черзі" #: builtin/mainmenu/content/dlg_contentdb.lua -#, fuzzy msgid "Texture Packs" msgstr "Набори текстур" @@ -269,9 +267,8 @@ msgid "Dependencies:" msgstr "Залежності:" #: builtin/mainmenu/content/dlg_install.lua -#, fuzzy msgid "Error getting dependencies for package $1" -msgstr "Помилка при отриманні залежностей для пакунку" +msgstr "Помилка при отриманні залежностей для пакунку $1" #: builtin/mainmenu/content/dlg_install.lua msgid "Install" @@ -306,32 +303,28 @@ msgid "Overwrite" msgstr "Перезаписати" #: builtin/mainmenu/content/dlg_package.lua -#, fuzzy msgid "ContentDB page" -msgstr "Адреса ContentDB" +msgstr "Сторінка ContentDB" #: builtin/mainmenu/content/dlg_package.lua -#, fuzzy msgid "Description" -msgstr "Опис сервера" +msgstr "Опис" #: builtin/mainmenu/content/dlg_package.lua msgid "Donate" -msgstr "" +msgstr "Пожертвувати" #: builtin/mainmenu/content/dlg_package.lua msgid "Forum Topic" -msgstr "" +msgstr "Тема на форумі" #: builtin/mainmenu/content/dlg_package.lua -#, fuzzy msgid "Information" -msgstr "Інформація:" +msgstr "Інформація" #: builtin/mainmenu/content/dlg_package.lua -#, fuzzy msgid "Install [$1]" -msgstr "Встановити $1" +msgstr "Встановити [$1]" #: builtin/mainmenu/content/dlg_package.lua msgid "Issue Tracker" @@ -944,7 +937,7 @@ msgstr "Загальне" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Movement" -msgstr "Переміщення" +msgstr "Рух" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Reset setting to default" From c2e89c5b6fd6961616ae11ae96190e7c95d89cb5 Mon Sep 17 00:00:00 2001 From: waxtatect Date: Wed, 6 Nov 2024 15:36:05 +0000 Subject: [PATCH 141/178] Translated using Weblate (French) Currently translated at 100.0% (1383 of 1383 strings) --- po/fr/luanti.po | 411 +++++++++++++++++++++++------------------------- 1 file changed, 201 insertions(+), 210 deletions(-) diff --git a/po/fr/luanti.po b/po/fr/luanti.po index 59c09ea79..ed71726ba 100644 --- a/po/fr/luanti.po +++ b/po/fr/luanti.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: French (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-10-28 19:57+0100\n" -"PO-Revision-Date: 2024-07-14 21:24+0000\n" +"PO-Revision-Date: 2024-11-06 18:04+0000\n" "Last-Translator: waxtatect \n" "Language-Team: French \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 5.7-dev\n" +"X-Generator: Weblate 5.8.2\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -64,7 +64,7 @@ msgstr "Commande non disponible : " #: builtin/common/chatcommands.lua msgid "Get help for commands (-t: output in chat)" -msgstr "Obtenir de l'aide pour les commandes (-t : afficher dans le tchat)" +msgstr "Obtenir de l'aide pour les commandes (-t : afficher dans le tchat)" #: builtin/common/chatcommands.lua msgid "" @@ -103,7 +103,7 @@ msgstr "Se reconnecter" #: builtin/fstk/ui.lua msgid "The server has requested a reconnect:" -msgstr "Le serveur a demandé une reconnexion :" +msgstr "Le serveur a demandé une reconnexion :" #: builtin/mainmenu/common.lua msgid "Protocol version mismatch. " @@ -136,7 +136,7 @@ msgstr "Échec du téléchargement de « $1 »" #: builtin/mainmenu/content/contentdb.lua msgid "Failed to download $1" -msgstr "Échec du téléchargement de $1" +msgstr "Échec du téléchargement de « $1 »" #: builtin/mainmenu/content/contentdb.lua msgid "" @@ -160,7 +160,7 @@ msgstr "Téléchargement de $1…" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "All" -msgstr "" +msgstr "Tout" #: builtin/mainmenu/content/dlg_contentdb.lua #: builtin/mainmenu/content/dlg_package.lua @@ -169,9 +169,8 @@ msgid "Back" msgstr "Retour" #: builtin/mainmenu/content/dlg_contentdb.lua -#, fuzzy msgid "ContentDB is not available when Luanti was compiled without cURL" -msgstr "ContentDB n'est pas disponible quand Minetest est compilé sans cURL" +msgstr "ContentDB n'est pas disponible quand Luanti est compilé sans cURL" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "Downloading..." @@ -179,7 +178,7 @@ msgstr "Téléchargement…" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "Featured" -msgstr "" +msgstr "Mis en avant" #: builtin/mainmenu/content/dlg_contentdb.lua msgid "Games" @@ -215,7 +214,6 @@ msgid "Queued" msgstr "En attente" #: builtin/mainmenu/content/dlg_contentdb.lua -#, fuzzy msgid "Texture Packs" msgstr "Packs de textures" @@ -269,9 +267,8 @@ msgid "Dependencies:" msgstr "Dépend de :" #: builtin/mainmenu/content/dlg_install.lua -#, fuzzy msgid "Error getting dependencies for package $1" -msgstr "Erreur d'obtention des dépendances pour le paquet" +msgstr "Erreur d'obtention des dépendances pour le paquet « $1 »" #: builtin/mainmenu/content/dlg_install.lua msgid "Install" @@ -306,44 +303,40 @@ msgid "Overwrite" msgstr "Écraser" #: builtin/mainmenu/content/dlg_package.lua -#, fuzzy msgid "ContentDB page" -msgstr "URL de ContentDB" +msgstr "Page ContentDB" #: builtin/mainmenu/content/dlg_package.lua -#, fuzzy msgid "Description" -msgstr "Description du serveur" +msgstr "Description" #: builtin/mainmenu/content/dlg_package.lua msgid "Donate" -msgstr "" +msgstr "Faire un don" #: builtin/mainmenu/content/dlg_package.lua msgid "Forum Topic" -msgstr "" +msgstr "Sujet du forum" #: builtin/mainmenu/content/dlg_package.lua -#, fuzzy msgid "Information" -msgstr "Informations :" +msgstr "Informations" #: builtin/mainmenu/content/dlg_package.lua -#, fuzzy msgid "Install [$1]" -msgstr "Installer $1" +msgstr "Installer [$1]" #: builtin/mainmenu/content/dlg_package.lua msgid "Issue Tracker" -msgstr "" +msgstr "Suivi des problèmes" #: builtin/mainmenu/content/dlg_package.lua msgid "Source" -msgstr "" +msgstr "Source" #: builtin/mainmenu/content/dlg_package.lua msgid "Translate" -msgstr "" +msgstr "Traduire" #: builtin/mainmenu/content/dlg_package.lua builtin/mainmenu/tab_content.lua msgid "Uninstall" @@ -354,13 +347,12 @@ msgid "Update" msgstr "Mettre à jour" #: builtin/mainmenu/content/dlg_package.lua -#, fuzzy msgid "Website" -msgstr "Visiter le site web" +msgstr "Site web" #: builtin/mainmenu/content/dlg_package.lua msgid "by $1 — $2 downloads — +$3 / $4 / -$5" -msgstr "" +msgstr "de $1 — $2 téléchargements — +$3 / $4 / -$5" #: builtin/mainmenu/content/pkgmgr.lua msgid "$1 (Enabled)" @@ -727,14 +719,13 @@ msgid "Dismiss" msgstr "Refuser" #: builtin/mainmenu/dlg_reinstall_mtg.lua -#, fuzzy msgid "" "For a long time, Luanti shipped with a default game called \"Minetest " "Game\". Since version 5.8.0, Luanti ships without a default game." msgstr "" -"Pendant longtemps, le moteur Minetest était livré avec un jeu par défaut " -"appelé « Minetest Game ». Depuis Minetest version 5.8.0, Minetest est livré " -"sans jeu par défaut." +"Pendant longtemps, Luanti était livré avec un jeu par défaut appelé « " +"Minetest Game ». Depuis la version 5.8.0, Luanti est livré sans jeu par " +"défaut." #: builtin/mainmenu/dlg_reinstall_mtg.lua msgid "" @@ -896,19 +887,16 @@ msgid "eased" msgstr "Lissé" #: builtin/mainmenu/settings/dlg_settings.lua -#, fuzzy msgid "(The game will need to enable automatic exposure as well)" -msgstr "(Le jeu doit également activer les ombres)" +msgstr "(Le jeu doit également activer l'exposition automatique)" #: builtin/mainmenu/settings/dlg_settings.lua -#, fuzzy msgid "(The game will need to enable bloom as well)" -msgstr "(Le jeu doit également activer les ombres)" +msgstr "(Le jeu doit également activer le flou lumineux)" #: builtin/mainmenu/settings/dlg_settings.lua -#, fuzzy msgid "(The game will need to enable volumetric lighting as well)" -msgstr "(Le jeu doit également activer les ombres)" +msgstr "(Le jeu doit également activer l'éclairage volumétrique)" #: builtin/mainmenu/settings/dlg_settings.lua msgid "(Use system language)" @@ -920,7 +908,7 @@ msgstr "Accessibilité" #: builtin/mainmenu/settings/dlg_settings.lua msgid "Auto" -msgstr "" +msgstr "Automatique" #: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp #: src/gui/touchcontrols.cpp src/settings_translation_file.cpp @@ -986,18 +974,16 @@ msgid "Content: Mods" msgstr "Contenu : Mods" #: builtin/mainmenu/settings/shader_warning_component.lua -#, fuzzy msgid "Enable" -msgstr "Activé" +msgstr "Activer" #: builtin/mainmenu/settings/shader_warning_component.lua -#, fuzzy msgid "Shaders are disabled." -msgstr "Mise à jour de la caméra désactivée" +msgstr "Les nuanceurs sont désactivés." #: builtin/mainmenu/settings/shader_warning_component.lua msgid "This is not a recommended configuration." -msgstr "" +msgstr "Cette configuration n'est pas recommandée." #: builtin/mainmenu/settings/shadows_component.lua msgid "(The game will need to enable shadows as well)" @@ -1158,17 +1144,15 @@ msgid "Install games from ContentDB" msgstr "Installer des jeux à partir de ContentDB" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Luanti doesn't come with a game by default." -msgstr "Minetest est livré sans jeu par défaut." +msgstr "Luanti est livré sans jeu par défaut." #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "" "Luanti is a game-creation platform that allows you to play many different " "games." msgstr "" -"Minetest est une plateforme de création avec laquelle découvrir de nombreux " +"Luanti est une plateforme de création avec laquelle découvrir de nombreux " "jeux différents." #: builtin/mainmenu/tab_local.lua @@ -1348,7 +1332,7 @@ msgstr "Une erreur de sérialisation est survenue :" #: src/client/game.cpp #, c-format msgid "Access denied. Reason: %s" -msgstr "Accès refusé. Raison : %s" +msgstr "Accès refusé. Raison : %s" #: src/client/game.cpp msgid "Automatic forward disabled" @@ -1409,11 +1393,11 @@ msgstr "Connexion au serveur…" #: src/client/game.cpp msgid "Connection error (timed out?)" -msgstr "Erreur de connexion (délai expiré ?)" +msgstr "Erreur de connexion (délai expiré ?)." #: src/client/game.cpp msgid "Connection failed for unknown reason" -msgstr "La connexion a échoué pour une raison inconnue" +msgstr "La connexion a échoué pour une raison inconnue." #: src/client/game.cpp msgid "Continue" @@ -1434,20 +1418,20 @@ msgid "" "- touch&drag, tap 2nd finger\n" " --> place single item to slot\n" msgstr "" -"Contrôles :\n" -"Sans menu ouvert :\n" -"– glissement du doigt : regarder autour\n" -"– appui : placer/frapper/utiliser (par défaut)\n" -"– appui long : creuser/utiliser (par défaut)\n" -"Menu/Inventaire ouvert :\n" -"– double-appui (en dehors) : fermer\n" -"– appui sur objets dans l'inventaire : déplacer\n" -"– appui, glissement et appui : pose d'un seul objet par emplacement\n" +"Contrôles :\n" +"Sans menu ouvert :\n" +"– glissement du doigt : regarder autour\n" +"– appui : placer/frapper/utiliser (par défaut)\n" +"– appui long : creuser/utiliser (par défaut)\n" +"Menu/Inventaire ouvert :\n" +"– double-appui (en dehors) : fermer\n" +"– appui sur objets dans l'inventaire : déplacer\n" +"– appui, glissement et appui : pose d'un seul objet par emplacement\n" #: src/client/game.cpp #, c-format msgid "Couldn't resolve address: %s" -msgstr "Impossible de résoudre l'adresse : %s" +msgstr "Impossible de résoudre l'adresse : %s." #: src/client/game.cpp msgid "Creating client..." @@ -1472,7 +1456,7 @@ msgstr "Informations de débogage, graphique du profileur et fils de fer cachés #: src/client/game.cpp #, c-format msgid "Error creating client: %s" -msgstr "Erreur de création du client : %s" +msgstr "Erreur de création du client : %s." #: src/client/game.cpp msgid "Exit to Menu" @@ -1636,7 +1620,7 @@ msgstr "Le serveur utilise probablement une version différente de %s." #: src/client/game.cpp #, c-format msgid "Unable to connect to %s because IPv6 is disabled" -msgstr "Impossible de se connecter à %s car IPv6 est désactivé" +msgstr "Impossible de se connecter à %s car IPv6 est désactivé." #: src/client/game.cpp #, c-format @@ -1751,7 +1735,7 @@ msgstr "Attente" #: src/client/keycode.cpp msgid "Caps Lock" -msgstr "Verr. Maj." +msgstr "Verr. maj." #: src/client/keycode.cpp msgid "Clear Key" @@ -2055,7 +2039,7 @@ msgid "" "Note: this may be caused by a dependency cycle, in which case try updating " "the mods." msgstr "" -"Note : cela peut être dû à un cycle de dépendances, dans ce cas essayer de " +"Note : ceci peut être dû à un cycle de dépendances, dans ce cas essayer de " "mettre à jour les mods." #: src/content/mod_configuration.cpp @@ -2272,37 +2256,38 @@ msgid "Sound Volume: %d%%" msgstr "Volume du son : %d %%" #: src/gui/touchcontrols.cpp -#, fuzzy msgid "Joystick" -msgstr "ID de manette" +msgstr "Manette" #: src/gui/touchcontrols.cpp msgid "Overflow menu" -msgstr "" +msgstr "Menu de débordement" #: src/gui/touchcontrols.cpp -#, fuzzy msgid "Toggle debug" -msgstr "Brouillard" +msgstr "Infos de débogage" #: src/network/clientpackethandler.cpp msgid "" "Another client is connected with this name. If your client closed " "unexpectedly, try again in a minute." msgstr "" +"Un autre client est connecté avec ce nom. Si votre client s'est fermé " +"inopinément, réessayer dans une minute." #: src/network/clientpackethandler.cpp msgid "Empty passwords are disallowed. Set a password and try again." msgstr "" +"Les mots de passe vides sont refusés. Définissez un mot de passe et " +"réessayez." #: src/network/clientpackethandler.cpp msgid "Internal server error" -msgstr "" +msgstr "Erreur interne du serveur." #: src/network/clientpackethandler.cpp -#, fuzzy msgid "Invalid password" -msgstr "Ancien mot de passe" +msgstr "Mot de passe incorrect." #. ~ DO NOT TRANSLATE THIS LITERALLY! #. This is a special string which needs to contain the translation's @@ -2325,46 +2310,50 @@ msgstr "Le nom est pris. Veuillez choisir un autre nom." #: src/network/clientpackethandler.cpp msgid "Player name contains disallowed characters" -msgstr "" +msgstr "Le nom de joueur contient des caractères non autorisés." #: src/network/clientpackethandler.cpp -#, fuzzy msgid "Player name not allowed" -msgstr "Nom du joueur trop long." +msgstr "Le nom de joueur est non autorisé." #: src/network/clientpackethandler.cpp -#, fuzzy msgid "Server shutting down" -msgstr "Fermeture du jeu…" +msgstr "Arrêt du serveur." #: src/network/clientpackethandler.cpp msgid "" "The server has experienced an internal error. You will now be disconnected." msgstr "" +"Le serveur a rencontré une erreur interne. Vous allez maintenant être " +"déconnecté." #: src/network/clientpackethandler.cpp msgid "The server is running in singleplayer mode. You cannot connect." -msgstr "" +msgstr "Le serveur fonctionne en mode solo. Vous ne pouvez pas vous connecter." #: src/network/clientpackethandler.cpp msgid "Too many users" -msgstr "" +msgstr "Trop de joueurs." #: src/network/clientpackethandler.cpp msgid "Unknown disconnect reason." -msgstr "" +msgstr "Raison de déconnexion inconnue." #: src/network/clientpackethandler.cpp msgid "" "Your client sent something the server didn't expect. Try reconnecting or " "updating your client." msgstr "" +"Votre client a envoyé quelque chose que le serveur n'attendait pas. Essayez " +"de vous reconnecter ou de mettre à jour votre client." #: src/network/clientpackethandler.cpp msgid "" "Your client's version is not supported.\n" "Please contact the server administrator." msgstr "" +"La version de votre client n'est pas prise en charge.\n" +"Veuillez contacter l'administrateur du serveur." #: src/server.cpp #, c-format @@ -2479,8 +2468,9 @@ msgid "" msgstr "" "Bruit 3D pour la structures des terrains flottants.\n" "Si la valeur par défaut est changée, le bruit « d'échelle » (0,7 par défaut) " -"peut demander à être ajustée. L'effilage des terrains flottants fonctionne " -"mieux quand le bruit a une valeur autour de -2,0 à 2,0." +"peut demander à être ajustée.\n" +"L'effilage des terrains flottants fonctionne mieux quand le bruit a une " +"valeur autour de -2,0 à 2,0." #: src/settings_translation_file.cpp msgid "3D noise defining structure of river canyon walls." @@ -2512,14 +2502,14 @@ msgid "" "Note that the interlaced mode requires shaders to be enabled." msgstr "" "Prise en charge de la 3D.\n" -"Actuellement disponible :\n" -"– aucun : pas de sortie 3D.\n" -"– anaglyphe : 3D en couleur cyan/magenta.\n" -"– entrelacé : prise en charge de l'écran avec polarisation basée sur les " +"Actuellement disponible :\n" +"– aucun : pas de sortie 3D.\n" +"– anaglyphe : 3D en couleur cyan/magenta.\n" +"– entrelacé : prise en charge de l'écran avec polarisation basée sur les " "lignes paires/impaires.\n" -"– haut-bas : partage haut et bas de l'écran.\n" -"– côte-à-côte : partage côte à côte de l'écran.\n" -"– vision croisée : vision croisée 3D.\n" +"– haut-bas : partage haut et bas de l'écran.\n" +"– côte-à-côte : partage côte à côte de l'écran.\n" +"– vision croisée : vision croisée 3D.\n" "Noter que le mode entrelacé nécessite que les nuanceurs soient activés." #: src/settings_translation_file.cpp @@ -2625,7 +2615,7 @@ msgstr "" "Des valeurs plus élevées rendent les niveaux de lumière moyens et inférieurs " "plus lumineux.\n" "La valeur « 1,0 » laisse la courbe de lumière intacte.\n" -"Cela a un effet significatif seulement sur la lumière du jour et la lumière " +"Ceci a un effet significatif seulement sur la lumière du jour et la lumière " "artificielle, et a très peu d'effet sur la lumière naturelle nocturne." #: src/settings_translation_file.cpp @@ -2662,11 +2652,11 @@ msgstr "Méthode de l'anticrénelage" #: src/settings_translation_file.cpp msgid "Anticheat flags" -msgstr "" +msgstr "Options anti-triche" #: src/settings_translation_file.cpp msgid "Anticheat movement tolerance" -msgstr "" +msgstr "Tolérance de mouvement anti-triche" #: src/settings_translation_file.cpp msgid "Append item name" @@ -2697,12 +2687,12 @@ msgstr "" "effectue un tramage supplémentaire ou si les canaux de couleur ne sont pas " "quantifiés à 8 bits.\n" "Avec OpenGL ES, le tramage fonctionne seulement si les nuanceurs prennent en " -"charge une précision élevée en virgule flottante et cela peut avoir un " +"charge une précision élevée en virgule flottante et ceci peut avoir un " "impact plus important sur les performances." #: src/settings_translation_file.cpp msgid "Apply specular shading to nodes." -msgstr "" +msgstr "Appliquer un ombrage spéculaire aux nœuds." #: src/settings_translation_file.cpp msgid "Arm inertia" @@ -2821,9 +2811,8 @@ msgid "Biome noise" msgstr "Bruit des biomes" #: src/settings_translation_file.cpp -#, fuzzy msgid "Block bounds HUD radius" -msgstr "Limites des blocs" +msgstr "Rayon de l'ATH des limites des blocs" #: src/settings_translation_file.cpp msgid "Block cull optimize distance" @@ -3040,7 +3029,6 @@ msgstr "" "Utile pour les tests. Voir « al_extensions.[h, cpp] » pour plus de détails." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Comma-separated list of flags to hide in the content repository.\n" "\"nonfree\" can be used to hide packages which do not qualify as 'free " @@ -3055,8 +3043,8 @@ msgstr "" "« nonfree » peut être utilisé pour cacher les paquets non libres, comme " "défini par la « Free Software Foundation ».\n" "Vous pouvez aussi spécifier des classifications de contenu.\n" -"Ces étiquettes sont indépendants des versions de Minetest, consulter la " -"liste complète à l'adresse https://content.minetest.net/help/content_flags/." +"Ces étiquettes sont indépendantes des versions de Luanti, consulter la liste " +"complète à l'adresse https://content.luanti.org/help/content_flags/." #: src/settings_translation_file.cpp msgid "" @@ -3257,12 +3245,11 @@ msgid "" "This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" -"Définit la qualité du filtrage des ombres. Cela simule l'effet d'ombres " -"douces en appliquant un disque PCF ou Poisson mais utilise également plus de " -"ressources." +"Définir la qualité du filtrage des ombres.\n" +"Ceci simule l'effet d'ombres douces en appliquant un disque PCF ou Poisson " +"mais utilise également plus de ressources." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Define the oldest clients allowed to connect.\n" "Older clients are compatible in the sense that they will not crash when " @@ -3274,14 +3261,14 @@ msgid "" "Luanti still enforces its own internal minimum, and enabling\n" "strict_protocol_version_checking will effectively override this." msgstr "" -"Définit les clients les plus anciens autorisés à se connecter.\n" -"Les anciens clients sont compatibles dans le sens où ils ne s'interrompent " -"pas lors de la connexion aux serveurs récents,\n" +"Définir les clients les plus anciens autorisés à se connecter.\n" +"Les anciens clients sont compatibles dans le sens où ils ne plantent pas " +"lors de la connexion aux serveurs récents,\n" "mais ils peuvent ne pas prendre en charge certaines fonctionnalités.\n" -"Cela permet un contrôle plus précis que " -"« strict_protocol_version_checking ».\n" -"Minetest applique toujours son propre minimum interne, activer " -"« strict_protocol_version_checking » le remplace." +"Ceci permet un contrôle plus précis que « strict_protocol_version_checking »." +"\n" +"Luanti applique toujours son propre minimum interne, activer « " +"strict_protocol_version_checking » le remplace." #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." @@ -3325,8 +3312,7 @@ msgstr "Définit la profondeur des canaux de rivières." #: src/settings_translation_file.cpp msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." msgstr "" -"Détermine la distance maximale de transfert du joueur en blocs (0 = " -"illimité)." +"Définit la distance maximale de transfert du joueur en blocs (0 = illimité)." #: src/settings_translation_file.cpp msgid "" @@ -3421,7 +3407,6 @@ msgid "Display Density Scaling Factor" msgstr "Facteur d'échelle de la densité d'affichage" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Distance in nodes at which transparency depth sorting is enabled.\n" "Use this to limit the performance impact of transparency depth sorting.\n" @@ -3430,7 +3415,8 @@ msgstr "" "Distance en nœuds à laquelle le tri de profondeur de la transparence est " "activé.\n" "Utiliser cette option pour limiter l'impact sur les performances du tri de " -"profondeur de la transparence." +"profondeur de la transparence.\n" +"Définir à 0 pour désactiver complètement." #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." @@ -3461,9 +3447,8 @@ msgid "Dungeon noise" msgstr "Bruit de donjons" #: src/settings_translation_file.cpp -#, fuzzy msgid "Effects" -msgstr "Effets graphiques" +msgstr "Effets" #: src/settings_translation_file.cpp msgid "Enable Automatic Exposure" @@ -3494,7 +3479,7 @@ msgid "" "Enable Lua modding support on client.\n" "This support is experimental and API can change." msgstr "" -"Active la prise en charge des mods Lua du client.\n" +"Activer la prise en charge des mods Lua du client.\n" "Cette option est expérimentale et l'API peut changer." #: src/settings_translation_file.cpp @@ -3503,7 +3488,7 @@ msgid "" "On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " "filtering." msgstr "" -"Active le filtrage par disque de Poisson.\n" +"Activer le filtrage par disque de Poisson.\n" "Si activé, utilise le disque de Poisson pour créer des « ombres douces ». " "Sinon, utilise le filtrage PCF." @@ -3522,7 +3507,7 @@ msgid "" "automatically adjust to the brightness of the scene,\n" "simulating the behavior of human eye." msgstr "" -"Active la correction automatique de l'exposition, lorsque cette option est " +"Activer la correction automatique de l'exposition, lorsque cette option est " "activée,\n" "le moteur de post-traitement s'adapte automatiquement à la luminosité de la " "scène,\n" @@ -3533,7 +3518,7 @@ msgid "" "Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" -"Active les ombres colorées.\n" +"Activer les ombres colorées.\n" "Sur les nœuds vraiment transparents, projette des ombres colorées. Ceci est " "coûteux." @@ -3547,7 +3532,7 @@ msgstr "Activer les manettes" #: src/settings_translation_file.cpp msgid "Enable joysticks. Requires a restart to take effect" -msgstr "Active les manettes. Nécessite un redémarrage pour prendre effet." +msgstr "Activer les manettes. Nécessite un redémarrage pour prendre effet." #: src/settings_translation_file.cpp msgid "Enable mod channels support." @@ -3566,24 +3551,21 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Enable random mod loading (mainly used for testing)." msgstr "" -"Active le chargement aléatoire des mods (principalement utilisé pour les " +"Activer le chargement aléatoire des mods (principalement utilisé pour les " "tests)." #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" -"Active l'entrée aléatoire du joueur (seulement utilisé pour les tests)." +"Activer l'entrée aléatoire du joueur (seulement utilisé pour les tests)." #: src/settings_translation_file.cpp -#, fuzzy msgid "Enable smooth lighting with simple ambient occlusion." -msgstr "" -"Activer le lissage de l'éclairage avec une occlusion ambiante simple.\n" -"Désactiver pour davantage de performances ou pour un visuel différent." +msgstr "Activer le lissage de l'éclairage avec une occlusion ambiante simple." #: src/settings_translation_file.cpp msgid "Enable split login/register" -msgstr "Active la séparation de connexion/s'inscrire" +msgstr "Activer la séparation de connexion/s'inscrire" #: src/settings_translation_file.cpp msgid "" @@ -3594,13 +3576,14 @@ msgid "" "expecting." msgstr "" "Activer pour empêcher les anciens clients de se connecter.\n" -"Les anciens clients sont compatibles dans le sens où ils ne s'interrompent " -"pas lors de la connexion aux serveurs récents,\n" +"Les anciens clients sont compatibles dans le sens où ils ne plantent pas " +"lors de la connexion aux serveurs récents,\n" "mais ils peuvent ne pas prendre en charge certaines fonctionnalités." #: src/settings_translation_file.cpp msgid "Enable updates available indicator on content tab" msgstr "" +"Activer l'indicateur de disponibilité des mises à jour dans l'onglet contenu" #: src/settings_translation_file.cpp msgid "" @@ -3619,7 +3602,7 @@ msgid "" "Enable view bobbing and amount of view bobbing.\n" "For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." msgstr "" -"Active le balancement de la vue et la quantité de balancement de la vue.\n" +"Activer le balancement de la vue et la quantité de balancement de la vue.\n" "Par exemple : 0 pour aucun balancement de la vue, 1 pour normal, 2 pour " "double." @@ -3629,7 +3612,7 @@ msgid "" "Ignored if bind_address is set.\n" "Needs enable_ipv6 to be enabled." msgstr "" -"Active/désactive l'usage d'un serveur IPv6.\n" +"Activer/désactiver l'usage d'un serveur IPv6.\n" "Ignoré si « bind_address » est activé.\n" "A besoin de « enable_ipv6 » pour être activé." @@ -3651,20 +3634,20 @@ msgid "Enables animation of inventory items." msgstr "Active l'animation des objets de l'inventaire." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Enables caching of facedir rotated meshes.\n" "This is only effective with shaders disabled." -msgstr "Active la mise en cache des mailles orientés « facedir »." +msgstr "" +"Active la mise en cache des mailles orientés « facedir ».\n" +"Ceci n'a d'effet que si les nuanceurs sont désactivées." #: src/settings_translation_file.cpp msgid "Enables debug and error-checking in the OpenGL driver." msgstr "Active le débogage et la vérification des erreurs du pilote OpenGL." #: src/settings_translation_file.cpp -#, fuzzy msgid "Enables smooth scrolling." -msgstr "Activer le post-traitement" +msgstr "Active le défilement doux." #: src/settings_translation_file.cpp msgid "Enables the post processing pipeline." @@ -3677,6 +3660,9 @@ msgid "" "\"auto\" means that the touchscreen controls will be enabled and disabled\n" "automatically depending on the last used input method." msgstr "" +"Active les contrôles de l'écran tactile.\n" +"« automatique » signifie que les contrôles de l'écran tactile sont activées " +"et désactivées automatiquement selon la dernière méthode de saisie utilisée." #: src/settings_translation_file.cpp msgid "" @@ -3900,7 +3886,7 @@ msgid "" "be\n" "sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32." msgstr "" -"Pour les polices de style pixel qui ne s'adaptent pas bien, cela garantit " +"Pour les polices de style pixel qui ne s'adaptent pas bien, ceci garantit " "que les tailles de police utilisées avec cette police sont toujours " "divisibles par cette valeur, en pixels.\n" "Par exemple une police de style pixel de 16 pixels de haut doit avoir cette " @@ -3979,7 +3965,7 @@ msgstr "" "Distance maximale à laquelle les clients ont connaissance des objets, " "établie en blocs de carte (16 nœuds).\n" "\n" -"Définir cela plus grand que « active_block_range », ainsi le serveur " +"Définir ceci plus grand que « active_block_range », ainsi le serveur " "maintient les objets actifs jusqu’à cette distance dans la direction où un " "joueur regarde (cela peut éviter que des mobs disparaissent soudainement de " "la vue)." @@ -4263,6 +4249,9 @@ msgid "" "ContentDB to\n" "check for package updates when opening the mainmenu." msgstr "" +"Si activé et que des paquets ContentDB sont installés, Luanti peut contacter " +"ContentDB pour vérifier les mises à jour des paquets lors de l'ouverture du " +"menu principal." #: src/settings_translation_file.cpp msgid "" @@ -4317,7 +4306,7 @@ msgid "" msgstr "" "Si activé, le serveur effectue la détermination des blocs de carte " "invisibles selon la position des yeux du joueur.\n" -"Cela peut réduire le nombre de blocs envoyés au client de 50 à 80 %.\n" +"Ceci peut réduire le nombre de blocs envoyés au client de 50 à 80 %.\n" "Les clients ne reçoivent plus la plupart des blocs invisibles, de sorte que " "l'utilité du mode sans collisions est réduite." @@ -4402,13 +4391,12 @@ msgid "Instrument chat commands on registration." msgstr "Instrumenter les commandes de tchat à l'enregistrement." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Instrument global callback functions on registration.\n" "(anything you pass to a core.register_*() function)" msgstr "" "Instrumenter les fonctions de rappel global à l'enregistrement (tout ce que " -"vous passez à une fonction « minetest.register_*() »)." +"vous passez à une fonction « core.register_*() »)." #: src/settings_translation_file.cpp msgid "" @@ -4617,7 +4605,6 @@ msgid "Leaves style" msgstr "Apparence des feuilles" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Leaves style:\n" "- Fancy: all faces visible\n" @@ -4626,12 +4613,10 @@ msgid "" msgstr "" "Apparence des feuilles :\n" "– détaillée : toutes les faces sont visibles\n" -"– simple : seulement les faces externes, si les « special_tiles » définies " -"sont utilisées\n" +"– simple : seulement les faces externes\n" "– opaque : désactive la transparence" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Length of a server tick (the interval at which everything is generally " "updated),\n" @@ -4642,7 +4627,9 @@ msgid "" msgstr "" "Durée d'intervalle serveur (intervalle auquel tout est généralement mis à " "jour), établie en secondes.\n" -"Ne s'applique pas aux sessions hébergées à partir du menu client." +"Ne s'applique pas aux sessions hébergées à partir du menu client.\n" +"Il s'agit d'une limite inférieure, c.-à-d. que les étapes du serveur ne " +"peuvent pas être plus courtes que cela, mais elles sont souvent plus longues." #: src/settings_translation_file.cpp msgid "Length of liquid waves." @@ -4740,7 +4727,7 @@ msgstr "" "– l'obtention de média si le serveur utilise le paramètre « remote_media ».\n" "– le téléchargement de la liste des serveurs et l'annonce du serveur.\n" "– les téléchargements effectués par le menu (ex. : gestionnaire de mods).\n" -"A un effet seulement si Minetest est compilé avec cURL." +"A un effet seulement si Luanti est compilé avec cURL." #: src/settings_translation_file.cpp msgid "Liquid fluidity" @@ -4759,9 +4746,8 @@ msgid "Liquid queue purge time" msgstr "Délai de nettoyage d'une file de liquide" #: src/settings_translation_file.cpp -#, fuzzy msgid "Liquid reflections" -msgstr "Fluidité des liquides" +msgstr "Réflexions des liquides" #: src/settings_translation_file.cpp msgid "Liquid sinking" @@ -4857,11 +4843,11 @@ msgid "" "'altitude_dry': Reduces humidity with altitude." msgstr "" "Attributs spécifiques au générateur de terrain vallées.\n" -"« altitude_chill » : réduit la chaleur avec l’altitude.\n" -"« humid_rivers » : augmente l’humidité autour des rivières.\n" -"« vary_river_dept » : si activé, une humidité faible et une chaleur élevée " +"« altitude_chill » : réduit la chaleur avec l’altitude.\n" +"« humid_rivers » : augmente l’humidité autour des rivières.\n" +"« vary_river_dept » : si activé, une humidité faible et une chaleur élevée " "rendent les rivières moins profondes et parfois sèches.\n" -"« altitude_dry » : réduit l’humidité avec l’altitude." +"« altitude_dry » : réduit l’humidité avec l’altitude." #: src/settings_translation_file.cpp msgid "Map generation attributes specific to Mapgen v5." @@ -4891,10 +4877,10 @@ msgid "" "'caverns': Giant caves deep underground." msgstr "" "Attributs spécifiques au générateur de terrain v7.\n" -"« montagnes » : montagnes.\n" -"« crêtes » : rivières.\n" -"« terrains flottants » : masses de terrains flottants dans l'atmosphère.\n" -"« cavernes » : cavernes immenses loin sous la surface." +"« montagnes » : montagnes.\n" +"« crêtes » : rivières.\n" +"« terrains flottants » : masses de terrains flottants dans l'atmosphère.\n" +"« cavernes » : cavernes immenses loin sous la surface." #: src/settings_translation_file.cpp msgid "Map generation limit" @@ -5107,6 +5093,10 @@ msgid "" "You generally don't need to change this, however busy servers may benefit " "from a higher number." msgstr "" +"Nombre maximal de paquets envoyés par étape d'envoi dans le code réseau de " +"bas niveau.\n" +"Il n'est généralement pas nécessaire de modifier ce nombre, mais les " +"serveurs très sollicités peuvent bénéficier d'un nombre plus élevé." #: src/settings_translation_file.cpp msgid "Maximum number of players that can be connected simultaneously." @@ -5282,7 +5272,7 @@ msgid "" "For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." msgstr "" "Facteur de balancement de chute.\n" -"Par exemple : 0 pour aucun balancement de la vue, 1 pour normal, 2 pour " +"Par exemple : 0 pour aucun balancement de chute, 1 pour normal, 2 pour " "double." #: src/settings_translation_file.cpp @@ -5345,7 +5335,7 @@ msgstr "Surbrillance des blocs" #: src/settings_translation_file.cpp msgid "Node specular" -msgstr "" +msgstr "Nœud spéculaire" #: src/settings_translation_file.cpp msgid "NodeTimer interval" @@ -5403,14 +5393,13 @@ msgid "Number of messages a player may send per 10 seconds." msgstr "Nombre de messages qu'un joueur peut envoyer en 10 secondes." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Number of threads to use for mesh generation.\n" "Value of 0 (default) will let Luanti autodetect the number of available " "threads." msgstr "" "Nombre de fils à utiliser pour la génération du maillage.\n" -"La valeur 0 (par défaut) permet à Minetest de détecter automatiquement le " +"La valeur 0 (par défaut) permet à Luanti de détecter automatiquement le " "nombre de fils disponibles." #: src/settings_translation_file.cpp @@ -5441,18 +5430,16 @@ msgid "OpenGL debug" msgstr "Débogage OpenGL" #: src/settings_translation_file.cpp -#, fuzzy msgid "Optimize GUI for touchscreens" -msgstr "Utiliser le réticule" +msgstr "Optimiser l'interface graphique pour les écrans tactiles" #: src/settings_translation_file.cpp msgid "Optional override for chat weblink color." msgstr "Remplacement optionnel pour la couleur du lien web du tchat." #: src/settings_translation_file.cpp -#, fuzzy msgid "Other Effects" -msgstr "Effets graphiques" +msgstr "Autres effets" #: src/settings_translation_file.cpp msgid "" @@ -5540,7 +5527,7 @@ msgstr "" "des boutons de la souris.\n" "Activer cette option lorsque vous creusez ou placez trop souvent par " "accident.\n" -"Sur écrans tactiles, cela a un effet seulement pour creuser." +"Sur écrans tactiles, ceci a un effet seulement pour creuser." #: src/settings_translation_file.cpp msgid "Prevent mods from doing insecure things like running shell commands." @@ -5572,7 +5559,6 @@ msgid "Prometheus listener address" msgstr "Adresse d'écoute pour Prometheus" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Prometheus listener address.\n" "If Luanti is compiled with ENABLE_PROMETHEUS option enabled,\n" @@ -5580,7 +5566,7 @@ msgid "" "Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" "Adresse d'écoute pour Prometheus.\n" -"Lorsque Minetest est compilé avec l'option « ENABLE_PROMETHEUS », cette " +"Lorsque Luanti est compilé avec l'option « ENABLE_PROMETHEUS », cette " "adresse est utilisée pour l'écoute de données pour Prometheus.\n" "Les métriques peuvent être récupérées sur http://127.0.0.1:30000/metrics." @@ -5609,6 +5595,8 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Radius to use when the block bounds HUD feature is set to near blocks." msgstr "" +"Rayon utilisé lorsque l'ATH des limites des blocs est défini sur les blocs " +"voisins." #: src/settings_translation_file.cpp msgid "Raises terrain to make valleys around the rivers." @@ -5670,13 +5658,13 @@ msgid "" msgstr "" "Limite l'accès de certaines fonctions côté client sur les serveurs.\n" "Combiner les « byteflags » ci dessous pour restreindre les fonctionnalités " -"client, ou mettre 0 pour laisser sans restriction :\n" +"client, ou définir à 0 pour laisser sans restriction :\n" "LOAD_CLIENT_MODS : 1 (désactive le chargement des mods client)\n" "CHAT_MESSAGES : 2 (désactive l'appel « send_chat_message » côté client)\n" "READ_ITEMDEFS : 4 (désactive l'appel « get_item_def » côté client)\n" "READ_NODEDEFS : 8 (désactive l'appel « get_node_def » côté client)\n" -"LOOKUP_NODES_LIMIT : 16 (limite l'appel « get_node » côté client à " -"« csm_restriction_noderange »)\n" +"LOOKUP_NODES_LIMIT : 16 (limite l'appel « get_node » côté client à « " +"csm_restriction_noderange »)\n" "READ_PLAYERINFO : 32 (désactive l'appel « get_player_names » côté client)" #: src/settings_translation_file.cpp @@ -5772,9 +5760,9 @@ msgid "" "edge pixels when images are scaled by non-integer sizes." msgstr "" "Met à l'échelle l'interface graphique par une valeur spécifiée par " -"l'utilisateur, à l'aide d'un filtre au plus proche voisin avec " -"anticrénelage.\n" -"Cela lisse certains bords grossiers, et mélange les pixels en réduisant " +"l'utilisateur, à l'aide d'un filtre au plus proche voisin avec anticrénelage." +"\n" +"Ceci lisse certains bords grossiers, et mélange les pixels en réduisant " "l'échelle.\n" "Au détriment d'un effet de flou sur des pixels en bordure quand les images " "sont mises à l'échelle par des valeurs fractionnelles." @@ -5933,11 +5921,12 @@ msgid "" "Send names of online players to the serverlist. If disabled only the player " "count is revealed." msgstr "" +"Envoyer les noms des joueurs en ligne à la liste des serveurs. Si désactivé, " +"seul le nombre de joueurs est affiché." #: src/settings_translation_file.cpp -#, fuzzy msgid "Send player names to the server list" -msgstr "Annoncer à cette liste de serveurs." +msgstr "Envoyer les noms des joueurs à la liste des serveurs" #: src/settings_translation_file.cpp msgid "Server" @@ -5965,6 +5954,9 @@ msgid "" "Flags are positive. Uncheck the flag to disable corresponding anticheat " "module." msgstr "" +"Configuration anti-triche du serveur.\n" +"Les options sont positives. Décocher l'option pour désactiver le module anti-" +"triche correspondant." #: src/settings_translation_file.cpp msgid "Server description" @@ -6014,7 +6006,7 @@ msgid "" "Value of 0.0 (default) means no exposure compensation.\n" "Range: from -1 to 1.0" msgstr "" -"Définit la compensation de l'exposition en unités EV.\n" +"Définir la compensation de l'exposition en unités EV.\n" "La valeur de 0,0 (par défaut) signifie qu'il n'y a pas de compensation " "d'exposition.\n" "Plage : de -1 à 1,0" @@ -6058,31 +6050,31 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Set to true to enable Shadow Mapping." -msgstr "Active le mappage des ombres." +msgstr "Activer le mappage des ombres." #: src/settings_translation_file.cpp msgid "" "Set to true to enable bloom effect.\n" "Bright colors will bleed over the neighboring objects." msgstr "" -"Active le flou lumineux.\n" +"Activer le flou lumineux.\n" "Les couleurs vives débordent sur les objets voisins." #: src/settings_translation_file.cpp msgid "Set to true to enable volumetric lighting effect (a.k.a. \"Godrays\")." -msgstr "Active l'éclairage volumétrique (parfois appelé « rayons de Dieu »)." +msgstr "Activer l'éclairage volumétrique (parfois appelé « rayons de Dieu »)." #: src/settings_translation_file.cpp msgid "Set to true to enable waving leaves." -msgstr "Active l'ondulation des feuilles." +msgstr "Activer l'ondulation des feuilles." #: src/settings_translation_file.cpp msgid "Set to true to enable waving liquids (like water)." -msgstr "Active l'ondulation des liquides (comme l'eau)." +msgstr "Activer l'ondulation des liquides (comme l'eau)." #: src/settings_translation_file.cpp msgid "Set to true to enable waving plants." -msgstr "Active l'ondulation des plantes." +msgstr "Activer l'ondulation des plantes." #: src/settings_translation_file.cpp msgid "" @@ -6091,7 +6083,7 @@ msgid "" "top-left - processed base image, top-right - final image\n" "bottom-left - raw base image, bottom-right - bloom texture." msgstr "" -"Restitue la partition de débogage du flou lumineux.\n" +"Restituer la partition de débogage du flou lumineux.\n" "En mode débogage, l'écran est divisé en 4 quadrants :\n" "en haut à gauche – image de base traitée, en haut à droite – image finale\n" "en bas à gauche – image de base brute, en bas à droite – texture de l'effet " @@ -6105,7 +6097,7 @@ msgid "" msgstr "" "Définit la qualité de la texture de l'ombre sur 32 bits.\n" "Si désactivé, une texture de 16 bits est utilisée.\n" -"Cela peut causer beaucoup plus d'artefacts sur l'ombre." +"Ceci peut causer beaucoup plus d'artefacts sur l'ombre." #: src/settings_translation_file.cpp msgid "Shader path" @@ -6120,6 +6112,8 @@ msgid "" "Shaders are a fundamental part of rendering and enable advanced visual " "effects." msgstr "" +"Les nuanceurs sont un élément fondamental du rendu et permettent des effets " +"visuels avancés." #: src/settings_translation_file.cpp msgid "Shadow filter quality" @@ -6192,7 +6186,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Simulate translucency when looking at foliage in the sunlight." -msgstr "" +msgstr "Simuler la translucidité en regardant le feuillage au soleil." #: src/settings_translation_file.cpp msgid "" @@ -6249,9 +6243,8 @@ msgid "Smooth lighting" msgstr "Lissage de l'éclairage" #: src/settings_translation_file.cpp -#, fuzzy msgid "Smooth scrolling" -msgstr "Lissage de l'éclairage" +msgstr "Défilement doux" #: src/settings_translation_file.cpp msgid "" @@ -6278,9 +6271,8 @@ msgid "Sneaking speed, in nodes per second." msgstr "Vitesse de déplacement lent, en nœuds par seconde." #: src/settings_translation_file.cpp -#, fuzzy msgid "Soft clouds" -msgstr "Nuages 3D" +msgstr "Nuages doux" #: src/settings_translation_file.cpp msgid "Soft shadow radius" @@ -6520,7 +6512,6 @@ msgstr "" "sauvegardés." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The gesture for punching players/entities.\n" "This can be overridden by games and mods.\n" @@ -6539,7 +6530,7 @@ msgstr "" "Facile à utiliser et bien connu dans d'autres jeux.\n" "\n" "* appui long\n" -"Connu des contrôles classiques de Minetest mobile.\n" +"Connu des contrôles classiques de Luanti mobile.\n" "Le combat est plus ou moins impossible." #: src/settings_translation_file.cpp @@ -6571,7 +6562,7 @@ msgid "" "the dig button." msgstr "" "Durée minimale en secondes entre le minage de blocs lors du maintien du " -"bouton ceuser." +"bouton creuser." #: src/settings_translation_file.cpp msgid "The network interface that the server listens on." @@ -6604,17 +6595,15 @@ msgstr "" "Ceci doit être configuré avec « active_object_send_range_blocks »." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The rendering back-end.\n" "Note: A restart is required after changing this!\n" "OpenGL is the default for desktop, and OGLES2 for Android." msgstr "" "Le moteur de rendu.\n" -"Remarque : un redémarrage est nécessaire après cette modification !\n" +"Remarque : un redémarrage est nécessaire après cette modification !\n" "OpenGL est la valeur par défaut pour les ordinateurs de bureau et OGLES2 " -"pour Android.\n" -"Les nuanceurs sont pris en charge par tout sauf OGLES1." +"pour Android." #: src/settings_translation_file.cpp msgid "" @@ -6735,7 +6724,7 @@ msgid "" msgstr "" "Pour réduire le décalage, le transfert des blocs est ralenti quand un joueur " "construit quelque chose.\n" -"Cela détermine la durée du ralentissement après placement ou destruction " +"Ceci détermine la durée du ralentissement après placement ou destruction " "d'un nœud." #: src/settings_translation_file.cpp @@ -6743,6 +6732,8 @@ msgid "" "Tolerance of movement cheat detector.\n" "Increase the value if players experience stuttery movement." msgstr "" +"Tolérance du détecteur de triche de mouvement.\n" +"Augmenter la valeur si les joueurs ont des mouvements saccadés." #: src/settings_translation_file.cpp msgid "Tooltip delay" @@ -6753,9 +6744,8 @@ msgid "Touchscreen" msgstr "Écran tactile" #: src/settings_translation_file.cpp -#, fuzzy msgid "Touchscreen controls" -msgstr "Sensibilité de l'écran tactile" +msgstr "Contrôles de l'écran tactile" #: src/settings_translation_file.cpp msgid "Touchscreen sensitivity" @@ -6770,9 +6760,8 @@ msgid "Tradeoffs for performance" msgstr "Compromis pour la performance" #: src/settings_translation_file.cpp -#, fuzzy msgid "Translucent foliage" -msgstr "Liquides translucides" +msgstr "Feuillage translucide" #: src/settings_translation_file.cpp msgid "Translucent liquids" @@ -6825,14 +6814,13 @@ msgstr "" "performance." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "URL to JSON file which provides information about the newest Luanti " "release.\n" "If this is empty the engine will never check for updates." msgstr "" "URL du fichier JSON qui fournit des informations sur la nouvelle version de " -"Minetest.\n" +"Luanti.\n" "Si ce champ est vide, le moteur ne vérifie pas les mises à jour." #: src/settings_translation_file.cpp @@ -6855,7 +6843,7 @@ msgstr "" "Le sous-échantillonnage ressemble à l'utilisation d'une résolution d'écran " "inférieure.\n" "Il ne s'applique qu'au rendu 3D, gardant l'interface graphique intacte.\n" -"Cela doit donner un bonus de performance conséquent, au détriment de la " +"Ceci doit donner un bonus de performance conséquent, au détriment de la " "qualité d'image.\n" "Les valeurs plus élevées réduisent la qualité du détail des images." @@ -6936,7 +6924,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Use smooth cloud shading." -msgstr "" +msgstr "Utiliser un ombrage doux pour les nuages." #: src/settings_translation_file.cpp msgid "" @@ -7145,12 +7133,16 @@ msgstr "Couleur du lien web" #: src/settings_translation_file.cpp msgid "When enabled, liquid reflections are simulated." msgstr "" +"Lorsque cette option est activée, les réflexions des liquides sont simulées." #: src/settings_translation_file.cpp msgid "" "When enabled, the GUI is optimized to be more usable on touchscreens.\n" "Whether this is enabled by default depends on your hardware form-factor." msgstr "" +"Lorsque cette option est activée, l'interface graphique est optimisée pour " +"les écrans tactiles.\n" +"L'activation par défaut dépend des caractéristiques matérielles." #: src/settings_translation_file.cpp msgid "" @@ -7229,7 +7221,7 @@ msgid "" "Whether to ask clients to reconnect after a (Lua) crash.\n" "Set this to true if your server is set up to restart automatically." msgstr "" -"S’il faut demander aux clients de se reconnecter après un crash (Lua).\n" +"S’il faut demander aux clients de se reconnecter après un plantage (Lua).\n" "Activer si le serveur est paramétré pour redémarrer automatiquement." #: src/settings_translation_file.cpp @@ -7268,13 +7260,12 @@ msgid "Window maximized" msgstr "Fenêtre maximisée" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Windows systems only: Start Luanti with the command line window in the " "background.\n" "Contains the same information as the file debug.txt (default name)." msgstr "" -"Systèmes Windows seulement : démarrer Minetest avec la fenêtre de ligne de " +"Systèmes Windows seulement : démarrer Luanti avec la fenêtre de ligne de " "commande en arrière-plan.\n" "Contient les mêmes informations que le fichier « debug.txt » (nom par " "défaut)." From 21c8c141aa8eb26a465923243123efa9b6332e2c Mon Sep 17 00:00:00 2001 From: chocomint Date: Sat, 9 Nov 2024 00:34:52 +0100 Subject: [PATCH 142/178] Added translation using Weblate (Spanish) --- android/app/src/main/res/values-es/strings.xml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 android/app/src/main/res/values-es/strings.xml diff --git a/android/app/src/main/res/values-es/strings.xml b/android/app/src/main/res/values-es/strings.xml new file mode 100644 index 000000000..a6b3daec9 --- /dev/null +++ b/android/app/src/main/res/values-es/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file From 9a7471c5c0094d8b4d02b75820f2eedccba34ef1 Mon Sep 17 00:00:00 2001 From: chocomint Date: Fri, 8 Nov 2024 23:48:23 +0000 Subject: [PATCH 143/178] Translated using Weblate (Spanish) Currently translated at 100.0% (1383 of 1383 strings) --- android/app/src/main/res/values-es/strings.xml | 11 ++++++++++- po/es/luanti.po | 15 +++++++-------- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/android/app/src/main/res/values-es/strings.xml b/android/app/src/main/res/values-es/strings.xml index a6b3daec9..c878f0304 100644 --- a/android/app/src/main/res/values-es/strings.xml +++ b/android/app/src/main/res/values-es/strings.xml @@ -1,2 +1,11 @@ - \ No newline at end of file + + No se encontró ningún navegador web + Cargando… + Notificaciones de Luanti + Menos de 1 minuto… + Hecho + Luanti + Cargando Luanti + Notificación General + \ No newline at end of file diff --git a/po/es/luanti.po b/po/es/luanti.po index 91b10e486..07fcbd4f0 100644 --- a/po/es/luanti.po +++ b/po/es/luanti.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Spanish (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-10-28 19:57+0100\n" -"PO-Revision-Date: 2024-11-02 23:00+0000\n" -"Last-Translator: gallegonovato \n" +"PO-Revision-Date: 2024-11-08 23:53+0000\n" +"Last-Translator: chocomint \n" "Language-Team: Spanish \n" "Language: es\n" @@ -3270,15 +3270,14 @@ msgid "" "Luanti still enforces its own internal minimum, and enabling\n" "strict_protocol_version_checking will effectively override this." msgstr "" -"Define los clientes más antiguos permitidos para conectarse.\n" +"Define los clientes más antiguos permitidos a conectarse.\n" "Los clientes más antiguos son compatibles en el sentido de que no se " "bloquearán al conectarse\n" "a nuevos servidores, pero pueden no soportar todas las nuevas " "características que esperas.\n" -"Esto permite un control más detallado que la verificación estricta de la " -"versión del protocolo.\n" -"Luanti aún aplica su propio mínimo interno, y habilitar la verificación " -"estricta de la versión del protocolo anulará efectivamente esto." +"Esto permite un control más detallado del strict_protocol_version_checking.\n" +"Luanti aún aplica su propio mínimo interno, y habilitar\n" +"strict_protocol_version_checking anulará efectivamente esto." #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." @@ -6641,7 +6640,7 @@ msgid "" "in-game view frustum around." msgstr "" "La sensibilidad de los ejes del joystick para mover el\n" -"en el juego." +"frustum de vista en el juego." #: src/settings_translation_file.cpp msgid "" From 998d1a2b8c7807e7a497b6b836fe57d1421a1055 Mon Sep 17 00:00:00 2001 From: gallegonovato Date: Sat, 9 Nov 2024 01:40:59 +0000 Subject: [PATCH 144/178] Translated using Weblate (Spanish) Currently translated at 100.0% (1383 of 1383 strings) --- po/es/luanti.po | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/po/es/luanti.po b/po/es/luanti.po index 07fcbd4f0..52fe9aaaf 100644 --- a/po/es/luanti.po +++ b/po/es/luanti.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Spanish (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-10-28 19:57+0100\n" -"PO-Revision-Date: 2024-11-08 23:53+0000\n" -"Last-Translator: chocomint \n" +"PO-Revision-Date: 2024-11-10 00:00+0000\n" +"Last-Translator: gallegonovato \n" "Language-Team: Spanish \n" "Language: es\n" @@ -6639,8 +6639,8 @@ msgid "" "The sensitivity of the joystick axes for moving the\n" "in-game view frustum around." msgstr "" -"La sensibilidad de los ejes del joystick para mover el\n" -"frustum de vista en el juego." +"La sensibilidad de los ejes del joystick para mover la\n" +"vista del juego." #: src/settings_translation_file.cpp msgid "" From 3b2abbea70a1a1a4beb36931c6d48761257f6295 Mon Sep 17 00:00:00 2001 From: chocomint Date: Sat, 9 Nov 2024 00:54:10 +0100 Subject: [PATCH 145/178] Added translation using Weblate (Spanish (American)) --- android/app/src/main/res/values-es-rUS/strings.xml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 android/app/src/main/res/values-es-rUS/strings.xml diff --git a/android/app/src/main/res/values-es-rUS/strings.xml b/android/app/src/main/res/values-es-rUS/strings.xml new file mode 100644 index 000000000..a6b3daec9 --- /dev/null +++ b/android/app/src/main/res/values-es-rUS/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file From fbab80fced1aa7d0c9b41a31d2e4deaef7469c17 Mon Sep 17 00:00:00 2001 From: chocomint Date: Fri, 8 Nov 2024 23:58:11 +0000 Subject: [PATCH 146/178] Translated using Weblate (Spanish (American)) Currently translated at 100.0% (8 of 8 strings) Translation: Minetest/Minetest Android Translate-URL: https://hosted.weblate.org/projects/minetest/minetest-android/es_US/ --- .../src/main/res/values-es-rUS/strings.xml | 11 +- po/es_US/luanti.po | 6465 +++++++++++++++++ 2 files changed, 6475 insertions(+), 1 deletion(-) create mode 100644 po/es_US/luanti.po diff --git a/android/app/src/main/res/values-es-rUS/strings.xml b/android/app/src/main/res/values-es-rUS/strings.xml index a6b3daec9..9be855811 100644 --- a/android/app/src/main/res/values-es-rUS/strings.xml +++ b/android/app/src/main/res/values-es-rUS/strings.xml @@ -1,2 +1,11 @@ - \ No newline at end of file + + Menos de 1 minuto… + Hecho + No se encontró ningún navegador web + Cargando… + Notificación General + Luanti + Notificaciones de Luanti + Cargando Luanti + \ No newline at end of file diff --git a/po/es_US/luanti.po b/po/es_US/luanti.po new file mode 100644 index 000000000..0d8500e7e --- /dev/null +++ b/po/es_US/luanti.po @@ -0,0 +1,6465 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the luanti package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: luanti\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-10-28 19:57+0100\n" +"PO-Revision-Date: 2024-11-10 17:11+0000\n" +"Last-Translator: chocomint \n" +"Language-Team: Spanish (American) \n" +"Language: es_US\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.8.2\n" + +#: builtin/client/chatcommands.lua +msgid "Issued command: " +msgstr "Comando emitido: " + +#: builtin/client/chatcommands.lua +msgid "Empty command." +msgstr "Comando vacío." + +#: builtin/client/chatcommands.lua +msgid "Invalid command: " +msgstr "Comando inválido: " + +#: builtin/client/chatcommands.lua +msgid "List online players" +msgstr "Lista de los jugadores conectados" + +#: builtin/client/chatcommands.lua +msgid "This command is disabled by server." +msgstr "Este comando esta deshabiitado por el servidor." + +#: builtin/client/chatcommands.lua +msgid "Online players: " +msgstr "Jugadores en línea: " + +#: builtin/client/chatcommands.lua +msgid "Exit to main menu" +msgstr "Salir al menu principal" + +#: builtin/client/chatcommands.lua +msgid "Clear the out chat queue" +msgstr "Limpiar la cola de chat" + +#: builtin/client/chatcommands.lua +msgid "The out chat queue is now empty." +msgstr "La cola de chat está ahora vacía." + +#: builtin/common/chatcommands.lua +msgid "Available commands: " +msgstr "Comandos disponibles: " + +#: builtin/common/chatcommands.lua +msgid "" +"Use '.help ' to get more information, or '.help all' to list everything." +msgstr "" +"Usa '.help ' para obtener más información, o '.help all' para enlistar " +"todo." + +#: builtin/common/chatcommands.lua +msgid "Available commands:" +msgstr "Comandos disponibles:" + +#: builtin/common/chatcommands.lua +msgid "Command not available: " +msgstr "Comando no disponible: " + +#: builtin/common/chatcommands.lua +msgid "[all | ] [-t]" +msgstr "[all | ] [-t]" + +#: builtin/common/chatcommands.lua +msgid "Get help for commands (-t: output in chat)" +msgstr "Obtén ayuda para comandos (-t: salida en el chat)" + +#: builtin/fstk/ui.lua +msgid "OK" +msgstr "OK" + +#: builtin/fstk/ui.lua +msgid "" +msgstr "" + +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "El servidor ha solicitado una reconexión:" + +#: builtin/fstk/ui.lua +msgid "Reconnect" +msgstr "Reconectar" + +#: builtin/fstk/ui.lua +msgid "Main menu" +msgstr "Menu principal" + +#: builtin/fstk/ui.lua +msgid "An error occurred in a Lua script:" +msgstr "Ocurrió un error en un script de Lua:" + +#: builtin/fstk/ui.lua +msgid "An error occurred:" +msgstr "Un error ha ocurrido:" + +#: builtin/mainmenu/common.lua +msgid "Server supports protocol versions between $1 and $2. " +msgstr "El servidor admite versiones de protocolo entre $1 y $2. " + +#: builtin/mainmenu/common.lua +msgid "Server enforces protocol version $1. " +msgstr "El servidor impone la versión del protocolo $1. " + +#: builtin/mainmenu/common.lua +msgid "We support protocol versions between version $1 and $2." +msgstr "" +"Apoyamos las versiones de protocolo entre la versión $1 y la versión $2." + +#: builtin/mainmenu/common.lua +msgid "We only support protocol version $1." +msgstr "Solo soportamos la versión de protocolo $1." + +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch. " +msgstr "Desajuste de versión del protocolo. " + +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download \"$1\"" +msgstr "Error al descargar \"$1\"" + +#: builtin/mainmenu/content/contentdb.lua +msgid "" +"Failed to extract \"$1\" (insufficient disk space, unsupported file type or " +"broken archive)" +msgstr "" +"Error al extraer \"$1\" (espacio en disco insuficiente, tipo de archivo no " +"soportado o archivo dañado)" + +#: builtin/mainmenu/content/contentdb.lua +msgid "Error installing \"$1\": $2" +msgstr "Error al instalar \"$1\": $2" + +#: builtin/mainmenu/content/contentdb.lua +msgid "Failed to download $1" +msgstr "Fallo al descargar $1" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "ContentDB is not available when Luanti was compiled without cURL" +msgstr "ContentDB no está disponible cuando Luanti fue compilado sin cURL" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "The package $1 was not found." +msgstr "El paquete $1 no se encuentra." + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_package.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "Back" +msgstr "Atrás" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_install.lua +#: builtin/mainmenu/content/dlg_package.lua builtin/mainmenu/serverlistmgr.lua +#: src/client/game.cpp +msgid "Loading..." +msgstr "Cargando..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/content/dlg_package.lua +msgid "No packages could be retrieved" +msgstr "No se pueden recuperar paquetes" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "All" +msgstr "Todo" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Games" +msgstr "Juegos" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Mods" +msgstr "Mods" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Texture Packs" +msgstr "Paquetes de texturas" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "" +"$1 downloading,\n" +"$2 queued" +msgstr "" +"$1 descargando,\n" +"$2 en cola" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "$1 downloading..." +msgstr "$1 descargando..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "No updates" +msgstr "Sin actualizaciones" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Update All [$1]" +msgstr "Actualizar Todo [$1]" + +#: builtin/mainmenu/content/dlg_contentdb.lua +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "No results" +msgstr "Sin resultados" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Downloading..." +msgstr "Descargando..." + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Queued" +msgstr "En cola" + +#: builtin/mainmenu/content/dlg_contentdb.lua +msgid "Featured" +msgstr "Destacado" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Already installed" +msgstr "Ya está instalado" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 by $2" +msgstr "$1 por $2" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Not found" +msgstr "No se encontró" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 and $2 dependencies will be installed." +msgstr "se instalarán $1 y $2 dependencias." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "$1 será instalado, y las dependencias de $2 serán saltadas." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "$1 required dependencies could not be found." +msgstr "Las dependencias requeridas de $1 no se pudieron encontrar." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Please check that the base game is correct." +msgstr "Por favor, compruebe que el juego base es correcto." + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install $1" +msgstr "Instalar $1" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Base Game:" +msgstr "Juego Base:" + +#: builtin/mainmenu/content/dlg_install.lua +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua +msgid "Dependencies:" +msgstr "Dependencias:" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install missing dependencies" +msgstr "Instalar las dependencias faltantes" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Install" +msgstr "Instalar" + +#: builtin/mainmenu/content/dlg_install.lua +#: builtin/mainmenu/content/dlg_overwrite.lua +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_delete_content.lua +#: builtin/mainmenu/dlg_delete_world.lua builtin/mainmenu/dlg_register.lua +#: builtin/mainmenu/dlg_rename_modpack.lua +#: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua +#: src/gui/guiKeyChangeMenu.cpp src/gui/guiOpenURL.cpp +#: src/gui/guiPasswordChange.cpp +msgid "Cancel" +msgstr "Cancelar" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "Error getting dependencies for package $1" +msgstr "Error en obtener las dependencias para el paquete $1" + +#: builtin/mainmenu/content/dlg_install.lua +msgid "You need to install a game before you can install a mod" +msgstr "Necesitas instalar un juego antes de instalar un mod" + +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" +msgstr "\"$1\" ya existe. ¿Te gustaría sobreescribirlo?" + +#: builtin/mainmenu/content/dlg_overwrite.lua +msgid "Overwrite" +msgstr "Sobreescribir" + +#: builtin/mainmenu/content/dlg_package.lua +msgid "by $1 — $2 downloads — +$3 / $4 / -$5" +msgstr "por$1 — $2 descargas — +$3 / $4 / -$5" + +#: builtin/mainmenu/content/dlg_package.lua +msgid "ContentDB page" +msgstr "Página de ContentDB" + +#: builtin/mainmenu/content/dlg_package.lua +msgid "Install [$1]" +msgstr "Instalar [$1]" + +#: builtin/mainmenu/content/dlg_package.lua builtin/mainmenu/tab_content.lua +msgid "Update" +msgstr "Actualizar" + +#: builtin/mainmenu/content/dlg_package.lua builtin/mainmenu/tab_content.lua +msgid "Uninstall" +msgstr "Desinstalar" + +#: builtin/mainmenu/content/dlg_package.lua +msgid "Description" +msgstr "Descripción" + +#: builtin/mainmenu/content/dlg_package.lua +msgid "Information" +msgstr "Información" + +#: builtin/mainmenu/content/dlg_package.lua +msgid "Donate" +msgstr "Donar" + +#: builtin/mainmenu/content/dlg_package.lua +msgid "Website" +msgstr "Sitio web" + +#: builtin/mainmenu/content/dlg_package.lua +msgid "Source" +msgstr "Fuente" + +#: builtin/mainmenu/content/dlg_package.lua +msgid "Issue Tracker" +msgstr "Rastreador de problemas" + +#: builtin/mainmenu/content/dlg_package.lua +msgid "Translate" +msgstr "Traducir" + +#: builtin/mainmenu/content/dlg_package.lua +msgid "Forum Topic" +msgstr "Tema del Foro" + +#: builtin/mainmenu/content/pkgmgr.lua +msgid "$1 (Enabled)" +msgstr "$1 (Habilitado)" + +#: builtin/mainmenu/content/pkgmgr.lua +msgid "Unable to install a $1 as a texture pack" +msgstr "No se puede instalar un paquete de texturas de $1" + +#: builtin/mainmenu/content/pkgmgr.lua +msgid "Failed to install $1 to $2" +msgstr "Falló al instalar $1 a $2" + +#: builtin/mainmenu/content/pkgmgr.lua +msgid "Unable to find a valid mod, modpack, or game" +msgstr "Incapaz de encontrar un mod válido, modpack o juego" + +#: builtin/mainmenu/content/pkgmgr.lua +msgid "Unable to install a $1 as a $2" +msgstr "Incapaz de instalar un $1 como un $2" + +#: builtin/mainmenu/content/pkgmgr.lua +msgid "Install: Unable to find suitable folder name for $1" +msgstr "Instalar: Incapaz de encontrar el nombre de carpeta adecuado para $1" + +#: builtin/mainmenu/content/pkgmgr.lua +msgid "$1 mods" +msgstr "$1 mods" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" +msgstr "Mundo:" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "No modpack description provided." +msgstr "Ninguna descripción del modpack proporcionada." + +#: builtin/mainmenu/dlg_config_world.lua +msgid "No game description provided." +msgstr "Ninguna descripción del juego proporcionada." + +#: builtin/mainmenu/dlg_config_world.lua +msgid "(Unsatisfied)" +msgstr "(Insatisfecho)" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "(Enabled, has error)" +msgstr "(Habilitado, tiene error)" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" +msgstr "Mod:" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "No (optional) dependencies" +msgstr "Sin dependencias (opcionales)" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "No hard dependencies" +msgstr "Sin dependencias duras" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua +msgid "Optional dependencies:" +msgstr "Dependencias opcionales:" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "No optional dependencies" +msgstr "Sin dependencias opcionales" + +#: builtin/mainmenu/dlg_config_world.lua +#: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua +#: src/gui/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "Guardar" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Find More Mods" +msgstr "Encontrar Más Mods" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Disable modpack" +msgstr "Desactivar modpack" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable modpack" +msgstr "Activar modpack" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "habilitado" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Disable all" +msgstr "Desactivar todo" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable all" +msgstr "Activar todo" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"characters [a-z0-9_] are allowed." +msgstr "" +"No se pudo habilitar el mod \"$1\" porque contiene caracteres no permitidos. " +"Sólo se permiten caracteres [a-z0-9_]." + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Caverns" +msgstr "Cavernas" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Very large caverns deep in the underground" +msgstr "Cavernas muy grandes en lo profundo del subsuelo" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Rivers" +msgstr "Ríos" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Sea level rivers" +msgstr "Nivel del mar de los ríos" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mountains" +msgstr "Montañas" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Floatlands (experimental)" +msgstr "Tierras Flotantes (experimental)" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Floating landmasses in the sky" +msgstr "Masas de tierra flotantes en el cielo" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Altitude chill" +msgstr "Altitud tranquila" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Reduces heat with altitude" +msgstr "Reduce el calor con la altitud" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Altitude dry" +msgstr "Altitud seca" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Reduces humidity with altitude" +msgstr "Reduce la humedad con la altitud" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Humid rivers" +msgstr "Ríos húmedos" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Increases humidity around rivers" +msgstr "Incrementa la humedad alrededor de los ríos" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Vary river depth" +msgstr "Varía la profundidad del río" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Low humidity and high heat causes shallow or dry rivers" +msgstr "La baja humedad y el alto calor provocan ríos poco profundos o secos" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Hills" +msgstr "Colinas" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Lakes" +msgstr "Lagos" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Additional terrain" +msgstr "Terreno Adicional" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Generate non-fractal terrain: Oceans and underground" +msgstr "Generar terreno no fractal: Océanos y subsuelo" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Trees and jungle grass" +msgstr "Árboles y hierba de la selva" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Flat terrain" +msgstr "Terreno plano" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mud flow" +msgstr "Flujo de lodo" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Terrain surface erosion" +msgstr "Erosión de la superficie del terreno" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Desert temples" +msgstr "Templos del desierto" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Different dungeon variant generated in desert biomes (only if dungeons " +"enabled)" +msgstr "" +"Variante de mazmorra diferente generada en biomas desérticos (solo si las " +"mazmorras están habilitadas)" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert, Jungle, Tundra, Taiga" +msgstr "Templado, Desierto, Selva, Tundra, Taiga" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert, Jungle" +msgstr "Templado, Desierto, Selva" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert" +msgstr "Templado, Desierto" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Caves" +msgstr "Cuevas" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Dungeons" +msgstr "Mazmorras" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Decorations" +msgstr "Decoraciones" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Structures appearing on the terrain (no effect on trees and jungle grass " +"created by v6)" +msgstr "" +"Estructuras que aparecen en el terreno (sin efecto en los árboles y la " +"hierba de la jungla creada por v6)" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Structures appearing on the terrain, typically trees and plants" +msgstr "Estructuras que aparecen en el terreno, típicamente árboles y plantas" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Network of tunnels and caves" +msgstr "Red de túneles y cuevas" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Biomes" +msgstr "Biomas" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Biome blending" +msgstr "Mezcla de biomas" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Smooth transition between biomes" +msgstr "Transición suave entre biomas" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen flags" +msgstr "Banderas de Mapgen" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mapgen-specific flags" +msgstr "Banderas específicas de Mapgen" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "Nombre del mundo" + +#: builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua +msgid "Seed" +msgstr "Semilla" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen" +msgstr "Mapgen" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Development Test is meant for developers." +msgstr "La prueba de desarrollo está destinada a desarrolladores." + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Install another game" +msgstr "instalar otro juego" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "Crear" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "No game selected" +msgstr "Ningún juego seleccionado" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "A world named \"$1\" already exists" +msgstr "Ya existe un mundo llamado \"$1\"" + +#: builtin/mainmenu/dlg_delete_content.lua +msgid "Are you sure you want to delete \"$1\"?" +msgstr "¿Estás seguro de que quieres eliminar \"$ 1\"?" + +#: builtin/mainmenu/dlg_delete_content.lua +#: builtin/mainmenu/dlg_delete_world.lua builtin/mainmenu/tab_local.lua +msgid "Delete" +msgstr "Borrar" + +#: builtin/mainmenu/dlg_delete_content.lua +msgid "pkgmgr: failed to delete \"$1\"" +msgstr "pkgmgr: no se pudo eliminar \"$1\"" + +#: builtin/mainmenu/dlg_delete_content.lua +msgid "pkgmgr: invalid path \"$1\"" +msgstr "pkgmgr: ruta no válida \"$1\"" + +#: builtin/mainmenu/dlg_delete_world.lua +msgid "Delete World \"$1\"?" +msgstr "¿Eliminar el mundo \"$1\"?" + +#: builtin/mainmenu/dlg_register.lua +msgid "Joining $1" +msgstr "Unirse $1" + +#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua +#: builtin/mainmenu/tab_online.lua +msgid "Name" +msgstr "Nombre" + +#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_local.lua +#: builtin/mainmenu/tab_online.lua +msgid "Password" +msgstr "Contraseña" + +#: builtin/mainmenu/dlg_register.lua src/gui/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "Confirmar Contraseña" + +#: builtin/mainmenu/dlg_register.lua builtin/mainmenu/tab_online.lua +msgid "Register" +msgstr "Registrarse" + +#: builtin/mainmenu/dlg_register.lua +msgid "Missing name" +msgstr "Nombre faltante" + +#: builtin/mainmenu/dlg_register.lua +msgid "Passwords do not match" +msgstr "Las contraseñas no coinciden" + +#: builtin/mainmenu/dlg_reinstall_mtg.lua +msgid "Minetest Game is no longer installed by default" +msgstr "Minetest Game ya no está instalado por defecto" + +#: builtin/mainmenu/dlg_reinstall_mtg.lua +msgid "" +"For a long time, Luanti shipped with a default game called \"Minetest " +"Game\". Since version 5.8.0, Luanti ships without a default game." +msgstr "" +"Durante mucho tiempo, Luanti vino con un juego predeterminado llamado " +"\"Minetest Game\". Desde la versión 5.8.0, Luanti se envía sin un juego " +"predeterminado." + +#: builtin/mainmenu/dlg_reinstall_mtg.lua +msgid "" +"If you want to continue playing in your Minetest Game worlds, you need to " +"reinstall Minetest Game." +msgstr "" +"Si quieres seguir jugando en los mundos de Minetest Game, debes reinstalar " +"Minetest Game." + +#: builtin/mainmenu/dlg_reinstall_mtg.lua +msgid "Dismiss" +msgstr "Permitir" + +#: builtin/mainmenu/dlg_reinstall_mtg.lua +msgid "Reinstall Minetest Game" +msgstr "Reinstalar Minetest Game" + +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Accept" +msgstr "Aceptar" + +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "" +"This modpack has an explicit name given in its modpack.conf which will " +"override any renaming here." +msgstr "" +"Este modpack tiene un nombre explícito en su modpack.conf que anulará " +"cualquier cambio de nombre aquí." + +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" +msgstr "Renombrar Modpack:" + +#: builtin/mainmenu/dlg_version_info.lua +msgid "A new $1 version is available" +msgstr "Una nueva versión $1 está disponible" + +#: builtin/mainmenu/dlg_version_info.lua +msgid "" +"Installed version: $1\n" +"New version: $2\n" +"Visit $3 to find out how to get the newest version and stay up to date with " +"features and bugfixes." +msgstr "" +"Versión instalada: $1\n" +"Nueva versión: $2\n" +"Visita $3 para descubrir cómo obtener la versión más reciente y mantenerse " +"actualizado con funciones y correcciones de errores." + +#: builtin/mainmenu/dlg_version_info.lua +msgid "Visit website" +msgstr "Visitar página web" + +#: builtin/mainmenu/dlg_version_info.lua +msgid "Later" +msgstr "Después" + +#: builtin/mainmenu/dlg_version_info.lua +msgid "Never" +msgstr "Nunca" + +#: builtin/mainmenu/init.lua +msgid "Settings" +msgstr "Configuraciones" + +#: builtin/mainmenu/serverlistmgr.lua +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" +"Intente volver a habilitar la lista de servidores públicos y verifique su " +"conexión a Internet." + +#: builtin/mainmenu/serverlistmgr.lua +msgid "Public server list is disabled" +msgstr "La lista de servidores públicos está deshabilitada" + +#: builtin/mainmenu/settings/components.lua +msgid "Set" +msgstr "Establecer" + +#: builtin/mainmenu/settings/components.lua +msgid "Browse" +msgstr "Navegar" + +#: builtin/mainmenu/settings/components.lua +msgid "Select directory" +msgstr "Seleccionar directorio" + +#: builtin/mainmenu/settings/components.lua +msgid "Select file" +msgstr "Seleccionar archivo" + +#: builtin/mainmenu/settings/components.lua +msgid "Edit" +msgstr "Editar" + +#: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua +#: src/settings_translation_file.cpp +msgid "Offset" +msgstr "Compensar" + +#: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua +#: src/settings_translation_file.cpp +msgid "Scale" +msgstr "Escalar" + +#: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua +msgid "X spread" +msgstr "Propagación en X" + +#: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua +msgid "Y spread" +msgstr "Propagación en Y" + +#: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua +msgid "2D Noise" +msgstr "Ruido 2D" + +#: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua +msgid "Z spread" +msgstr "Propagación en Z" + +#: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua +msgid "Octaves" +msgstr "Octavos" + +#: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua +msgid "Persistence" +msgstr "Persistencia" + +#: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua +msgid "Lacunarity" +msgstr "Lacunaridad" + +#. ~ "defaults" is a noise parameter flag. +#. It describes the default processing options +#. for noise settings in the settings menu. +#: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua +msgid "defaults" +msgstr "Por predeterminado" + +#. ~ "eased" is a noise parameter flag. +#. It is used to make the map smoother and +#. can be enabled in noise settings in +#. the settings menu. +#: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua +msgid "eased" +msgstr "aliviado" + +#. ~ "absvalue" is a noise parameter flag. +#. It is short for "absolute value". +#. It can be enabled in noise settings in +#. the settings menu. +#: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua +msgid "absvalue" +msgstr "absvalor" + +#: builtin/mainmenu/settings/dlg_change_mapgen_flags.lua +msgid "(No description of setting given)" +msgstr "(No se proporciona descripción del entorno)" + +#: builtin/mainmenu/settings/dlg_settings.lua src/settings_translation_file.cpp +msgid "General" +msgstr "General" + +#: builtin/mainmenu/settings/dlg_settings.lua src/client/game.cpp +#: src/settings_translation_file.cpp +msgid "Controls" +msgstr "Controles" + +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "Accessibility" +msgstr "Accesibilidad" + +#: builtin/mainmenu/settings/dlg_settings.lua src/gui/guiKeyChangeMenu.cpp +#: src/gui/touchcontrols.cpp src/settings_translation_file.cpp +msgid "Chat" +msgstr "Chat" + +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "Movement" +msgstr "Movimiento" + +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "(The game will need to enable automatic exposure as well)" +msgstr "(El juego también deberá habilitar la exposición automática)" + +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "(The game will need to enable bloom as well)" +msgstr "(El juego también deberá habilitar el bloom)" + +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "(The game will need to enable volumetric lighting as well)" +msgstr "(El juego también deberá habilitar la iluminación volumétrica)" + +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "(Use system language)" +msgstr "(Utilice el idioma del sistema)" + +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "Auto" +msgstr "Auto" + +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "Enabled" +msgstr "Habilitado" + +#: builtin/mainmenu/settings/dlg_settings.lua +#: builtin/mainmenu/settings/shadows_component.lua +msgid "Disabled" +msgstr "Deshabilitado" + +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "Show technical names" +msgstr "Mostrar nombres tecnicos" + +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "Show advanced settings" +msgstr "Mostrar configuraciones avanzadas" + +#: builtin/mainmenu/settings/dlg_settings.lua builtin/mainmenu/tab_online.lua +msgid "Search" +msgstr "Buscar" + +#: builtin/mainmenu/settings/dlg_settings.lua builtin/mainmenu/tab_online.lua +msgid "Clear" +msgstr "Claro" + +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "Reset setting to default ($1)" +msgstr "Restablecer la configuración predeterminada ($1)" + +#: builtin/mainmenu/settings/dlg_settings.lua +msgid "Reset setting to default" +msgstr "Restablecer la configuración a los valores predeterminados" + +#: builtin/mainmenu/settings/settingtypes.lua +msgid "Content: Games" +msgstr "Contenido: Juegos" + +#: builtin/mainmenu/settings/settingtypes.lua +msgid "Content: Mods" +msgstr "Contenido: Mods" + +#: builtin/mainmenu/settings/settingtypes.lua +msgid "Client Mods" +msgstr "Mods del Cliente" + +#: builtin/mainmenu/settings/shader_warning_component.lua +msgid "Shaders are disabled." +msgstr "Los Shaders estan desactivados." + +#: builtin/mainmenu/settings/shader_warning_component.lua +msgid "This is not a recommended configuration." +msgstr "Esta no es una configuración recomendada." + +#: builtin/mainmenu/settings/shader_warning_component.lua +msgid "Enable" +msgstr "Habilitar" + +#: builtin/mainmenu/settings/shadows_component.lua +msgid "Very Low" +msgstr "Muy Bajo" + +#: builtin/mainmenu/settings/shadows_component.lua +msgid "Low" +msgstr "Bajo" + +#: builtin/mainmenu/settings/shadows_component.lua +msgid "Medium" +msgstr "Medio" + +#: builtin/mainmenu/settings/shadows_component.lua +msgid "High" +msgstr "Alto" + +#: builtin/mainmenu/settings/shadows_component.lua +msgid "Very High" +msgstr "Muy Alto" + +#: builtin/mainmenu/settings/shadows_component.lua +msgid "Custom" +msgstr "Personalizado" + +#: builtin/mainmenu/settings/shadows_component.lua +#: src/settings_translation_file.cpp +msgid "Dynamic shadows" +msgstr "Sombras Dinámicas" + +#: builtin/mainmenu/settings/shadows_component.lua +msgid "(The game will need to enable shadows as well)" +msgstr "(El juego también deberá habilitar las sombras)" + +#: builtin/mainmenu/tab_about.lua +msgid "About" +msgstr "Acerca de" + +#: builtin/mainmenu/tab_about.lua +msgid "Core Developers" +msgstr "Desarrolladores principales" + +#: builtin/mainmenu/tab_about.lua +msgid "Core Team" +msgstr "Equipo principal" + +#: builtin/mainmenu/tab_about.lua +msgid "Active Contributors" +msgstr "Colaboradores activos" + +#: builtin/mainmenu/tab_about.lua +msgid "Previous Core Developers" +msgstr "Desarrolladores principales anteriores" + +#: builtin/mainmenu/tab_about.lua +msgid "Previous Contributors" +msgstr "Colaboradores anteriores" + +#: builtin/mainmenu/tab_about.lua +msgid "Active renderer:" +msgstr "Renderizado activo:" + +#: builtin/mainmenu/tab_about.lua +msgid "Irrlicht device:" +msgstr "Dispositivo Irrlicht:" + +#: builtin/mainmenu/tab_about.lua +msgid "Share debug log" +msgstr "Compartir registro de depuración" + +#: builtin/mainmenu/tab_about.lua +msgid "" +"Opens the directory that contains user-provided worlds, games, mods,\n" +"and texture packs in a file manager / explorer." +msgstr "" +"Abre el directorio que contiene mundos, juegos, mods, proporcionados por el " +"usuario.\n" +"y paquetes de texturas en un administrador/explorador de archivos." + +#: builtin/mainmenu/tab_about.lua +msgid "Open User Data Directory" +msgstr "Abrir directorio de datos de usuario" + +#: builtin/mainmenu/tab_content.lua +msgid "Browse online content" +msgstr "Explorar contenido en línea" + +#: builtin/mainmenu/tab_content.lua +msgid "Browse online content [$1]" +msgstr "Explorar contenido en linea [$1]" + +#: builtin/mainmenu/tab_content.lua +msgid "Installed Packages:" +msgstr "Paquetes Instalados:" + +#: builtin/mainmenu/tab_content.lua +msgid "Update available?" +msgstr "¿Actualización disponible?" + +#: builtin/mainmenu/tab_content.lua +msgid "No package description available" +msgstr "No hay descripción del paquete disponible" + +#: builtin/mainmenu/tab_content.lua +msgid "Rename" +msgstr "Renombrar" + +#: builtin/mainmenu/tab_content.lua +msgid "No dependencies." +msgstr "Sin dependencias." + +#: builtin/mainmenu/tab_content.lua +msgid "Disable Texture Pack" +msgstr "Deshabilitar Paquete de Textura" + +#: builtin/mainmenu/tab_content.lua +msgid "Use Texture Pack" +msgstr "Usar Paquete de Textura" + +#: builtin/mainmenu/tab_content.lua +msgid "Content" +msgstr "Contenido" + +#: builtin/mainmenu/tab_content.lua +msgid "Content [$1]" +msgstr "Contenido [$1]" + +#: builtin/mainmenu/tab_local.lua +msgid "Install games from ContentDB" +msgstr "Instalar juegos desde ContentDB" + +#: builtin/mainmenu/tab_local.lua +msgid "" +"Luanti is a game-creation platform that allows you to play many different " +"games." +msgstr "" +"Luanti es una plataforma de creación de juegos que te permite jugar muchos " +"diferentes juegos." + +#: builtin/mainmenu/tab_local.lua +msgid "Luanti doesn't come with a game by default." +msgstr "Luanti no viene con un juego por defecto." + +#: builtin/mainmenu/tab_local.lua +msgid "You need to install a game before you can create a world." +msgstr "Necesitas instalar un juego antes de poder crear un mundo." + +#: builtin/mainmenu/tab_local.lua +msgid "Install a game" +msgstr "Instalar un juego" + +#: builtin/mainmenu/tab_local.lua +msgid "Creative Mode" +msgstr "Modo Creativo" + +#: builtin/mainmenu/tab_local.lua +msgid "Enable Damage" +msgstr "Habilitar Daño" + +#: builtin/mainmenu/tab_local.lua +msgid "Host Server" +msgstr "Hostear Servidor" + +#: builtin/mainmenu/tab_local.lua +msgid "Select Mods" +msgstr "Seleccionar Mods" + +#: builtin/mainmenu/tab_local.lua +msgid "New" +msgstr "Nuevo" + +#: builtin/mainmenu/tab_local.lua +msgid "Select World:" +msgstr "Seleccionar Mundo:" + +#: builtin/mainmenu/tab_local.lua +msgid "Host Game" +msgstr "Hostear Juego" + +#: builtin/mainmenu/tab_local.lua +msgid "Announce Server" +msgstr "Anunciar Servidor" + +#: builtin/mainmenu/tab_local.lua +msgid "Bind Address" +msgstr "Dirección de Enlace" + +#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua +msgid "Port" +msgstr "Puerto" + +#: builtin/mainmenu/tab_local.lua +msgid "Server Port" +msgstr "Puerto del Servidor" + +#: builtin/mainmenu/tab_local.lua +msgid "Play Game" +msgstr "Jugar" + +#: builtin/mainmenu/tab_local.lua +msgid "No world created or selected!" +msgstr "¡Ningún mundo creado o seleccionado!" + +#: builtin/mainmenu/tab_local.lua +msgid "Start Game" +msgstr "Iniciar Juego" + +#: builtin/mainmenu/tab_online.lua +msgid "Refresh" +msgstr "Refrescar" + +#: builtin/mainmenu/tab_online.lua +msgid "Address" +msgstr "Dirección" + +#: builtin/mainmenu/tab_online.lua +msgid "Server Description" +msgstr "Descripción del Servidor" + +#: builtin/mainmenu/tab_online.lua +msgid "Login" +msgstr "Acceder" + +#: builtin/mainmenu/tab_online.lua +msgid "Remove favorite" +msgstr "Remover favorito" + +#: builtin/mainmenu/tab_online.lua +msgid "Ping" +msgstr "Ping" + +#: builtin/mainmenu/tab_online.lua +msgid "Creative mode" +msgstr "Modo Creativo" + +#. ~ PvP = Player versus Player +#: builtin/mainmenu/tab_online.lua +msgid "Damage / PvP" +msgstr "Daño / PvP" + +#: builtin/mainmenu/tab_online.lua +msgid "Favorites" +msgstr "Favoritos" + +#: builtin/mainmenu/tab_online.lua +msgid "Public Servers" +msgstr "Servidores Públicos" + +#: builtin/mainmenu/tab_online.lua +msgid "Incompatible Servers" +msgstr "Servidores Incompatibles" + +#: builtin/mainmenu/tab_online.lua +msgid "Join Game" +msgstr "Unirse al Juego" + +#: src/client/client.cpp src/client/game.cpp +msgid "Connection timed out." +msgstr "Se agotó el tiempo de conexión." + +#: src/client/client.cpp +msgid "Connection aborted (protocol error?)." +msgstr "Conexión cancelada (¿error de protocolo?)." + +#: src/client/client.cpp +msgid "Loading textures..." +msgstr "Cargando Texturas…" + +#: src/client/client.cpp +msgid "Rebuilding shaders..." +msgstr "Reconstruyendo shaders…" + +#: src/client/client.cpp +msgid "Initializing nodes..." +msgstr "Inicializando nodos…" + +#: src/client/client.cpp +msgid "Initializing nodes" +msgstr "Inicializando nodos" + +#: src/client/client.cpp +msgid "Done!" +msgstr "¡Hecho!" + +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "Menu Principal" + +#: src/client/clientlauncher.cpp +msgid "Provided password file failed to open: " +msgstr "El archivo de contraseña proporcionado no se pudo abrir: " + +#: src/client/clientlauncher.cpp +msgid "Please choose a name!" +msgstr "¡Por favor elige un nombre!" + +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "Nombre de jugador muy largo." + +#: src/client/clientlauncher.cpp +msgid "No world selected and no address provided. Nothing to do." +msgstr "" +"No se seleccionó ningún mundo ni se proporcionó ninguna dirección. Nada que " +"hacer." + +#: src/client/clientlauncher.cpp +msgid "Provided world path doesn't exist: " +msgstr "La ruta de mundo proporcionado no existe: " + +#: src/client/clientlauncher.cpp +msgid "Could not find or load game: " +msgstr "No se pudo encontrar ni cargar el juego: " + +#: src/client/clientmedia.cpp src/client/game.cpp +msgid "Media..." +msgstr "Media…" + +#: src/client/game.cpp +msgid "Shutting down..." +msgstr "Cerrando..." + +#: src/client/game.cpp +msgid "Creating server..." +msgstr "Creando servidor..." + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "No se puede escuchar en %s porque IPv6 está deshabilitado" + +#: src/client/game.cpp +msgid "Creating client..." +msgstr "Creando cliente..." + +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "La conexión falló por motivo desconocido" + +#: src/client/game.cpp +msgid "Singleplayer" +msgstr "Un Jugador" + +#: src/client/game.cpp +msgid "Multiplayer" +msgstr "Multijugador" + +#: src/client/game.cpp +msgid "Resolving address..." +msgstr "Resolviendo dirección..." + +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "No se pudo resolver la dirección: %s" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "No se puede conectar a %s porque IPv6 está deshabilitado" + +#: src/client/game.cpp +#, c-format +msgid "Error creating client: %s" +msgstr "Error al crear cliente: %s" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "Acceso denegado. Razón: %s" + +#: src/client/game.cpp +msgid "Connecting to server..." +msgstr "Conectando al servidor..." + +#: src/client/game.cpp +msgid "Client disconnected" +msgstr "Cliente desconectado" + +#: src/client/game.cpp +msgid "Item definitions..." +msgstr "Definiciones de Objetos..." + +#: src/client/game.cpp +msgid "Node definitions..." +msgstr "Definiciones de nodos…" + +#: src/client/game.cpp +msgid "KiB/s" +msgstr "KiB/s" + +#: src/client/game.cpp +msgid "MiB/s" +msgstr "MiB/s" + +#: src/client/game.cpp +msgid "Client side scripting is disabled" +msgstr "Las secuencias de comandos del lado del cliente están deshabilitadas" + +#: src/client/game.cpp +msgid "Sound muted" +msgstr "Sonido muteado" + +#: src/client/game.cpp +msgid "Sound unmuted" +msgstr "Sonido desmuteado" + +#: src/client/game.cpp +msgid "Sound system is disabled" +msgstr "El sonido del sistema está deshabilitado" + +#: src/client/game.cpp +#, c-format +msgid "Volume changed to %d%%" +msgstr "Volumen cambiado a %d%%" + +#: src/client/game.cpp +msgid "Sound system is not supported on this build" +msgstr "El sistema de sonido no es compatible con esta compilación" + +#: src/client/game.cpp +msgid "Fly mode enabled" +msgstr "Modo vuelo habilitado" + +#: src/client/game.cpp +msgid "Fly mode enabled (note: no 'fly' privilege)" +msgstr "Modo de vuelo habilitado (nota: sin privilegio de \"volar\")" + +#: src/client/game.cpp +msgid "Fly mode disabled" +msgstr "Modo vuelo deshabilitado" + +#: src/client/game.cpp +msgid "Pitch move mode enabled" +msgstr "Modo inclinado habilitado" + +#: src/client/game.cpp +msgid "Pitch move mode disabled" +msgstr "Modo inclinado deshabilitado" + +#: src/client/game.cpp +msgid "Fast mode enabled" +msgstr "Modo rápido habilitado" + +#: src/client/game.cpp +msgid "Fast mode enabled (note: no 'fast' privilege)" +msgstr "Modo rápido habilitado (nota: sin privilegio \"fast\")" + +#: src/client/game.cpp +msgid "Fast mode disabled" +msgstr "Modo rápido deshabilitado" + +#: src/client/game.cpp +msgid "Noclip mode enabled" +msgstr "Modo Noclip habilitado" + +#: src/client/game.cpp +msgid "Noclip mode enabled (note: no 'noclip' privilege)" +msgstr "Modo Noclip habilitado (nota: sin privilegio 'noclip')" + +#: src/client/game.cpp +msgid "Noclip mode disabled" +msgstr "Modo Noclip deshabilitado" + +#: src/client/game.cpp +msgid "Cinematic mode enabled" +msgstr "Modo cinemático habilitado" + +#: src/client/game.cpp +msgid "Cinematic mode disabled" +msgstr "Modo cinemática deshabilitado" + +#: src/client/game.cpp +msgid "Can't show block bounds (disabled by game or mod)" +msgstr "" +"No se pueden mostrar los límites de los bloques (deshabilitado por el juego " +"o mod)" + +#: src/client/game.cpp +msgid "Block bounds hidden" +msgstr "Límites de bloque ocultos" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "Se muestran los límites del bloque para el bloque actual" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "Se muestran los límites de los bloques cercanos" + +#: src/client/game.cpp +msgid "Automatic forward enabled" +msgstr "Avanzado automático habilitado" + +#: src/client/game.cpp +msgid "Automatic forward disabled" +msgstr "Avanzado automático deshabilitado" + +#: src/client/game.cpp +msgid "Minimap currently disabled by game or mod" +msgstr "Minimapa actualmente deshabilitado por juego o mod" + +#: src/client/game.cpp +msgid "Fog enabled by game or mod" +msgstr "Niebla habilitada por juego o mod" + +#: src/client/game.cpp +msgid "Fog enabled" +msgstr "Niebla habilitada" + +#: src/client/game.cpp +msgid "Fog disabled" +msgstr "Niebla deshabilitado" + +#: src/client/game.cpp +msgid "Debug info shown" +msgstr "Información de depuración mostrado" + +#: src/client/game.cpp +msgid "Profiler graph shown" +msgstr "Gráfico del perfilador mostrado" + +#: src/client/game.cpp +msgid "Wireframe shown" +msgstr "Estructura alámbrica mostrado" + +#: src/client/game.cpp +msgid "Debug info, profiler graph, and wireframe hidden" +msgstr "" +"Información de depuración, gráfico de perfilado y estructura alámbrica oculto" + +#: src/client/game.cpp +msgid "Debug info and profiler graph hidden" +msgstr "Información de depuración y gráfico del perfilador ocultos" + +#: src/client/game.cpp +msgid "Camera update disabled" +msgstr "Actualización de cámara deshabilitado" + +#: src/client/game.cpp +msgid "Camera update enabled" +msgstr "Actualización de cámara habilitada" + +#: src/client/game.cpp +#, c-format +msgid "" +"Viewing range changed to %d (the maximum), but limited to %d by game or mod" +msgstr "" +"El rango de visión cambió a %d (el máximo), pero está limitado a %d por " +"juego o mod" + +#: src/client/game.cpp +#, c-format +msgid "Viewing range changed to %d (the maximum)" +msgstr "El rango de visión cambió a %d (el máximo)" + +#: src/client/game.cpp +#, c-format +msgid "Viewing range changed to %d, but limited to %d by game or mod" +msgstr "El rango de visión cambió a %d, pero está limitado a %d por juego o mod" + +#: src/client/game.cpp +#, c-format +msgid "Viewing range changed to %d" +msgstr "El rango de visión cambió a %d" + +#: src/client/game.cpp +#, c-format +msgid "Viewing changed to %d (the minimum), but limited to %d by game or mod" +msgstr "" +"La visualización cambió a %d (el mínimo), pero está limitada a %d por juego " +"o mod" + +#: src/client/game.cpp +#, c-format +msgid "Viewing changed to %d (the minimum)" +msgstr "La visualización cambió a %d (el mínimo)" + +#: src/client/game.cpp +msgid "Unlimited viewing range enabled, but forbidden by game or mod" +msgstr "" +"Rango de visualización ilimitado habilitado, pero prohibido por el juego o " +"mod" + +#: src/client/game.cpp +msgid "Unlimited viewing range enabled" +msgstr "Rango de visualización ilimitado habilitado" + +#: src/client/game.cpp +msgid "Unlimited viewing range disabled" +msgstr "Rango de visualización ilimitado deshabilitado" + +#: src/client/game.cpp +msgid "Zoom currently disabled by game or mod" +msgstr "Zoom actualmente deshabilitado por juego o mod" + +#: src/client/game.cpp +msgid "You died" +msgstr "Has muerto" + +#: src/client/game.cpp +msgid "Respawn" +msgstr "Reaparecer" + +#: src/client/game.cpp +msgid "" +"Controls:\n" +"No menu open:\n" +"- slide finger: look around\n" +"- tap: place/punch/use (default)\n" +"- long tap: dig/use (default)\n" +"Menu/inventory open:\n" +"- double tap (outside):\n" +" --> close\n" +"- touch stack, touch slot:\n" +" --> move stack\n" +"- touch&drag, tap 2nd finger\n" +" --> place single item to slot\n" +msgstr "" +"Controles:\n" +"No hay menú abierto:\n" +"- deslizar el dedo: mirar a su alrededor\n" +"- toque: colocar/perforar/usar (predeterminado)\n" +"- toque largo: excavar/usar (predeterminado)\n" +"Menú/inventario abierto:\n" +"- doble toque (afuera):\n" +" --> cerrar\n" +"- pila táctil, ranura táctil:\n" +" --> mover pila\n" +"- tocar y arrastrar, tocar el segundo dedo\n" +" -> colocar un solo elemento en un slot\n" + +#: src/client/game.cpp +msgid "Continue" +msgstr "" + +#: src/client/game.cpp +msgid "Change Password" +msgstr "" + +#: src/client/game.cpp +msgid "Game paused" +msgstr "" + +#: src/client/game.cpp +msgid "Sound Volume" +msgstr "" + +#: src/client/game.cpp +msgid "Exit to Menu" +msgstr "" + +#: src/client/game.cpp +msgid "Exit to OS" +msgstr "" + +#: src/client/game.cpp +msgid "Game info:" +msgstr "" + +#: src/client/game.cpp +msgid "- Mode: " +msgstr "" + +#: src/client/game.cpp +msgid "Hosting server" +msgstr "" + +#: src/client/game.cpp +msgid "Remote server" +msgstr "" + +#: src/client/game.cpp +msgid "On" +msgstr "" + +#: src/client/game.cpp +msgid "Off" +msgstr "" + +#. ~ PvP = Player versus Player +#: src/client/game.cpp +msgid "- PvP: " +msgstr "" + +#: src/client/game.cpp +msgid "- Public: " +msgstr "" + +#: src/client/game.cpp +msgid "- Server Name: " +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +msgid "A serialization error occurred:" +msgstr "" + +#: src/client/game.cpp src/client/shader.cpp src/server.cpp +msgid "" +"\n" +"Check debug.txt for details." +msgstr "" + +#: src/client/game.cpp +msgid "Connection error (timed out?)" +msgstr "" + +#: src/client/gameui.cpp +msgid "Chat shown" +msgstr "" + +#: src/client/gameui.cpp +msgid "Chat hidden" +msgstr "" + +#: src/client/gameui.cpp +msgid "Chat currently disabled by game or mod" +msgstr "" + +#: src/client/gameui.cpp +msgid "HUD shown" +msgstr "" + +#: src/client/gameui.cpp +msgid "HUD hidden" +msgstr "" + +#: src/client/gameui.cpp +#, c-format +msgid "Profiler shown (page %d of %d)" +msgstr "" + +#: src/client/gameui.cpp +msgid "Profiler hidden" +msgstr "" + +#: src/client/keycode.cpp +msgid "Left Button" +msgstr "" + +#: src/client/keycode.cpp +msgid "Right Button" +msgstr "" + +#. ~ Usually paired with the Pause key +#: src/client/keycode.cpp +msgid "Break Key" +msgstr "" + +#: src/client/keycode.cpp +msgid "Middle Button" +msgstr "" + +#: src/client/keycode.cpp +msgid "X Button 1" +msgstr "" + +#: src/client/keycode.cpp +msgid "X Button 2" +msgstr "" + +#: src/client/keycode.cpp +msgid "Backspace" +msgstr "" + +#: src/client/keycode.cpp +msgid "Tab" +msgstr "" + +#: src/client/keycode.cpp +msgid "Clear Key" +msgstr "" + +#: src/client/keycode.cpp +msgid "Return Key" +msgstr "" + +#: src/client/keycode.cpp +msgid "Shift Key" +msgstr "" + +#: src/client/keycode.cpp +msgid "Control Key" +msgstr "" + +#. ~ Key name, common on Windows keyboards +#: src/client/keycode.cpp +msgid "Menu Key" +msgstr "" + +#. ~ Usually paired with the Break key +#: src/client/keycode.cpp +msgid "Pause Key" +msgstr "" + +#: src/client/keycode.cpp +msgid "Caps Lock" +msgstr "" + +#: src/client/keycode.cpp +msgid "Space" +msgstr "" + +#: src/client/keycode.cpp +msgid "Page Up" +msgstr "" + +#: src/client/keycode.cpp +msgid "Page Down" +msgstr "" + +#: src/client/keycode.cpp +msgid "End" +msgstr "" + +#: src/client/keycode.cpp +msgid "Home" +msgstr "" + +#: src/client/keycode.cpp +msgid "Left Arrow" +msgstr "" + +#: src/client/keycode.cpp +msgid "Up Arrow" +msgstr "" + +#: src/client/keycode.cpp +msgid "Right Arrow" +msgstr "" + +#: src/client/keycode.cpp +msgid "Down Arrow" +msgstr "" + +#. ~ Key name +#: src/client/keycode.cpp +msgid "Select" +msgstr "" + +#. ~ "Print screen" key +#: src/client/keycode.cpp +msgid "Print" +msgstr "" + +#: src/client/keycode.cpp +msgid "Execute" +msgstr "" + +#: src/client/keycode.cpp +msgid "Snapshot" +msgstr "" + +#: src/client/keycode.cpp +msgid "Insert" +msgstr "" + +#: src/client/keycode.cpp +msgid "Delete Key" +msgstr "" + +#: src/client/keycode.cpp +msgid "Help" +msgstr "" + +#: src/client/keycode.cpp +msgid "Left Windows" +msgstr "" + +#: src/client/keycode.cpp +msgid "Right Windows" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad 0" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad 1" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad 2" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad 3" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad 4" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad 5" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad 6" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad 7" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad 8" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad 9" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad *" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad +" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad ." +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad -" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad /" +msgstr "" + +#: src/client/keycode.cpp +msgid "Num Lock" +msgstr "" + +#: src/client/keycode.cpp +msgid "Scroll Lock" +msgstr "" + +#: src/client/keycode.cpp +msgid "Left Shift" +msgstr "" + +#: src/client/keycode.cpp +msgid "Right Shift" +msgstr "" + +#: src/client/keycode.cpp +msgid "Left Control" +msgstr "" + +#: src/client/keycode.cpp +msgid "Right Control" +msgstr "" + +#: src/client/keycode.cpp +msgid "Left Menu" +msgstr "" + +#: src/client/keycode.cpp +msgid "Right Menu" +msgstr "" + +#: src/client/keycode.cpp +msgid "IME Escape" +msgstr "" + +#: src/client/keycode.cpp +msgid "IME Convert" +msgstr "" + +#: src/client/keycode.cpp +msgid "IME Nonconvert" +msgstr "" + +#: src/client/keycode.cpp +msgid "IME Accept" +msgstr "" + +#: src/client/keycode.cpp +msgid "IME Mode Change" +msgstr "" + +#: src/client/keycode.cpp +msgid "Apps" +msgstr "" + +#: src/client/keycode.cpp +msgid "Sleep" +msgstr "" + +#: src/client/keycode.cpp +msgid "Erase EOF" +msgstr "" + +#: src/client/keycode.cpp +msgid "Play" +msgstr "" + +#: src/client/keycode.cpp +msgid "Zoom Key" +msgstr "" + +#: src/client/keycode.cpp +msgid "OEM Clear" +msgstr "" + +#: src/client/minimap.cpp +msgid "Minimap hidden" +msgstr "" + +#: src/client/minimap.cpp +#, c-format +msgid "Minimap in surface mode, Zoom x%d" +msgstr "" + +#: src/client/minimap.cpp +#, c-format +msgid "Minimap in radar mode, Zoom x%d" +msgstr "" + +#: src/client/minimap.cpp +msgid "Minimap in texture mode" +msgstr "" + +#: src/client/shader.cpp +msgid "Shaders are enabled but GLSL is not supported by the driver." +msgstr "" + +#: src/client/shader.cpp +#, c-format +msgid "Failed to compile the \"%s\" shader." +msgstr "" + +#: src/content/mod_configuration.cpp +msgid "Some mods have unsatisfied dependencies:" +msgstr "" + +#. ~ Error when a mod is missing dependencies. Ex: "Mod Title is missing: mod1, mod2, mod3" +#: src/content/mod_configuration.cpp +#, c-format +msgid "%s is missing:" +msgstr "" + +#: src/content/mod_configuration.cpp +msgid "" +"Install and enable the required mods, or disable the mods causing errors." +msgstr "" + +#: src/content/mod_configuration.cpp +msgid "" +"Note: this may be caused by a dependency cycle, in which case try updating " +"the mods." +msgstr "" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + +#: src/gui/guiChatConsole.cpp +msgid "Failed to open webpage" +msgstr "" + +#: src/gui/guiFormSpecMenu.cpp +msgid "Proceed" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Keybindings." +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "\"Aux1\" = climb down" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp +msgid "Automatic jumping" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Backward" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Left" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Right" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp +msgid "Aux1" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp +msgid "Jump" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp +msgid "Sneak" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp +msgid "Drop" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp +msgid "Inventory" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Prev. item" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Next item" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp +msgid "Zoom" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp +msgid "Change camera" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp +msgid "Toggle minimap" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp +msgid "Toggle fly" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle pitchmove" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp +msgid "Toggle fast" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp +msgid "Toggle noclip" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Mute" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Dec. volume" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Inc. volume" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Autoforward" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Screenshot" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp +msgid "Range select" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Dec. range" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Inc. range" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Console" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Command" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Local command" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Block bounds" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle HUD" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp src/gui/touchcontrols.cpp +msgid "Toggle chat log" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle fog" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open URL?" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Unable to open URL" +msgstr "" + +#: src/gui/guiOpenURL.cpp +msgid "Open" +msgstr "" + +#: src/gui/guiPasswordChange.cpp +msgid "Old Password" +msgstr "" + +#: src/gui/guiPasswordChange.cpp +msgid "New Password" +msgstr "" + +#: src/gui/guiPasswordChange.cpp +msgid "Change" +msgstr "" + +#: src/gui/guiPasswordChange.cpp +msgid "Passwords do not match!" +msgstr "" + +#: src/gui/guiVolumeChange.cpp +#, c-format +msgid "Sound Volume: %d%%" +msgstr "" + +#: src/gui/guiVolumeChange.cpp src/gui/touchcontrols.cpp +msgid "Exit" +msgstr "" + +#: src/gui/guiVolumeChange.cpp +msgid "Muted" +msgstr "" + +#: src/gui/touchcontrols.cpp +msgid "Overflow menu" +msgstr "" + +#: src/gui/touchcontrols.cpp +msgid "Toggle debug" +msgstr "" + +#: src/gui/touchcontrols.cpp +msgid "Joystick" +msgstr "" + +#: src/network/clientpackethandler.cpp +msgid "Invalid password" +msgstr "" + +#: src/network/clientpackethandler.cpp +msgid "" +"Your client sent something the server didn't expect. Try reconnecting or " +"updating your client." +msgstr "" + +#: src/network/clientpackethandler.cpp +msgid "The server is running in singleplayer mode. You cannot connect." +msgstr "" + +#: src/network/clientpackethandler.cpp +msgid "" +"Your client's version is not supported.\n" +"Please contact the server administrator." +msgstr "" + +#: src/network/clientpackethandler.cpp +msgid "Player name contains disallowed characters" +msgstr "" + +#: src/network/clientpackethandler.cpp +msgid "Player name not allowed" +msgstr "" + +#: src/network/clientpackethandler.cpp +msgid "Too many users" +msgstr "" + +#: src/network/clientpackethandler.cpp +msgid "Empty passwords are disallowed. Set a password and try again." +msgstr "" + +#: src/network/clientpackethandler.cpp +msgid "" +"Another client is connected with this name. If your client closed " +"unexpectedly, try again in a minute." +msgstr "" + +#: src/network/clientpackethandler.cpp +msgid "Internal server error" +msgstr "" + +#: src/network/clientpackethandler.cpp +msgid "Server shutting down" +msgstr "" + +#: src/network/clientpackethandler.cpp +msgid "" +"The server has experienced an internal error. You will now be disconnected." +msgstr "" + +#: src/network/clientpackethandler.cpp +msgid "" +"Name is not registered. To create an account on this server, click 'Register'" +msgstr "" + +#: src/network/clientpackethandler.cpp +msgid "Name is taken. Please choose another name" +msgstr "" + +#. ~ DO NOT TRANSLATE THIS LITERALLY! +#. This is a special string which needs to contain the translation's +#. language code (e.g. "de" for German). +#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp +#: src/script/lua_api/l_mainmenu.cpp +msgid "LANG_CODE" +msgstr "" + +#: src/network/clientpackethandler.cpp +msgid "Unknown disconnect reason." +msgstr "" + +#: src/server.cpp +#, c-format +msgid "%s while shutting down: " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Smooths rotation of camera, also called look or mouse smoothing. 0 to " +"disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing in cinematic mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Smooths rotation of camera when in cinematic mode, 0 to disable. Enter " +"cinematic mode by using the key set in Controls." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Build inside player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, you can place nodes at the position (feet + eye level) where you " +"stand.\n" +"This is helpful when working with nodeboxes in small areas." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Aux1 key for climbing/descending" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down " +"and\n" +"descending." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Double tap jump for fly" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Double-tapping the jump key toggles fly mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Always fly fast" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n" +"enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Place repetition interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time in seconds it takes between repeated node placements when holding\n" +"the place button." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum dig repetition interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The minimum time in seconds it takes between digging nodes when holding\n" +"the dig button." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Automatically jump up single-node obstacles." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Safe digging and placing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Prevent digging and placing from repeating when holding the respective " +"buttons.\n" +"Enable this when you dig or place too often by accident.\n" +"On touchscreens, this only affects digging." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Keyboard and Mouse" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert mouse" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert vertical mouse movement." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity multiplier." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar: Enable mouse wheel for selection" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable mouse wheel (scroll) for item selection in hotbar." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar: Invert mouse wheel direction" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert mouse wheel (scroll) direction for item selection in hotbar." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Touchscreen" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Touchscreen controls" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables the touchscreen controls, allowing you to play the game with a " +"touchscreen.\n" +"\"auto\" means that the touchscreen controls will be enabled and disabled\n" +"automatically depending on the last used input method." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Touchscreen sensitivity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Touchscreen sensitivity multiplier." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Movement threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The length in pixels after which a touch interaction is considered movement." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Threshold for long taps" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The delay in milliseconds after which a touch interaction is considered a " +"long tap." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use crosshair for touch screen" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Use crosshair to select object instead of whole screen.\n" +"If enabled, a crosshair will be shown and will be used for selecting object." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fixed virtual joystick" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Fixes the position of virtual joystick.\n" +"If disabled, virtual joystick will center to first-touch's position." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Virtual joystick triggers Aux1 button" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Use virtual joystick to trigger \"Aux1\" button.\n" +"If enabled, virtual joystick will also tap \"Aux1\" button when out of main " +"circle." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Punch gesture" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The gesture for punching players/entities.\n" +"This can be overridden by games and mods.\n" +"\n" +"* short_tap\n" +"Easy to use and well-known from other games that shall not be named.\n" +"\n" +"* long_tap\n" +"Known from the classic Luanti mobile controls.\n" +"Combat is more or less impossible." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Graphics and Audio" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Graphics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Width component of the initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height component of the initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Window maximized" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether the window is maximized." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remember screen size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Save window size automatically when modified.\n" +"If true, screen size is saved in screen_w and screen_h, and whether the " +"window\n" +"is maximized is stored in window_maximized.\n" +"(Autosaving window_maximized only works if compiled with SDL.)" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Pause on lost window focus" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Open the pause menu when the window's focus is lost. Does not pause if a " +"formspec is\n" +"open." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If FPS would go higher than this, limit it by sleeping\n" +"to not waste CPU power for no benefit." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "VSync" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Vertical screen synchronization. Your system may still force VSync on even " +"if this is disabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FPS when unfocused or paused" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS when the window is not focused, or when the game is paused." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View distance in nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Undersampling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Undersampling is similar to using a lower screen resolution, but it applies\n" +"to the game world only, keeping the GUI intact.\n" +"It should give a significant performance boost at the cost of less detailed " +"image.\n" +"Higher values result in a less detailed image." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"3D support.\n" +"Currently supported:\n" +"- none: no 3d output.\n" +"- anaglyph: cyan/magenta color 3d.\n" +"- interlaced: odd/even line based polarization screen support.\n" +"- topbottom: split screen top/bottom.\n" +"- sidebyside: split screen side by side.\n" +"- crossview: Cross-eyed 3d\n" +"Note that the interlaced mode requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D mode parallax strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strength of 3D mode parallax." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Arm inertia" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Arm inertia, gives a more realistic movement of\n" +"the arm when the camera moves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View bobbing factor" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable view bobbing and amount of view bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fall bobbing factor" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for fall bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view in degrees." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Light curve gamma" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Alters the light curve by applying 'gamma correction' to it.\n" +"Higher values make middle and lower light levels brighter.\n" +"Value '1.0' leaves the light curve unaltered.\n" +"This only has significant effect on daylight and artificial\n" +"light, it has very little effect on natural night light." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ambient occlusion gamma" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The strength (darkness) of node ambient-occlusion shading.\n" +"Lower is darker, Higher is lighter. The valid range of values for this\n" +"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n" +"set to the nearest valid value." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screenshots" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screenshot folder" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Path to save screenshots at. Can be an absolute or relative path.\n" +"The folder will be created if it doesn't already exist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screenshot format" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Format of screenshots." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screenshot quality" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Screenshot quality. Only used for JPEG format.\n" +"1 means worst quality; 100 means best quality.\n" +"Use 0 for default quality." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Node and Entity Highlighting" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Node highlighting" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Method used to highlight selected object." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Show entity selection boxes" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Show entity selection boxes\n" +"A restart is required after changing this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box border color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Width of the selection box lines around nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Crosshair color (R,G,B).\n" +"Also controls the object crosshair color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Crosshair alpha (opaqueness, between 0 and 255).\n" +"This also applies to the object crosshair." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to fog out the end of the visible area." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Colored fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Make fog and sky colors depend on daytime (dawn/sunset) and view direction." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog start" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fraction of the visible distance at which fog starts to be rendered" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Clouds" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Clouds are a client-side effect." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D clouds" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use 3D cloud look instead of flat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Soft clouds" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use smooth cloud shading." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Filtering and Antialiasing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mipmapping" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Use mipmaps when scaling textures. May slightly increase performance,\n" +"especially when using a high-resolution texture pack.\n" +"Gamma-correct downscaling is not supported." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bilinear filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use bilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trilinear filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Use trilinear filtering when scaling textures.\n" +"If both bilinear and trilinear filtering are enabled, trilinear filtering\n" +"is applied." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Anisotropic filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use anisotropic filtering when looking at textures from an angle." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Antialiasing method" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Select the antialiasing method to apply.\n" +"\n" +"* None - No antialiasing (default)\n" +"\n" +"* FSAA - Hardware-provided full-screen antialiasing\n" +"(incompatible with Post Processing and Undersampling)\n" +"A.K.A multi-sample antialiasing (MSAA)\n" +"Smoothens out block edges but does not affect the insides of textures.\n" +"A restart is required to change this option.\n" +"\n" +"* FXAA - Fast approximate antialiasing (requires shaders)\n" +"Applies a post-processing filter to detect and smoothen high-contrast " +"edges.\n" +"Provides balance between speed and image quality.\n" +"\n" +"* SSAA - Super-sampling antialiasing (requires shaders)\n" +"Renders higher-resolution image of the scene, then scales down to reduce\n" +"the aliasing effects. This is the slowest and the most accurate method." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Anti-aliasing scale" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Defines the size of the sampling grid for FSAA and SSAA antialiasing " +"methods.\n" +"Value of 2 means taking 2x2 = 4 samples." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Occlusion Culling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Occlusion Culler" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Type of occlusion_culler\n" +"\n" +"\"loops\" is the legacy algorithm with nested loops and O(n³) complexity\n" +"\"bfs\" is the new algorithm based on breadth-first-search and side culling\n" +"\n" +"This setting should only be changed if you have performance problems." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable Raytraced Culling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Use raytraced occlusion culling in the new culler.\n" +"This flag enables use of raytraced occlusion culling test for\n" +"client mesh sizes smaller than 4x4x4 map blocks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Effects" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Translucent liquids" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Allows liquids to be translucent." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Leaves style" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Leaves style:\n" +"- Fancy: all faces visible\n" +"- Simple: only outer faces\n" +"- Opaque: disable transparency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Connect glass" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Connects glass if supported by node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooth lighting" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable smooth lighting with simple ambient occlusion." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Tradeoffs for performance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables tradeoffs that reduce CPU load or increase rendering performance\n" +"at the expense of minor visual glitches that do not impact game playability." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Digging particles" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Adds particles when digging a node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving Nodes" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving leaves" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Set to true to enable waving leaves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving plants" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Set to true to enable waving plants." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving liquids" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Set to true to enable waving liquids (like water)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving liquids wave height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The maximum height of the surface of waving liquids.\n" +"4.0 = Wave height is two nodes.\n" +"0.0 = Wave doesn't move at all.\n" +"Default is 1.0 (1/2 node)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving liquids wavelength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Length of liquid waves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving liquids wave speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How fast liquid waves will move. Higher = faster.\n" +"If negative, liquid waves will move backwards." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Set to true to enable Shadow Mapping." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shadow strength gamma" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set the shadow strength gamma.\n" +"Adjusts the intensity of in-game dynamic shadows.\n" +"Lower value means lighter shadows, higher value means darker shadows." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shadow map max distance in nodes to render shadows" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum distance to render shadows." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shadow map texture size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Texture size to render the shadow map on.\n" +"This must be a power of two.\n" +"Bigger numbers create better shadows but it is also more expensive." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shadow map texture in 32 bits" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Sets shadow texture quality to 32 bits.\n" +"On false, 16 bits texture will be used.\n" +"This can cause much more artifacts in the shadow." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Poisson filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shadow filter quality" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" +"but also uses more resources." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Colored shadows" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable colored shadows.\n" +"On true translucent nodes cast colored shadows. This is expensive." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map shadows update frames" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given number of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Soft shadow radius" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set the soft shadow radius size.\n" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 15.0" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Sky Body Orbit Tilt" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set the default tilt of Sun/Moon orbit in degrees.\n" +"Games may change orbit tilt via API.\n" +"Value of 0 means no tilt / vertical orbit." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Post Processing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable Post Processing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables the post processing pipeline." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Filmic tone mapping" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables Hable's 'Uncharted 2' filmic tone mapping.\n" +"Simulates the tone curve of photographic film and how this approximates the\n" +"appearance of high dynamic range images. Mid-range contrast is slightly\n" +"enhanced, highlights and shadows are gradually compressed." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable Automatic Exposure" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable automatic exposure correction\n" +"When enabled, the post-processing engine will\n" +"automatically adjust to the brightness of the scene,\n" +"simulating the behavior of human eye." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Exposure compensation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set the exposure compensation in EV units.\n" +"Value of 0.0 (default) means no exposure compensation.\n" +"Range: from -1 to 1.0" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable Debanding" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Apply dithering to reduce color banding artifacts.\n" +"Dithering significantly increases the size of losslessly-compressed\n" +"screenshots and it works incorrectly if the display or operating system\n" +"performs additional dithering or if the color channels are not quantized\n" +"to 8 bits.\n" +"With OpenGL ES, dithering only works if the shader supports high\n" +"floating-point precision and it may have a higher performance impact." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable Bloom" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true to enable bloom effect.\n" +"Bright colors will bleed over the neighboring objects." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Volumetric lighting" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Set to true to enable volumetric lighting effect (a.k.a. \"Godrays\")." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Other Effects" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Translucent foliage" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Simulate translucency when looking at foliage in the sunlight." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Node specular" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Apply specular shading to nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid reflections" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "When enabled, liquid reflections are simulated." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Audio" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Volume" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Volume of all sounds.\n" +"Requires the sound system to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Volume when unfocused" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Volume multiplier when the window is unfocused." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mute sound" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to mute sounds. You can unmute sounds at any time, unless the\n" +"sound system is disabled (enable_sound=false).\n" +"In-game, you can toggle the mute state with the mute key or by using the\n" +"pause menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "User Interfaces" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Language" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set the language. By default, the system language is used.\n" +"A restart is required after changing this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Optimize GUI for touchscreens" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When enabled, the GUI is optimized to be more usable on touchscreens.\n" +"Whether this is enabled by default depends on your hardware form-factor." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Scale GUI by a user specified value.\n" +"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n" +"This will smooth over some of the rough edges, and blend\n" +"pixels when scaling down, at the cost of blurring some\n" +"edge pixels when images are scaled by non-integer sizes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooth scrolling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables smooth scrolling." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Inventory items animations" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables animation of inventory items." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec Full-Screen Background Opacity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec full-screen background opacity (between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec Full-Screen Background Color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec full-screen background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter is true, all GUI images need to be\n" +"filtered in software, but some images are generated directly\n" +"to hardware (e.g. render-to-texture for nodes in inventory)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter txr2img" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter_txr2img is true, copy those images\n" +"from hardware to software for scaling. When false, fall back\n" +"to the old scaling method, for video drivers that don't\n" +"properly support downloading textures back from hardware." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Tooltip delay" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Delay showing tooltips, stated in milliseconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Append item name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Append item name to tooltip." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Clouds in menu" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use a cloud animation for the main menu background." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "HUD" +msgstr "HUD" + +#: src/settings_translation_file.cpp +msgid "HUD scaling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modifies the size of the HUD elements." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Show name tag backgrounds by default" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether name tag backgrounds should be shown by default.\n" +"Mods may still set a background." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Show debug info" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to show the client debug info (has the same effect as hitting F5)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Block bounds HUD radius" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Radius to use when the block bounds HUD feature is set to near blocks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum hotbar width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum proportion of current window to be used for hotbar.\n" +"Useful if there's something to be displayed right or left of hotbar." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Recent Chat Messages" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of recent chat messages to show" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Console height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console height, between 0.1 (10%) and 1.0 (100%)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Console color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Console alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat weblinks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Weblink color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Font size of the recent chat text and chat prompt in point (pt).\n" +"Value 0 will use the default font size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Content Repository" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "ContentDB URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The URL for the content repository" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable updates available indicator on content tab" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled and you have ContentDB packages installed, Luanti may contact " +"ContentDB to\n" +"check for package updates when opening the mainmenu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "ContentDB Flag Blacklist" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Comma-separated list of flags to hide in the content repository.\n" +"\"nonfree\" can be used to hide packages which do not qualify as 'free " +"software',\n" +"as defined by the Free Software Foundation.\n" +"You can also specify content ratings.\n" +"These flags are independent from Luanti versions,\n" +"so see a full list at https://content.minetest.net/help/content_flags/" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "ContentDB Max Concurrent Downloads" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of concurrent downloads. Downloads exceeding this limit will " +"be queued.\n" +"This should be lower than curl_parallel_limit." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client and Server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Saving map received from server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Save the map received by the client on disk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Serverlist URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "URL to the server list displayed in the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable split login/register" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, account registration is separate from login in the UI.\n" +"If disabled, new accounts will be registered automatically when logging in." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Update information URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"URL to JSON file which provides information about the newest Luanti " +"release.\n" +"If this is empty the engine will never check for updates." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Admin name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the player.\n" +"When running a server, clients connecting with this name are admins.\n" +"When starting from the main menu, this is overridden." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Serverlist and MOTD" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the server, to be displayed when players join and in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server description" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Description of server, to be displayed when players join and in the " +"serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server address" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Domain name of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Homepage of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Announce server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Automatically report to the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Send player names to the server list" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Send names of online players to the serverlist. If disabled only the player " +"count is revealed." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Announce to this serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day displayed to players connecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum users" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of players that can be connected simultaneously." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Static spawn point" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If this is set, players will always (re)spawn at the given position." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Networking" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server port" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Network port to listen (UDP).\n" +"This value will be overridden when starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bind address" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The network interface that the server listens on." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strict protocol checking" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable to disallow old clients from connecting.\n" +"Older clients are compatible in the sense that they will not crash when " +"connecting\n" +"to new servers, but they may not support all new features that you are " +"expecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Protocol version minimum" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Define the oldest clients allowed to connect.\n" +"Older clients are compatible in the sense that they will not crash when " +"connecting\n" +"to new servers, but they may not support all new features that you are " +"expecting.\n" +"This allows for more fine-grained control than " +"strict_protocol_version_checking.\n" +"Luanti still enforces its own internal minimum, and enabling\n" +"strict_protocol_version_checking will effectively override this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remote media" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Specifies URL from which client fetches media instead of using UDP.\n" +"$filename should be accessible from $remote_media$filename via cURL\n" +"(obviously, remote_media should end with a slash).\n" +"Files that are not present will be fetched the usual way." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable/disable running an IPv6 server.\n" +"Ignored if bind_address is set.\n" +"Needs enable_ipv6 to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server Security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default password" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New users need to input this password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Disallow empty passwords" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, players cannot join without a password or change theirs to an " +"empty password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default privileges" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The privileges that new users automatically get.\n" +"See /privs in game for a full list on your server and mod configuration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Basic privileges" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Privileges that players with basic_privs can grant" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Anticheat flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Server anticheat configuration.\n" +"Flags are positive. Uncheck the flag to disable corresponding anticheat " +"module." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Anticheat movement tolerance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Tolerance of movement cheat detector.\n" +"Increase the value if players experience stuttery movement." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rollback recording" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, actions are recorded for rollback.\n" +"This option is only read when server starts." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client-side Modding" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client side modding restrictions" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Restricts the access of certain client-side functions on servers.\n" +"Combine the byteflags below to restrict client-side features, or set to 0\n" +"for no restrictions:\n" +"LOAD_CLIENT_MODS: 1 (disable loading client-provided mods)\n" +"CHAT_MESSAGES: 2 (disable send_chat_message call client-side)\n" +"READ_ITEMDEFS: 4 (disable get_item_def call client-side)\n" +"READ_NODEDEFS: 8 (disable get_node_def call client-side)\n" +"LOOKUP_NODES_LIMIT: 16 (limits get_node call client-side to\n" +"csm_restriction_noderange)\n" +"READ_PLAYERINFO: 32 (disable get_player_names call client-side)" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client-side node lookup range restriction" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If the CSM restriction for node range is enabled, get_node calls are " +"limited\n" +"to this distance from the player to the node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strip color codes" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Remove color codes from incoming chat messages\n" +"Use this to stop players from being able to use color in their messages" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat message max length" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set the maximum length of a chat message (in characters) sent by clients." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat message count limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of messages a player may send per 10 seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat message kick threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Kick players who sent more than X messages per 10 seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server Gameplay" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Controls length of day/night cycle.\n" +"Examples:\n" +"72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "World start time" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time of day when a new world is started, in millihours (0-23999)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Item entity TTL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Time in seconds for item entity (dropped items) to live.\n" +"Setting it to -1 disables the feature." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default stack size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Specifies the default stack size of nodes, items and tools.\n" +"Note that mods or games may explicitly set a stack for certain (or all) " +"items." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Physics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Horizontal and vertical acceleration on ground or when climbing,\n" +"in nodes per second per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Acceleration in air" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Horizontal acceleration in air when jumping or falling,\n" +"in nodes per second per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Horizontal and vertical acceleration in fast mode,\n" +"in nodes per second per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Walking speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Walking and flying speed, in nodes per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Sneaking speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Sneaking speed, in nodes per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Walking, flying and climbing speed in fast mode, in nodes per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Climbing speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical climbing speed, in nodes per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Jumping speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Initial vertical speed when jumping, in nodes per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How much you are slowed down when moving inside a liquid.\n" +"Decrease this to increase liquid resistance to movement." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum liquid resistance. Controls deceleration when entering liquid at\n" +"high speed." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid sinking" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Controls sinking speed in liquid when idling. Negative values will cause\n" +"you to rise instead." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gravity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Acceleration of gravity, in nodes per second per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fixed map seed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"A chosen map seed for a new map, leave empty for random.\n" +"Will be overridden when creating a new world in the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of map generator to be used when creating a new world.\n" +"Creating a world in the main menu will override this.\n" +"Current mapgens in a highly unstable state:\n" +"- The optional floatlands of v7 (disabled by default)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water surface level of the world." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block generate distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are generated for clients, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map generation limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n" +"Only mapchunks completely within the mapgen limit are generated.\n" +"Value is stored per-world." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Global map generation attributes.\n" +"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" +"and jungle grass, in all other mapgens this flag controls all decorations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Biome API" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Heat noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Temperature variation for biomes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Heat blend noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Small-scale temperature variation for blending biomes on borders." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Humidity noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Humidity variation for biomes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Humidity blend noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Small-scale humidity variation for blending biomes on borders." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen V5" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen V5 specific flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map generation attributes specific to Mapgen v5." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cave width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Controls width of tunnels, a smaller value creates wider tunnels.\n" +"Value >= 10.0 completely disables generation of tunnels and avoids the\n" +"intensive noise calculations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Large cave depth" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y of upper limit of large caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Small cave minimum number" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum limit of random number of small caves per mapchunk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Small cave maximum number" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum limit of random number of small caves per mapchunk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Large cave minimum number" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum limit of random number of large caves per mapchunk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Large cave maximum number" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum limit of random number of large caves per mapchunk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Large cave proportion flooded" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Proportion of large caves that contain liquid." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cavern limit" +msgstr "Límite de la caverna" + +#: src/settings_translation_file.cpp +msgid "Y-level of cavern upper limit." +msgstr "Nivel Y del límite superior de la caverna." + +#: src/settings_translation_file.cpp +msgid "Cavern taper" +msgstr "Cono de caverna" + +#: src/settings_translation_file.cpp +msgid "Y-distance over which caverns expand to full size." +msgstr "" +"Distancia Y sobre la cual las cavernas se expanden hasta su tamaño completo." + +#: src/settings_translation_file.cpp +msgid "Cavern threshold" +msgstr "Umbral de la caverna" + +#: src/settings_translation_file.cpp +msgid "Defines full size of caverns, smaller values create larger caverns." +msgstr "" +"Define el tamaño completo de las cavernas, los valores más pequeños crean " +"cavernas más grandes." + +#: src/settings_translation_file.cpp +msgid "Dungeon minimum Y" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Lower Y limit of dungeons." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dungeon maximum Y" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Upper Y limit of dungeons." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noises" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Filler depth noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Variation of biome filler depth." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Factor noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Variation of terrain vertical scale.\n" +"When noise is < -0.55 terrain is near-flat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y-level of average terrain surface." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cave1 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "First of two 3D noises that together define tunnels." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cave2 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Second of two 3D noises that together define tunnels." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cavern noise" +msgstr "Ruido de caverna" + +#: src/settings_translation_file.cpp +msgid "3D noise defining giant caverns." +msgstr "Ruido 3D que define cavernas gigantes." + +#: src/settings_translation_file.cpp +msgid "Ground noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D noise defining terrain." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dungeon noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D noise that determines number of dungeons per mapchunk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen V6" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen V6 specific flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen v6.\n" +"The 'snowbiomes' flag enables the new 5 biome system.\n" +"When the 'snowbiomes' flag is enabled jungles are automatically enabled and\n" +"the 'jungles' flag is ignored.\n" +"The 'temples' flag disables generation of desert temples. Normal dungeons " +"will appear instead." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Desert noise threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Deserts occur when np_biome exceeds this value.\n" +"When the 'snowbiomes' flag is enabled, this is ignored." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Beach noise threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Sandy beaches occur when np_beach exceeds this value." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Terrain base noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y-level of lower terrain and seabed." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Terrain higher noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y-level of higher terrain that creates cliffs." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Steepness noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Varies steepness of cliffs." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height select noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines distribution of higher terrain." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mud noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Varies depth of biome surface nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Beach noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines areas with sandy beaches." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Biome noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cave noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Variation of number of caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trees noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines tree areas and tree density." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Apple trees noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines areas where trees have apples." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen V7" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen V7 specific flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen v7.\n" +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." +msgstr "" +"Atributos de generación de mapas específicos de Mapgen v7.\n" +"'crestas': Ríos.\n" +"'floatlands': Masas de tierra flotantes en la atmósfera.\n" +"'Cavernas': Cuevas gigantes en las profundidades del subsuelo." + +#: src/settings_translation_file.cpp +msgid "Mountain zero level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Y of mountain density gradient zero level. Used to shift mountains " +"vertically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland minimum Y" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Lower Y limit of floatlands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland maximum Y" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Upper Y limit of floatlands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland tapering distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Y-distance over which floatlands taper from full density to nothing.\n" +"Tapering starts at this distance from the Y limit.\n" +"For a solid floatland layer, this controls the height of hills/mountains.\n" +"Must be less than or equal to half the distance between the Y limits." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland taper exponent" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Exponent of the floatland tapering. Alters the tapering behavior.\n" +"Value = 1.0 creates a uniform, linear tapering.\n" +"Values > 1.0 create a smooth tapering suitable for the default separated\n" +"floatlands.\n" +"Values < 1.0 (for example 0.25) create a more defined surface level with\n" +"flatter lowlands, suitable for a solid floatland layer." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland density" +msgstr "" + +#: src/settings_translation_file.cpp +#, c-format +msgid "" +"Adjusts the density of the floatland layer.\n" +"Increase value to increase density. Can be positive or negative.\n" +"Value = 0.0: 50% of volume is floatland.\n" +"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n" +"to be sure) creates a solid floatland layer." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland water level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Surface level of optional water placed on a solid floatland layer.\n" +"Water is disabled by default and will only be placed if this value is set\n" +"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n" +"upper tapering).\n" +"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n" +"When enabling water placement, floatlands must be configured and tested\n" +"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n" +"required value depending on 'mgv7_np_floatland'), to avoid\n" +"server-intensive extreme water flow and to avoid vast flooding of the\n" +"world surface below." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Terrain alternative noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Terrain persistence noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Varies roughness of terrain.\n" +"Defines the 'persistence' value for terrain_base and terrain_alt noises." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines distribution of higher terrain and steepness of cliffs." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mountain height noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Variation of maximum mountain height (in nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ridge underwater noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines large-scale river channel structure." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mountain noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"3D noise defining mountain structure and height.\n" +"Also defines structure of floatland mountain terrain." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ridge noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D noise defining structure of river canyon walls." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"3D noise defining structure of floatlands.\n" +"If altered from the default, the noise 'scale' (0.7 by default) may need\n" +"to be adjusted, as floatland tapering functions best when this noise has\n" +"a value range of approximately -2.0 to 2.0." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Carpathian" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Carpathian specific flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map generation attributes specific to Mapgen Carpathian." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Base ground level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the base ground level." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "River channel width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the width of the river channel." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "River channel depth" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the depth of the river channel." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "River valley width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the width of the river valley." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hilliness1 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "First of 4 2D noises that together define hill/mountain range height." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hilliness2 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Second of 4 2D noises that together define hill/mountain range height." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hilliness3 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Third of 4 2D noises that together define hill/mountain range height." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hilliness4 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fourth of 4 2D noises that together define hill/mountain range height." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rolling hills spread noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "2D noise that controls the size/occurrence of rolling hills." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ridge mountain spread noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "2D noise that controls the size/occurrence of ridged mountain ranges." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Step mountain spread noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "2D noise that controls the size/occurrence of step mountain ranges." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rolling hill size noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "2D noise that controls the shape/size of rolling hills." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ridged mountain size noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "2D noise that controls the shape/size of ridged mountains." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Step mountain size noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "2D noise that controls the shape/size of step mountains." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "River noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "2D noise that locates the river valleys and channels." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mountain variation noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D noise for mountain overhangs, cliffs, etc. Usually small variations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Flat" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Flat specific flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen Flat.\n" +"Occasional lakes and hills can be added to the flat world." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ground level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y of flat ground." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Lake threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Terrain noise threshold for lakes.\n" +"Controls proportion of world area covered by lakes.\n" +"Adjust towards 0.0 for a larger proportion." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Lake steepness" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Controls steepness/depth of lake depressions." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hill threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Terrain noise threshold for hills.\n" +"Controls proportion of world area covered by hills.\n" +"Adjust towards 0.0 for a larger proportion." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hill steepness" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Controls steepness/height of hills." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Terrain noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines location and terrain of optional hills and lakes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Fractal" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Fractal specific flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen Fractal.\n" +"'terrain' enables the generation of non-fractal terrain:\n" +"ocean, islands and underground." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fractal type" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Selects one of 18 fractal types.\n" +"1 = 4D \"Roundy\" Mandelbrot set.\n" +"2 = 4D \"Roundy\" Julia set.\n" +"3 = 4D \"Squarry\" Mandelbrot set.\n" +"4 = 4D \"Squarry\" Julia set.\n" +"5 = 4D \"Mandy Cousin\" Mandelbrot set.\n" +"6 = 4D \"Mandy Cousin\" Julia set.\n" +"7 = 4D \"Variation\" Mandelbrot set.\n" +"8 = 4D \"Variation\" Julia set.\n" +"9 = 3D \"Mandelbrot/Mandelbar\" Mandelbrot set.\n" +"10 = 3D \"Mandelbrot/Mandelbar\" Julia set.\n" +"11 = 3D \"Christmas Tree\" Mandelbrot set.\n" +"12 = 3D \"Christmas Tree\" Julia set.\n" +"13 = 3D \"Mandelbulb\" Mandelbrot set.\n" +"14 = 3D \"Mandelbulb\" Julia set.\n" +"15 = 3D \"Cosine Mandelbulb\" Mandelbrot set.\n" +"16 = 3D \"Cosine Mandelbulb\" Julia set.\n" +"17 = 4D \"Mandelbulb\" Mandelbrot set.\n" +"18 = 4D \"Mandelbulb\" Julia set." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Iterations" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Iterations of the recursive function.\n" +"Increasing this increases the amount of fine detail, but also\n" +"increases processing load.\n" +"At iterations = 20 this mapgen has a similar load to mapgen V7." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"(X,Y,Z) scale of fractal in nodes.\n" +"Actual fractal size will be 2 to 3 times larger.\n" +"These numbers can be made very large, the fractal does\n" +"not have to fit inside the world.\n" +"Increase these to 'zoom' into the detail of the fractal.\n" +"Default is for a vertically-squashed shape suitable for\n" +"an island, set all 3 numbers equal for the raw shape." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"(X,Y,Z) offset of fractal from world center in units of 'scale'.\n" +"Can be used to move a desired point to (0, 0) to create a\n" +"suitable spawn point, or to allow 'zooming in' on a desired\n" +"point by increasing 'scale'.\n" +"The default is tuned for a suitable spawn point for Mandelbrot\n" +"sets with default parameters, it may need altering in other\n" +"situations.\n" +"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Slice w" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"W coordinate of the generated 3D slice of a 4D fractal.\n" +"Determines which 3D slice of the 4D shape is generated.\n" +"Alters the shape of the fractal.\n" +"Has no effect on 3D fractals.\n" +"Range roughly -2 to 2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Julia x" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Julia set only.\n" +"X component of hypercomplex constant.\n" +"Alters the shape of the fractal.\n" +"Range roughly -2 to 2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Julia y" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Julia set only.\n" +"Y component of hypercomplex constant.\n" +"Alters the shape of the fractal.\n" +"Range roughly -2 to 2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Julia z" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Julia set only.\n" +"Z component of hypercomplex constant.\n" +"Alters the shape of the fractal.\n" +"Range roughly -2 to 2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Julia w" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Julia set only.\n" +"W component of hypercomplex constant.\n" +"Alters the shape of the fractal.\n" +"Has no effect on 3D fractals.\n" +"Range roughly -2 to 2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Seabed noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y-level of seabed." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Valleys" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Valleys specific flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen Valleys.\n" +"'altitude_chill': Reduces heat with altitude.\n" +"'humid_rivers': Increases humidity around rivers.\n" +"'vary_river_depth': If enabled, low humidity and high heat causes rivers\n" +"to become shallower and occasionally dry.\n" +"'altitude_dry': Reduces humidity with altitude." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The vertical distance over which heat drops by 20 if 'altitude_chill' is\n" +"enabled. Also, the vertical distance over which humidity drops by 10 if\n" +"'altitude_dry' is enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Depth below which you'll find large caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cavern upper limit" +msgstr "Límite superior de la caverna" + +#: src/settings_translation_file.cpp +msgid "Depth below which you'll find giant caverns." +msgstr "Profundidad debajo de la cual encontrarás cavernas gigantes." + +#: src/settings_translation_file.cpp +msgid "River depth" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "How deep to make rivers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "River size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "How wide to make rivers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cave noise #1" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cave noise #2" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Filler depth" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Terrain height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Base terrain height." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Valley depth" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Raises terrain to make valleys around the rivers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Valley fill" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Slope and fill work together to modify the heights." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Valley profile" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Amplifies the valleys." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Valley slope" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Advanced" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Developer Options" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client modding" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable Lua modding support on client.\n" +"This support is experimental and API can change." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Main menu script" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Replaces the default main menu with a custom one." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mod Security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable mod security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Prevent mods from doing insecure things like running shell commands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trusted mods" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Comma-separated list of trusted mods that are allowed to access insecure\n" +"functions even when mod security is on (via request_insecure_environment())." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "HTTP mods" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Comma-separated list of mods that are allowed to access HTTP APIs, which\n" +"allow them to upload and download data to/from the internet." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debugging" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debug log level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Level of logging to be written to debug.txt:\n" +"- (no logging)\n" +"- none (messages with no level)\n" +"- error\n" +"- warning\n" +"- action\n" +"- info\n" +"- verbose\n" +"- trace" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debug log file size threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If the file size of debug.txt exceeds the number of megabytes specified in\n" +"this setting when it is opened, the file is moved to debug.txt.1,\n" +"deleting an older debug.txt.1 if it exists.\n" +"debug.txt is only moved if this setting is positive." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat log level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Deprecated Lua API handling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Handling for deprecated Lua API calls:\n" +"- none: Do not log deprecated calls\n" +"- log: mimic and log backtrace of deprecated call (default).\n" +"- error: abort on usage of deprecated call (suggested for mod developers)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Random input" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable random user input (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Random mod load order" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable random mod loading (mainly used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mod channels" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable mod channels support." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mod Profiler" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Load the game profiler" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Load the game profiler to collect game profiling data.\n" +"Provides a /profiler command to access the compiled profile.\n" +"Useful for mod developers and server operators." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default report format" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The default format in which profiles are being saved,\n" +"when calling `/profiler save [format]` without format." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Report path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The file path relative to your world path in which profiles will be saved to." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Entity methods" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Instrument the methods of entities on registration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active Block Modifiers" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Instrument the action function of Active Block Modifiers on registration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Loading Block Modifiers" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Instrument the action function of Loading Block Modifiers on registration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat commands" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Instrument chat commands on registration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Global callbacks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Instrument global callback functions on registration.\n" +"(anything you pass to a core.register_*() function)" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Builtin" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Instrument builtin.\n" +"This is usually only needed by core/builtin contributors" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Have the profiler instrument itself:\n" +"* Instrument an empty function.\n" +"This estimates the overhead, that instrumentation is adding (+1 function " +"call).\n" +"* Instrument the sampler being used to update the statistics." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Engine Profiler" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Engine profiling data print interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Print the engine's profiling data in regular intervals (in seconds).\n" +"0 = disable. Useful for developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable IPv6 support (for both client and server).\n" +"Required for IPv6 connections to work at all." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ignore world errors" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, invalid world data won't cause the server to shut down.\n" +"Only enable this if you know what you are doing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shaders" +msgstr "Shaders" + +#: src/settings_translation_file.cpp +msgid "" +"Shaders are a fundamental part of rendering and enable advanced visual " +"effects." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shader path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Path to shader directory. If no path is defined, default location will be " +"used." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Video driver" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The rendering back-end.\n" +"Note: A restart is required after changing this!\n" +"OpenGL is the default for desktop, and OGLES2 for Android." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Transparency Sorting Distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Distance in nodes at which transparency depth sorting is enabled.\n" +"Use this to limit the performance impact of transparency depth sorting.\n" +"Set to 0 to disable it entirely." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud radius" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Radius of cloud area stated in number of 64 node cloud squares.\n" +"Values larger than 26 will start to produce sharp cutoffs at cloud area " +"corners." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Desynchronize block animation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether node texture animations should be desynchronized per mapblock." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mesh cache" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables caching of facedir rotated meshes.\n" +"This is only effective with shaders disabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock mesh generation delay" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Delay between mesh updates on the client in ms. Increasing this will slow\n" +"down the rate of mesh updates, thus reducing jitter on slower clients." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock mesh generation threads" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of threads to use for mesh generation.\n" +"Value of 0 (default) will let Luanti autodetect the number of available " +"threads." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap scan height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"True = 256\n" +"False = 128\n" +"Usable to make minimap smoother on slower machines." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "World-aligned textures mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Textures on a node may be aligned either to the node or to the world.\n" +"The former mode suits better things like machines, furniture, etc., while\n" +"the latter makes stairs and microblocks fit surroundings better.\n" +"However, as this possibility is new, thus may not be used by older servers,\n" +"this option allows enforcing it for certain node types. Note though that\n" +"that is considered EXPERIMENTAL and may not work properly." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Autoscaling mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"World-aligned textures may be scaled to span several nodes. However,\n" +"the server may not send the scale you want, especially if you use\n" +"a specially-designed texture pack; with this option, the client tries\n" +"to determine the scale automatically basing on the texture size.\n" +"See also texture_min_size.\n" +"Warning: This option is EXPERIMENTAL!" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Base texture size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" +"can be blurred, so automatically upscale them with nearest-neighbor\n" +"interpolation to preserve crisp pixels. This sets the minimum texture size\n" +"for the upscaled textures; higher values look sharper, but require more\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" +"bilinear/trilinear/anisotropic filtering is enabled.\n" +"This is also used as the base node texture size for world-aligned\n" +"texture autoscaling." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client Mesh Chunksize" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Side length of a cube of map blocks that the client will consider together\n" +"when generating meshes.\n" +"Larger values increase the utilization of the GPU by reducing the number of\n" +"draw calls, benefiting especially high-end GPUs.\n" +"Systems with a low-end GPU (or no GPU) would benefit from smaller values." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "OpenGL debug" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables debug and error-checking in the OpenGL driver." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable Bloom Debug" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true to render debugging breakdown of the bloom effect.\n" +"In debug mode, the screen is split into 4 quadrants:\n" +"top-left - processed base image, top-right - final image\n" +"bottom-left - raw base image, bottom-right - bloom texture." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Sound Extensions Blacklist" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Comma-separated list of AL and ALC extensions that should not be used.\n" +"Useful for testing. See al_extensions.[h,cpp] for details." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font bold by default" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font italic by default" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Shadow offset (in pixels) of the default font. If 0, then shadow will not be " +"drawn." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size divisible by" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"For pixel-style fonts that do not scale well, this ensures that font sizes " +"used\n" +"with this font will always be divisible by this value, in pixels. For " +"instance,\n" +"a pixel font 16 pixels tall should have this set to 16, so it will only ever " +"be\n" +"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Regular font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Path to the default font. Must be a TrueType font.\n" +"The fallback font will be used if the font cannot be loaded." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bold font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Italic font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bold and italic font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font size divisible by" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Path to the monospace font. Must be a TrueType font.\n" +"This font is used for e.g. the console and profiler screen." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bold monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Italic monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bold and italic monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Path of the fallback font. Must be a TrueType font.\n" +"This font will be used for certain languages or if the default font is " +"unavailable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Lighting" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Light curve low gradient" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Gradient of light curve at minimum light level.\n" +"Controls the contrast of the lowest light levels." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Light curve high gradient" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Gradient of light curve at maximum light level.\n" +"Controls the contrast of the highest light levels." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Light curve boost" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Strength of light curve boost.\n" +"The 3 'boost' parameters define a range of the light\n" +"curve that is boosted in brightness." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Light curve boost center" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Center of light curve boost range.\n" +"Where 0.0 is minimum light level, 1.0 is maximum light level." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Light curve boost spread" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Spread of light curve boost range.\n" +"Controls the width of the range to be boosted.\n" +"Standard deviation of the light curve boost Gaussian." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Prometheus listener address" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Prometheus listener address.\n" +"If Luanti is compiled with ENABLE_PROMETHEUS option enabled,\n" +"enable metrics listener for Prometheus on that address.\n" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum size of the outgoing chat queue" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum size of the outgoing chat queue.\n" +"0 to disable queueing and -1 to make the queue size unlimited." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock unload timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Timeout for client to remove unused map data from memory, in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of mapblocks for client to be kept in memory.\n" +"Set to -1 for unlimited amount." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneous block sends per client" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks that are simultaneously sent per client.\n" +"The maximum total count is calculated dynamically:\n" +"max_total = ceil((#clients + max_users) * per_client / 4)" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Delay in sending blocks after building" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"To reduce lag, block transfers are slowed down when a player is building " +"something.\n" +"This determines how long they are slowed down after placing or removing a " +"node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. packets per iteration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of packets sent per send step in the low-level networking " +"code.\n" +"You generally don't need to change this, however busy servers may benefit " +"from a higher number." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map Compression Level for Network Transfer" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat message format" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Format of player chat messages. The following strings are valid " +"placeholders:\n" +"@name, @message, @timestamp (optional)" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat command time message threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If the execution of a chat command takes longer than this specified time in\n" +"seconds, add the time information to the chat command message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shutdown message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server shuts down." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crash message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server crashes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ask to reconnect after crash" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to ask clients to reconnect after a (Lua) crash.\n" +"Set this to true if your server is set up to restart automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server/Env Performance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dedicated server step" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Length of a server tick (the interval at which everything is generally " +"updated),\n" +"stated in seconds.\n" +"Does not apply to sessions hosted from the client menu.\n" +"This is a lower bound, i.e. server steps may not be shorter than this, but\n" +"they are often longer." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unlimited player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether players are shown to clients without any range limit.\n" +"Deprecated, use the setting player_transfer_distance instead." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active object send range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far clients know about objects, stated in mapblocks (16 nodes).\n" +"\n" +"Setting this larger than active_block_range will also cause the server\n" +"to maintain active objects up to this distance in the direction the\n" +"player is looking. (This can avoid mobs suddenly disappearing from view)" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active block range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The radius of the volume of blocks around every player that is subject to " +"the\n" +"active block stuff, stated in mapblocks (16 nodes).\n" +"In active blocks objects are loaded and ABMs run.\n" +"This is also the minimum range in which active objects (mobs) are " +"maintained.\n" +"This should be configured together with active_object_send_range_blocks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block send distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are sent to clients, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum forceloaded blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default maximum number of forceloaded mapblocks.\n" +"Set this to -1 to disable the limit." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time send interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of sending time of day to clients, stated in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map save interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of saving important changes in the world, stated in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unload unused server data" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How long the server will wait before unloading unused mapblocks, stated in " +"seconds.\n" +"Higher value is smoother, but will use more RAM." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum objects per block" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of statically stored objects in a block." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active block management interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Length of time between active block management cycles, stated in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "ABM interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Length of time between Active Block Modifier (ABM) execution cycles, stated " +"in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "ABM time budget" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time budget allowed for ABMs to execute on each step\n" +"(as a fraction of the ABM Interval)" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "NodeTimer interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Length of time between NodeTimer execution cycles, stated in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid loop max" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max liquids processed per step." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid queue purge time" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time (in seconds) that the liquids queue may grow beyond processing\n" +"capacity until an attempt is made to decrease its size by dumping old queue\n" +"items. A value of 0 disables the functionality." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update tick" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update interval in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Block send optimize distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"At this distance the server will aggressively optimize which blocks are sent " +"to\n" +"clients.\n" +"Small values potentially improve performance a lot, at the expense of " +"visible\n" +"rendering glitches (some blocks might not be rendered correctly in caves).\n" +"Setting this to a value greater than max_block_send_distance disables this\n" +"optimization.\n" +"Stated in MapBlocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server-side occlusion culling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, the server will perform map block occlusion culling based on\n" +"on the eye position of the player. This can reduce the number of blocks\n" +"sent to the client by 50-80%. Clients will no longer receive most\n" +"invisible blocks, so that the utility of noclip mode is reduced." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Block cull optimize distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"At this distance the server will perform a simpler and cheaper occlusion " +"check.\n" +"Smaller values potentially improve performance, at the expense of " +"temporarily visible\n" +"rendering glitches (missing blocks).\n" +"This is especially useful for very large viewing range (upwards of 500).\n" +"Stated in MapBlocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chunk size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Size of mapchunks generated by mapgen, stated in mapblocks (16 nodes).\n" +"WARNING: There is no benefit, and there are several dangers, in\n" +"increasing this value above 5.\n" +"Reducing this value increases cave and dungeon density.\n" +"Altering this value is for special usage, leaving it unchanged is\n" +"recommended." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen debug" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dump the mapgen debug information." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Absolute limit of queued blocks to emerge" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of blocks that can be queued for loading." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Per-player limit of queued blocks load from disk" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be loaded from file.\n" +"This limit is enforced per player." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Per-player limit of queued blocks to generate" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be generated.\n" +"This limit is enforced per player." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of emerge threads" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of emerge threads to use.\n" +"Value 0:\n" +"- Automatic selection. The number of emerge threads will be\n" +"- 'number of processors - 2', with a lower limit of 1.\n" +"Any other value:\n" +"- Specifies the number of emerge threads, with a lower limit of 1.\n" +"WARNING: Increasing the number of emerge threads increases engine mapgen\n" +"speed, but this may harm game performance by interfering with other\n" +"processes, especially in singleplayer and/or when running Lua code in\n" +"'on_generated'. For many users the optimum setting may be '1'." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL" +msgstr "cURL" + +#: src/settings_translation_file.cpp +msgid "cURL interactive timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum time an interactive request (e.g. server list fetch) may take, " +"stated in milliseconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL parallel limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Limits number of parallel HTTP requests. Affects:\n" +"- Media fetch if server uses remote_media setting.\n" +"- Serverlist download and server announcement.\n" +"- Downloads performed by main menu (e.g. mod manager).\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL file download timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum time a file download (e.g. a mod download) may take, stated in " +"milliseconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Miscellaneous" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable console window" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Windows systems only: Start Luanti with the command line window in the " +"background.\n" +"Contains the same information as the file debug.txt (default name)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. clearobjects extra blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of extra blocks that can be loaded by /clearobjects at once.\n" +"This is a trade-off between SQLite transaction overhead and\n" +"memory consumption (4096=100MB, as a rule of thumb)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map directory" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"World directory (everything in the world is stored here).\n" +"Not needed if starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Synchronous SQLite" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map Compression Level for Disk Storage" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Connect to external media server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable usage of remote media server (if provided by server).\n" +"Remote servers offer a significantly faster way to download media (e.g. " +"textures)\n" +"when connecting to the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Serverlist file" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"File in client/serverlist/ that contains your favorite servers displayed in " +"the\n" +"Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gamepads" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable joysticks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable joysticks. Requires a restart to take effect" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Joystick ID" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The identifier of the joystick to use" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Joystick type" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The type of joystick" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Joystick button repetition interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time in seconds it takes between repeated events\n" +"when holding down a joystick button combination." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Joystick dead zone" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The dead zone of the joystick" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Joystick frustum sensitivity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The sensitivity of the joystick axes for moving the\n" +"in-game view frustum around." +msgstr "" From ec7738934b5ce61157ba832c200c5adaa5ae50b4 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Sun, 10 Nov 2024 18:31:38 +0100 Subject: [PATCH 147/178] CI: fix workflows not running on translation update --- .github/workflows/android.yml | 2 ++ .github/workflows/linux.yml | 6 ++---- .github/workflows/macos.yml | 2 ++ .github/workflows/windows.yml | 2 ++ 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index ab68274b4..f404dc8a2 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -12,6 +12,7 @@ on: - 'irr/**.cpp' - '**/CMakeLists.txt' - 'cmake/Modules/**' + - 'po/**.po' - 'android/**' - '.github/workflows/android.yml' pull_request: @@ -24,6 +25,7 @@ on: - 'irr/**.cpp' - '**/CMakeLists.txt' - 'cmake/Modules/**' + - 'po/**.po' - 'android/**' - '.github/workflows/android.yml' diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 7b478693e..fe0c97324 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -12,9 +12,8 @@ on: - 'irr/**.cpp' - '**/CMakeLists.txt' - 'cmake/Modules/**' + - 'po/**.po' - 'util/ci/**' - - 'Dockerfile' - - '.dockerignore' - '.github/workflows/linux.yml' pull_request: paths: @@ -26,9 +25,8 @@ on: - 'irr/**.cpp' - '**/CMakeLists.txt' - 'cmake/Modules/**' + - 'po/**.po' - 'util/ci/**' - - 'Dockerfile' - - '.dockerignore' - '.github/workflows/linux.yml' env: diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index 05315f06e..d5f3f4f0a 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -13,6 +13,7 @@ on: - 'irr/**.mm' # Objective-C(++) - '**/CMakeLists.txt' - 'cmake/Modules/**' + - 'po/**.po' - '.github/workflows/macos.yml' pull_request: paths: @@ -25,6 +26,7 @@ on: - 'irr/**.mm' # Objective-C(++) - '**/CMakeLists.txt' - 'cmake/Modules/**' + - 'po/**.po' - '.github/workflows/macos.yml' jobs: diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 30d682ad8..670ce12f8 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -12,6 +12,7 @@ on: - 'irr/**.cpp' - '**/CMakeLists.txt' - 'cmake/Modules/**' + - 'po/**.po' - 'util/buildbot/**' - 'misc/*.manifest' - '.github/workflows/windows.yml' @@ -25,6 +26,7 @@ on: - 'irr/**.cpp' - '**/CMakeLists.txt' - 'cmake/Modules/**' + - 'po/**.po' - 'util/buildbot/**' - 'misc/*.manifest' - '.github/workflows/windows.yml' From e55ba9c390c845c6c60bcdcbaf05b17ed541eb61 Mon Sep 17 00:00:00 2001 From: sfence Date: Sun, 10 Nov 2024 19:06:52 +0100 Subject: [PATCH 148/178] Support generation of working Xcode project for signature purposes on MacOS (#15303) --- .github/workflows/macos.yml | 43 +++++++++++- CMakeLists.txt | 6 +- doc/compiling/macos.md | 69 +++++++++++++++++-- irr/src/CMakeLists.txt | 38 +++++----- misc/{Info.plist => macos/Info.plist.in} | 8 ++- misc/macos/entitlements/debug.entitlements | 10 +++ .../entitlements/debug_map_jit.entitlements | 10 +++ misc/macos/entitlements/release.entitlements | 8 +++ .../entitlements/release_map_jit.entitlements | 8 +++ src/CMakeLists.txt | 49 +++++++++++++ util/ci/build_xcode.sh | 24 +++++++ util/xcode/capture_env.sh | 3 + util/xcode/install_resources.cmake | 63 +++++++++++++++++ 13 files changed, 309 insertions(+), 30 deletions(-) rename misc/{Info.plist => macos/Info.plist.in} (69%) create mode 100644 misc/macos/entitlements/debug.entitlements create mode 100644 misc/macos/entitlements/debug_map_jit.entitlements create mode 100644 misc/macos/entitlements/release.entitlements create mode 100644 misc/macos/entitlements/release_map_jit.entitlements create mode 100755 util/ci/build_xcode.sh create mode 100644 util/xcode/capture_env.sh create mode 100644 util/xcode/install_resources.cmake diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index d5f3f4f0a..c073fe106 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -30,7 +30,7 @@ on: - '.github/workflows/macos.yml' jobs: - build: + build-intel-macos: # use lowest possible macOS running on x86_64 supported by brew to support more users runs-on: macos-13 steps: @@ -70,3 +70,44 @@ jobs: with: name: luanti-macos path: ./build/macos/*.zip + build-arm-macos-xcode: + runs-on: macos-14 + steps: + - uses: actions/checkout@v4 + - name: Install deps + run: | + source ./util/ci/common.sh + install_macos_deps + # brew jsoncpp do not include libjsoncpp.a, and if installed header conflict caused build failure + brew uninstall jsoncpp + + - name: Build with Cmake + run: | + mkdir build + cd build + cmake .. \ + -DCMAKE_OSX_DEPLOYMENT_TARGET=14 \ + -DCMAKE_FIND_FRAMEWORK=LAST \ + -DCMAKE_INSTALL_PREFIX=../build/macos/ \ + -DRUN_IN_PLACE=FALSE -DENABLE_GETTEXT=TRUE \ + -DENABLE_SYSTEM_JSONCPP=OFF + cmake --build . -j$(sysctl -n hw.logicalcpu) + make install + + - name: Build and Archive with Xcode + run: | + mkdir build_xcode + cd build_xcode + ../util/ci/build_xcode.sh + + - name: Tests + run: | + mkdir -p "${HOME}/Library/Application Support/minetest/games/" + ln -s "${PWD}/games/devtest" "${HOME}/Library/Application Support/minetest/games/" + ./build/macos/luanti.app/Contents/MacOS/luanti --run-unittests + ./build_xcode/luanti.xcarchive/Products/Applications/luanti.app/Contents/MacOS/luanti --run-unittests + + - name: Diff Resources + run: | + diff -rd ./build/macos/luanti.app/Contents/Resources ./build_xcode/build/Release/luanti.app/Contents/Resources || exit 1 + diff -rd ./build/macos/luanti.app/Contents/Resources ./build_xcode/luanti.xcarchive/Products/Applications/luanti.app/Contents/Resources || exit 1 diff --git a/CMakeLists.txt b/CMakeLists.txt index 282fea4df..e496c0b7c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -272,7 +272,11 @@ endif() if(APPLE) install(FILES "misc/luanti-icon.icns" DESTINATION "${SHAREDIR}") - install(FILES "misc/Info.plist" DESTINATION "${BUNDLE_PATH}/Contents") + install(FILES "${CMAKE_BINARY_DIR}/Info.plist" DESTINATION "${BUNDLE_PATH}/Contents") +endif() + +if(CMAKE_GENERATOR STREQUAL "Xcode") + set(client_RESOURCES "${CMAKE_SOURCE_DIR}/misc/luanti-icon.icns") endif() # Library pack diff --git a/doc/compiling/macos.md b/doc/compiling/macos.md index 6b9b4b6b8..09452004e 100644 --- a/doc/compiling/macos.md +++ b/doc/compiling/macos.md @@ -16,11 +16,13 @@ brew install cmake freetype gettext gmp hiredis jpeg-turbo jsoncpp leveldb libog Download source (this is the URL to the latest of source repository, which might not work at all times) using Git: ```bash -git clone --depth 1 https://github.com/minetest/minetest.git -cd minetest +git clone --depth 1 https://github.com/minetest/minetest.git luanti +cd luanti ``` -## Build +## Building for personal usage + +### Build ```bash mkdir build @@ -34,12 +36,65 @@ cmake .. \ make -j$(sysctl -n hw.logicalcpu) make install -# M1 Macs w/ MacOS >= BigSur -codesign --force --deep -s - macos/minetest.app +# Apple Silicon (M1/M2) Macs w/ MacOS >= BigSur signature for local run +codesign --force --deep -s - --entitlements ../misc/macos/entitlements/debug.entitlements macos/luanti.app ``` -## Run +If you are using LuaJIT with `MAP_JIT` support use `debug_map_jit.entitlements`. + +### Run ``` -open ./build/macos/minetest.app +open ./build/macos/luanti.app ``` + +## Building for distribution + +### Generate Xcode project + +```bash +mkdir build +cd build + +cmake .. \ + -DCMAKE_FIND_FRAMEWORK=LAST \ + -DRUN_IN_PLACE=FALSE -DENABLE_GETTEXT=TRUE \ + -DFREETYPE_LIBRARY=/path/to/lib/dir/libfreetype.a \ + -DGETTEXT_INCLUDE_DIR=/path/to/include/dir \ + -DGETTEXT_LIBRARY=/path/to/lib/dir/libintl.a \ + -DLUA_LIBRARY=/path/to/lib/dir/libluajit-5.1.a \ + -DOGG_LIBRARY=/path/to/lib/dir/libogg.a \ + -DVORBIS_LIBRARY=/path/to/lib/dir/libvorbis.a \ + -DVORBISFILE_LIBRARY=/path/to/lib/dir/libvorbisfile.a \ + -DZSTD_LIBRARY=/path/to/lib/dir/libzstd.a \ + -DGMP_LIBRARY=/path/to/lib/dir/libgmp.a \ + -DJSON_LIBRARY=/path/to/lib/dir/libjsoncpp.a \ + -DENABLE_LEVELDB=OFF \ + -DENABLE_POSTGRESQL=OFF \ + -DENABLE_REDIS=OFF \ + -DJPEG_LIBRARY=/path/to/lib/dir/libjpeg.a \ + -DPNG_LIBRARY=/path/to/lib/dir/libpng.a \ + -DCMAKE_EXE_LINKER_FLAGS=-lbz2\ + -GXcode +``` + +If you are using LuaJIT with `MAP_JIT` support add `-DXCODE_CODE_SIGN_ENTITLEMENTS=../misc/macos/entitlements/release_map_jit.entitlements`. + +*WARNING:* You have to regenerate Xcode project if you switch commit, branch or etc. + +### Build and Run + +* Open generated Xcode project +* Select scheme `luanti` +* Configure signing Team etc. +* Run Build command +* Open application from `build/build/Debug/` directory or run it from Xcode + +### Archive and Run + +* Open generated Xcode project +* Select scheme `luanti` +* Configure signing Team etc. +* Run Build command +* Open application archive in finder, go into it, copy application and test it. + diff --git a/irr/src/CMakeLists.txt b/irr/src/CMakeLists.txt index 41d6645e9..1d2996734 100644 --- a/irr/src/CMakeLists.txt +++ b/irr/src/CMakeLists.txt @@ -313,21 +313,6 @@ add_library(IRRMESHOBJ OBJECT target_link_libraries(IRRMESHOBJ PUBLIC tiniergltf::tiniergltf) -add_library(IRROBJ OBJECT - CBillboardSceneNode.cpp - CCameraSceneNode.cpp - CDummyTransformationSceneNode.cpp - CEmptySceneNode.cpp - CMeshManipulator.cpp - CSceneCollisionManager.cpp - CSceneManager.cpp - CMeshCache.cpp -) - -# Make sure IRROBJ gets the transitive include directories for -# tiniergltf from IRRMESHOBJ. -target_link_libraries(IRROBJ PRIVATE IRRMESHOBJ) - set(IRRDRVROBJ CNullDriver.cpp CGLXManager.cpp @@ -460,14 +445,29 @@ add_library(IRRGUIOBJ OBJECT # Library -add_library(IrrlichtMt STATIC) +# There have to be some sources in IrrlichtMt to workaround Cmake Xcode generator bug +add_library(IrrlichtMt STATIC + CBillboardSceneNode.cpp + CCameraSceneNode.cpp + CDummyTransformationSceneNode.cpp + CEmptySceneNode.cpp + CMeshManipulator.cpp + CSceneCollisionManager.cpp + CSceneManager.cpp + CMeshCache.cpp +) foreach(object_lib - IRRMESHOBJ IRROBJ IRRVIDEOOBJ + IRRMESHOBJ IRRVIDEOOBJ IRRIOOBJ IRROTHEROBJ IRRGUIOBJ) # Set include directories for object library compilation target_include_directories(${object_lib} PRIVATE ${link_includes}) - # Add objects from object library to main library - target_sources(IrrlichtMt PRIVATE $) + if(CMAKE_GENERATOR STREQUAL "Xcode") + # Workaround for Cmake Xcode project generator + target_link_libraries(IrrlichtMt PRIVATE ${object_lib}) + else() + # Add objects from object library to main library + target_sources(IrrlichtMt PRIVATE $) + endif() if(BUILD_WITH_TRACY) target_link_libraries(${object_lib} PRIVATE Tracy::TracyClient) diff --git a/misc/Info.plist b/misc/macos/Info.plist.in similarity index 69% rename from misc/Info.plist rename to misc/macos/Info.plist.in index 74ed6fe5c..3daf446b6 100644 --- a/misc/Info.plist +++ b/misc/macos/Info.plist.in @@ -9,11 +9,15 @@ CFBundleIconFile luanti-icon.icns CFBundleName - Luanti + @PROJECT_NAME_CAPITALIZED@ CFBundleDisplayName - Luanti + @PROJECT_NAME_CAPITALIZED@ CFBundleIdentifier org.luanti.luanti + CFBundleVersion + @VERSION_STRING@ + LSApplicationCategoryType + public.app-category.games NSHighResolutionCapable diff --git a/misc/macos/entitlements/debug.entitlements b/misc/macos/entitlements/debug.entitlements new file mode 100644 index 000000000..0b35f6b0f --- /dev/null +++ b/misc/macos/entitlements/debug.entitlements @@ -0,0 +1,10 @@ + + + + + com.apple.security.cs.allow-unsigned-executable-memory + + com.apple.security.get-task-allow + + + diff --git a/misc/macos/entitlements/debug_map_jit.entitlements b/misc/macos/entitlements/debug_map_jit.entitlements new file mode 100644 index 000000000..39760e5a1 --- /dev/null +++ b/misc/macos/entitlements/debug_map_jit.entitlements @@ -0,0 +1,10 @@ + + + + + com.apple.security.cs.allow-jit + + com.apple.security.get-task-allow + + + diff --git a/misc/macos/entitlements/release.entitlements b/misc/macos/entitlements/release.entitlements new file mode 100644 index 000000000..a1c430a57 --- /dev/null +++ b/misc/macos/entitlements/release.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.cs.allow-unsigned-executable-memory + + + diff --git a/misc/macos/entitlements/release_map_jit.entitlements b/misc/macos/entitlements/release_map_jit.entitlements new file mode 100644 index 000000000..d35e43ae5 --- /dev/null +++ b/misc/macos/entitlements/release_map_jit.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.cs.allow-jit + + + diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2275a2075..65e5ab6bc 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -598,6 +598,14 @@ if(PRECOMPILE_HEADERS) target_precompile_headers(EngineCommon PRIVATE ${PRECOMPILED_HEADERS_LIST}) endif() +if(APPLE) + # Configure the Info.plist file + configure_file( + "${CMAKE_SOURCE_DIR}/misc/macos/Info.plist.in" + "${CMAKE_BINARY_DIR}/Info.plist" + ) +endif() + if(BUILD_CLIENT) # client target if(ANDROID) @@ -605,6 +613,47 @@ if(BUILD_CLIENT) else() add_executable(${PROJECT_NAME}) endif() + + + if(CMAKE_GENERATOR STREQUAL "Xcode") + # File with used entitlements + set(XCODE_CODE_SIGN_ENTITLEMENTS "${CMAKE_SOURCE_DIR}/misc/macos/entitlements/release.entitlements" CACHE FILEPATH "Path to entitlements file to be used with Xcode signing") + + set(EXECUTABLE_OUTPUT_PATH "${CMAKE_BINARY_DIR}/build") + set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/build") + + target_sources(${PROJECT_NAME} PUBLIC ${client_RESOURCES}) + + add_dependencies(${PROJECT_NAME} translations) + + set_target_properties(${PROJECT_NAME} PROPERTIES + MACOSX_BUNDLE TRUE + MACOSX_BUNDLE_INFO_PLIST "${CMAKE_BINARY_DIR}/Info.plist" + RESOURCE "${client_RESOURCES}" + XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "org.luanti.luanti" + XCODE_ATTRIBUTE_ENABLE_HARDENED_RUNTIME "YES" + XCODE_ATTRIBUTE_INSTALL_PATH "/Applications" + XCODE_ATTRIBUTE_SKIP_INSTALL "NO" + XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT "dwarf-with-dsym" + XCODE_ATTRIBUTE_GCC_GENERATE_DEBUGGING_SYMBOLS "YES" + XCODE_ATTRIBUTE_CONFIGURATION_BUILD_DIR "$(inherited)" + XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS "${XCODE_CODE_SIGN_ENTITLEMENTS}" + ) + + # Prinv env variables to file, for debugging purposes + #add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD + # COMMAND ${CMAKE_COMMAND} -E env bash ${CMAKE_SOURCE_DIR}/util/xcode/capture_env.sh ${CMAKE_BINARY_DIR}/post_env.log + #) + + add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD + COMMAND ${CMAKE_COMMAND} -P ${CMAKE_SOURCE_DIR}/util/xcode/install_resources.cmake + -DTARGET_DIR=$ + -DBINARY_DIR=${CMAKE_BINARY_DIR} + -DPROJECT_NAME=${PROJECT_NAME} + COMMENT "Checking INSTALL_ROOT and copying resources" + ) + endif() + list(SORT client_SRCS) target_sources(${PROJECT_NAME} PRIVATE $ diff --git a/util/ci/build_xcode.sh b/util/ci/build_xcode.sh new file mode 100755 index 000000000..b31d22789 --- /dev/null +++ b/util/ci/build_xcode.sh @@ -0,0 +1,24 @@ +#!/bin/bash -e + +cmake .. \ + -DCMAKE_FIND_FRAMEWORK=LAST \ + -DRUN_IN_PLACE=FALSE -DENABLE_GETTEXT=TRUE \ + -DFREETYPE_LIBRARY=/opt/homebrew/lib/libfreetype.a \ + -DGETTEXT_INCLUDE_DIR=/path/to/include/dir \ + -DGETTEXT_LIBRARY=/opt/homebrew/lib/libintl.a \ + -DLUA_LIBRARY=/opt/homebrew/lib/libluajit-5.1.a \ + -DOGG_LIBRARY=/opt/homebrew/lib/libogg.a \ + -DVORBIS_LIBRARY=/opt/homebrew/lib/libvorbis.a \ + -DVORBISFILE_LIBRARY=/opt/homebrew/lib/libvorbisfile.a \ + -DZSTD_LIBRARY=/opt/homebrew/lib/libzstd.a \ + -DGMP_LIBRARY=/opt/homebrew/lib/libgmp.a \ + -DENABLE_SYSTEM_JSONCPP=OFF \ + -DENABLE_LEVELDB=OFF \ + -DENABLE_POSTGRESQL=OFF \ + -DENABLE_REDIS=OFF \ + -DJPEG_LIBRARY=/opt/homebrew/lib/libjpeg.a \ + -DPNG_LIBRARY=/opt/homebrew/lib/libpng.a \ + -DCMAKE_EXE_LINKER_FLAGS=-lbz2\ + -GXcode +xcodebuild -project luanti.xcodeproj -scheme luanti -configuration Release build +xcodebuild -project luanti.xcodeproj -scheme luanti -archivePath ./luanti.xcarchive archive diff --git a/util/xcode/capture_env.sh b/util/xcode/capture_env.sh new file mode 100644 index 000000000..a447e5bbc --- /dev/null +++ b/util/xcode/capture_env.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +env > $1 diff --git a/util/xcode/install_resources.cmake b/util/xcode/install_resources.cmake new file mode 100644 index 000000000..01fb663f0 --- /dev/null +++ b/util/xcode/install_resources.cmake @@ -0,0 +1,63 @@ + +# This is only one working solution I found to be working for normal and Archive builds under Xcode 15.4 +# I expect higger sensitivity to Xcode version. + +if(DEFINED ENV{INSTALL_ROOT} AND EXISTS "$ENV{INSTALL_ROOT}") + set(RESOURCES_DIR "$ENV{INSTALL_ROOT}/Applications/$ENV{PRODUCT_NAME}.app/Contents/Resources") +else() + set(RESOURCES_DIR "$ENV{TARGET_BUILD_DIR}/$ENV{UNLOCALIZED_RESOURCES_FOLDER_PATH}") +endif() + +# Write debug information to a file +#file(WRITE "$ENV{PROJECT_FILE_PATH}/../debug_output.txt" "INSTALL_ROOT: $ENV{INSTALL_ROOT}\n") +#file(APPEND "$ENV{PROJECT_FILE_PATH}/../debug_output.txt" "RESOURCES_DIR: ${RESOURCES_DIR}\n") +#file(APPEND "$ENV{PROJECT_FILE_PATH}/../debug_output.txt" "TARGET_BUILD_DIR: $ENV{TARGET_BUILD_DIR}\n") +#file(APPEND "$ENV{PROJECT_FILE_PATH}/../debug_output.txt" "BUILT_PRODUCTS_DIR: $ENV{BUILT_PRODUCTS_DIR}\n") +#file(APPEND "$ENV{PROJECT_FILE_PATH}/../debug_output.txt" "SOURCE_ROOT: $ENV{SOURCE_ROOT}\n") +#file(APPEND "$ENV{PROJECT_FILE_PATH}/../debug_output.txt" "PRODUCT_NAME: $ENV{PRODUCT_NAME}\n") + +execute_process( + COMMAND ${CMAKE_COMMAND} -E copy_directory + "$ENV{SOURCE_ROOT}/builtin" + "${RESOURCES_DIR}/builtin" +) +execute_process( + COMMAND ${CMAKE_COMMAND} -E copy_directory + "$ENV{SOURCE_ROOT}/client/shaders" + "${RESOURCES_DIR}/client/shaders" +) +execute_process( + COMMAND ${CMAKE_COMMAND} -E copy_directory + "$ENV{SOURCE_ROOT}/fonts" + "${RESOURCES_DIR}/fonts" +) +execute_process( + COMMAND ${CMAKE_COMMAND} -E copy_directory + "$ENV{PROJECT_FILE_PATH}/../locale" + "${RESOURCES_DIR}/locale" +) +execute_process( + COMMAND ${CMAKE_COMMAND} -E make_directory + "${RESOURCES_DIR}/$ENV{PRODUCT_NAME}" +) +set(RESOURCE_LUANTI_FILES + "$ENV{SOURCE_ROOT}/README.md" + "$ENV{SOURCE_ROOT}/doc/client_lua_api.md" + "$ENV{SOURCE_ROOT}/doc/lua_api.md" + "$ENV{SOURCE_ROOT}/doc/menu_lua_api.md" + "$ENV{SOURCE_ROOT}/minetest.conf.example" + "$ENV{SOURCE_ROOT}/doc/texture_packs.md" + "$ENV{SOURCE_ROOT}/doc/world_format.md" +) +foreach (file ${RESOURCE_LUANTI_FILES}) + execute_process( + COMMAND ${CMAKE_COMMAND} -E copy + "${file}" + "${RESOURCES_DIR}/$ENV{PRODUCT_NAME}/" + ) +endforeach() +execute_process( + COMMAND ${CMAKE_COMMAND} -E copy_directory + "$ENV{SOURCE_ROOT}/textures/base/pack" + "${RESOURCES_DIR}/textures/base/pack" +) From a983b72713ef4ca66394a374ddd9ec9acbc50e53 Mon Sep 17 00:00:00 2001 From: ROllerozxa Date: Sun, 10 Nov 2024 19:08:08 +0100 Subject: [PATCH 149/178] Add Fastlane metadata for F-Droid (#15411) Co-authored-by: grorp --- .../metadata/android/en-US/full_description.txt | 7 +++++++ fastlane/metadata/android/en-US/images/icon.png | Bin 0 -> 8652 bytes .../metadata/android/en-US/short_description.txt | 1 + fastlane/metadata/android/en-US/title.txt | 1 + 4 files changed, 9 insertions(+) create mode 100644 fastlane/metadata/android/en-US/full_description.txt create mode 100644 fastlane/metadata/android/en-US/images/icon.png create mode 100644 fastlane/metadata/android/en-US/short_description.txt create mode 100644 fastlane/metadata/android/en-US/title.txt diff --git a/fastlane/metadata/android/en-US/full_description.txt b/fastlane/metadata/android/en-US/full_description.txt new file mode 100644 index 000000000..c08797ff6 --- /dev/null +++ b/fastlane/metadata/android/en-US/full_description.txt @@ -0,0 +1,7 @@ +Luanti is a voxel-based game platform with multiplayer capabilities. + +The objective of the available games varies, from sandbox games where you can explore, dig and build in a very large voxel world, to arcade-style games. + +There is a wide range of built-in map generators for procedurally generated terrain, and voxel-based lighting that adapts to the environment and light sources. + +All games and mods are written in Lua with a scripting API that is easy to use and makes it easy for modders to get started. diff --git a/fastlane/metadata/android/en-US/images/icon.png b/fastlane/metadata/android/en-US/images/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..47f6fc2c489157d9e5e4199388b09668a21e856f GIT binary patch literal 8652 zcmV;-Av4~IP)I~6001FtNklGIPVOxROTBkXsS+*gP)r1cT_yb%e_&8@; zJ|i$&>oFpAAmI?opSzD-AF+jDXE!>6+;hf16!uNz}gbo6;wJdYa5Vj@aiU?m5pn;;?5*hTuoIrcI)xz!Ls5g;1|#MAwNhdX3+7Azbo#B6vtR zOHhc?&GCUr8j;hVu&dgKgTQ>d_e3GWmNRklwxJ>K^Pza zT69K!ixmKoZcCU*_zwYu>jZ!2WNUMcp*0IYlGNUkh)yEhAwUPe6J8f3TfZnUTk8^l zr@H+!@;Ga6mn5spMDjxo>B=H&gv_*sIF%=a9|$uD_5!oDd;ut8toun4t#(xJa1bEL zutLnL4j6K&E2`e>hWull;Wy4k_e8i)$Py=6nR^f|Q2-th?d_xqR+EXq?`ud+u|miU zTNIt{!id*K<@Ihz-`xqWrR}vv@Q`qU;O3lU^>oJvEkywC5mpwmcqwVMA`PN9@(h(I` z8Nu~N@tH1A&9Q?xh36LjLl`GYZf7HS+N=c#K(kXpfJ>ScBA0bQ*#+k3pA2+b`i0SW6Iq zM@4&N?(c+3=I4!%As4$MdSwT=r1MULUkIxR4uaNfrY-;)K0*0qcHB2Q3Qu)G@N`>< z`0>GagevFcc2B6e311*Tge2i&CCL*9pzWL zB4~;&PXttd*lWPL_H=3qbB<;K=%est7X(e?y8>yV6+(h-c0T@wl+dbr?ENRge!^b` zrfg;ba435e46fh@gVGcm_=dMfjE61am9{$`vzAiAy98+AN5X7ECqub03!sSvz|z6( z{B%%E7(Ub)mtIRls#g~xpA&%o8ftbucTt8v^~~^q5M>BAW&t#+0JwsX_eg$0C@H@m z-dr7vua1=BtHY&y0qC!v1>uSo(d;&qYH3^e%@9ITz!Sj^1E?_zz%T(cyd>2vKGW5kU1w zSgRI5ZA~F*N_)(m;Es=9&t=4adAJ0}7DuBb>`#n%4N_IlA}gT{GUF}Y&xp1NObZh} z!`nc^YgxOMB!Dc_7Jx|)g*I3Kb+?64Rz3(9HmBliBA$TD8&WYbeK3#s5t+TPdyNx{ zGukl$RO9!|IE(!$v6h3l6SM^iz|_aWCHcYz3m~tS!H}5T=WuX&G-$W8U4L^|E|yn$ zAknQu4e{B*opEfN3_sip#c$t)$$VsxO5kh7{oBxUEbGB#!nB>I}5<$>R zYbwuneq!QF&UJ-)fgNu&%q`U(>t+Yy_JKl1{JjH3*gai^Oy6!b#3#AiVdH{9`1>cp zjCgJQ`gJ%yyX1{I6MAa|0C8&&04IdzzZ&K-f_&}4jufRoc@-~VgFU3#oS%0|ZjY&B z*d?oYlFhl;2_bH}}_EoN4|fX^@a5z##2_3-nTVYv9F62pr-wk`oQ=jBjY zp%6)1I-ug}6E%NWw=i>GC%BjM{d`{OOE|M3311&6W8}ZPIRn#k#T4D!)sSD2@ z+=y5;Be=f!_w5k4=d^2m0?@f0zMJr{k*g=A_yEFn{ z94cnSfA)GF){gR~Bi_D-_zeG!IJnUT|GmTfyutY8D>XdxtXi)C6miyrX&mdQD1}s> zE`*UE5CQ)wRw#J8bAuZ<@_g;%-WtoN`{35T0!I872aBf`( zQOQ5{$B&WX-5r@Yvnmn8<6h#Wb(2f~gip@-aDKjt1mKZo`DsR!r9@!L<{4q#mZoou zY3%wN?FIE6Ys1nhO)({Atu0(~g)s0TQ7o;C-)P5nZDTibWGOcAi?Go&a!?Z89cT9| z@xKRQ9EnXR0RJ>gQ0DL})eqK?5KL>*$m`K9n|NzK8oR!(O}uMKd!+5^SZgj`e7ZB@ zh+LKjKjtxUVnPCuUvjofBTx0{w{qzuLs6jvgY2|!B-pJc>XhNp%LoBnAi?vd8^H03g#j{6^K{5G`gRSi-Lex~AJ; z%VsD1>$a-N1h9+*pn2bSp9W#ussYGJ;<<&NNeGKGB86QWg?R7qc8_k;x{;qhuYJo# zQDBXfZ5=6^Hf&*s((C8*1)vLk0kBx2c~Ee?GXf^^=lo)eyWr%JCl3t&_azA+w|)Xx zyz*rd4FCPNuli!al)k!d;aiFiO4GuP_>gV7P5T`A`OUmrHWV>OEq}6GHkH@Aqx^gi z%ulVq0Ok}3QGTIEGYon1yMh^eI>BuSKR&1!_Z&XF=w09VfW7Xg2WotKGZgMQ^%KCf z1ux;7Pr~rSeKmg3`aM6>DRSkwD@K=f<_Uq?&hKT!Soo)fwSDs8(kM?mODg7!rsMwK z+P7(gr`fXV*^`u8%P)6F$tedEywMx;Qw$J5t`G%>dZFYU2UO6{;M_s;O#Q~MvxhW` ziw`6eA1qq>SA6wxU|qyhxj39$hZ=X^3&p$d1j9AEegYUX<1e^=Is~__s_@-sVN5{U zg8Tli3P*Q{P?YhkZrgbe#RvTbPhx(m_AiLJUC;br>P~|jE$sCbSG%M1ED?XS7jpLW zLC%go1_@wxju6@Oo}9gXQ1E6il$|3XTy0h%u(UL69)B_@Ag2Q!e5fY^c6|T$t{M+M z2*rozLvZ;-FwP$fgfhE+y@1ivU&MvCf^g~WV7z}egb9d*!~~@+gl|3y#QG(FL3W~r zwp;iyJwjMu_zB=)+s7l?nh8JyWwABVNCfpgiYu>m#}GR13*YL6+6Ur|VA$D*{mi_B zy-|F!C(181ZG4dTW@q?~jR43`hvN%6^4~iX!Y5x}01S!>O9U@uCk zmB;Ddc>>TE0pZ%I5Zt~Vitq2SxPX^t7N!|V09z&ovhLU?dvY;a z`EJZNlaD4}txLQpou^`NtKM?Zl zXSMqxY_3wAqg4ve6k^Vz!FuFhrg-4Sxe(lcKNSDD!*c@+_ulnGUW(AD0$})>aB)i- zDu+2jtT_Uc+QYTL9?JP*lL4%q&h66dvEf9ZG-xfHhR@sC?{^y_2<|N1-xyVniUkZ)`OaQO0Y zDUPg;L43jUOaP+z4sed4I(l(8B(Cbk2&pfM*7wAek+xWn)CThjlg8SiU?cZ4npyzt z;>ThAiyz5FFW~4JcJYI)!KZtQv1n8h`b$IM;H+Z!vor)N7YF0-pN8=QGa`x+cALcn zAw*;_?=;x9S&78T9*p>aLOZNjDaP5O0X(07jeP#6*^)Q!CjBCvc#ca*K}VKDK`1?)453t(MA zdU6;qz4OoP%3`2<2aCW4Lf-Lr^$M#YzNaXZzzM-4Fa(Epg|Om{mJk?m-%?gU z!5b0E3l16K8`jHk;-H^i)c?^16-E8b*Xu?7AD#2W)R7K6(kGPkM^2(~T|k}qV0R8? zOmKxHi9`@@N2ftYND{k1J>3BrTNzQtgYknvR@IDJ&YugAr`lriG;iG8n+G-!dZY|* zF3(0xcmyL^1Lx2pq)pqy;HWC#eJ>+37*|iKh$x-9z&$l1^rQ13j9^_KugUvwP~Lx! z^8SCbyr1vqzxp5mYZmn9<^AQE-Ed@CIPQ~J^OJ3wN&sAZaBfpFipmE-lxV};f{5IL zGOH_M7WYKf_J)#f{4|g{f9$DY@_fFZA3e$iSGQ+yanGiF49Sc^FA+!Xi(V;+9la6d zYc8R3-8F_G^mWY0b$G!oq2_hH={=Lj2jlL$q5APbb!CtWJdAM7aZjluOCf8i{87-S z!hzSED9vkILwp{kp|8#G!R>wd)nYAeY5{O~aJU5fmq#Kzr#F}o;_OKX zW?{k@DO{3lSbQL&_&}Q61rf6ykh$%##Iu4@{-NFtZU&Y9jr#kG?I2Fm>hGs@z{**E zxV1mOCc8PfBnx4xaGo!Bi5P;+S#J=jR~fN}pyJi5NS?eC0|Rq7F%b$2L-4`5P~I-* zzUJ!t8>qgYqvhvIGdkhm;!rlV{6}kk^|c)MdOKpUixeV>=*?yo0D-CW)P_W4m;Qwp zAGqapMclGl-2(af=U6G3O3GAPW`4dwH-2O}+7mwQF=d<_B+ly3S4IV$JlZwUAab~4 z+cyIV!}cT zt2!vH4WI2P#L`g_kjP~q@)?|6#71!e#sIr)v1_Rs!C4N>EokBc->U9NUe}xR^N-TH zw>UrFkRHCfP7lAZ{AHZkn5?<+L;kZ6lgr}KSIiOrCwVl&D_5Xw<#|S)F;TSiH2iXA zpqH3)FN57fuyX^855Ri-L$rJR7ML^C5$|qI`{Q*zSc2Vi6AkQSD9#qWfMeXB;`FVD;cRat46P@=Q4y=e`K`M(;_7!8*gcJ-^aQ>M{ zVdNApJ;lgsOk~YD1Zi|7-_>{qB0O{eG7~Hr`6KiD;xt!$(ghRosnr?Cj`QY`?h_aY zM~SS-1wciT5`%gc4qG?{dhRrc**u+Kf8#Yd=Le{LIqKv5#&puPy^u6peYCi8Eg`NN?4a`MWEQ|IT zxkR$b2!O#+!gf3Rx-KL~coIpeTxwGf+@T15-Mm0}q<5@o*o+z}W?6*hHJ3N%qausn zu<7raObwe2T*Jo1kiY0SJW|H-TFIWiYV4kup>dm3_$k7Qv5}A}xb=2Xx|)yx3Y&K3yg^N4i z&wHj#1T}0-llW>-%Be~D*oiePHx^g76!1#tg-O2r;!Z#SDu-2Qc7E#+fChoSuGlpv zft57tCZ229sB3B1WXwDO+Fd3~d~E_4Qy535*&na3)YT37MfsREW3ql>Gtpdq$(2*9z9@4fvP0nlP`oiuqg)D_D? z4I7gs+9(1@YDEHYC+r&R$VA}S00H!tgri`|Ns}emEPy{ilvsjMA~8xtE?D8@{G7iQuC zSLbK{XRgvGLrg*(#!Vb!(5@dfW&~8>YMpFL@|{>Bs&tpV+)nT$7VBzfLBuB$?hv5C zgtWo9@M;Q_%K8aFqI5-&Di|I<-f)yONC2z|bZDu55l9wOh0>LOGX>(=sib~1+#!qN zm3fzqO~$Q#yhfOw0BD-WAmS%Z9*@M7BsfXs+Qk1Vb`h<0l?-qY7{lU}Hnv3kWWs+n zB1mwxuOpx5rd0fc0uUV+h1mFLhOme*$lcuy7XTk@ZhzgBR5&Wx?qWez!Qzw6p4uf% z+QCjGMtpUdw=z2h*SIooodT#BT3#RGSyeEvFb`5!-da8sNyO)r(t(NqS>I;_#x^3p zA7LBew>V`7kkbCJ(c|gsgUILzM!GIy;-cA!AeJli-n)BlqCvwW8%PAEAb{NY$DoKG zL7#;??!!YPaP*aIuFTtT0Wd#bIkW=a0RcLGUi?5I9h~VWd)`9On3kaI@C*sSGfruL zsWt)7?q<83h<+@hVOzYH;V&)JPKIA5i>cr;h%_;!aZ44=1z^06}d-<ViAG?`d5Y-UhN2J2|;yAp&oy(StA%MwKCm=N=4bC#2 zpMNNmI34woy*NAP(G4erD zQsq030+Bj`z{etnUKFF1%lTPYEL?;#y9F;dyXMqrBOB5|^CmWY!{2zPbUz>u&IgHD5} zmhrg`<&=^H0D?v*(sbt_Y)Qs>Xw{V%4x60%Q z2o7XE-#7x`E=wL?nS=PqNM4X84liZnV$_O#>=kah70iZBH1B;u63U(iMkkF?iNF6w zG4{?1L%dIaZ9o5;kL;xlQHm~o1g*)WE`u%UG{_|(e5oY_Ht(iVtLhYhOd+rLydZ)1 zBrk<0e_+%*V>0dT6SX#NQYP=hz<_M6*Q?lbfoR;^n8dSz&vUC2F)Z#ctg5P#_l1*- z1fJ3Xm%ryhE$_ImuZbm29Z3jth}fTadB2wzs|RR_fCZ1*ugQ$@#_84R2Blh` zP^)#W&d7LQSrpV2uV_ZeSitC-IEr`Nt3twA&*7`X#=RE*(e`XCD3SC2`e>x0`!^(l z!g!^fQ1G-EH7i~s)gRD}4}1drScQ-Tz|u!QN+X@QMhCkJJ)tO=U5z$i;n^^0X+{i@ z%pWH8%bh_1V>s7cl!s#V#1v|Mml%_H_Q$5TPYFhvcb6LC2|p8-$Gh5g6FiM3b#Z)# z(#BwN3paTAu3UjYRgfk=U_Av7A0J)`)ZbfK&$xg;#Bz997OT-S!a1i@B6!b8Gof{VaxkKBS|Tgr9IDed_?FA{chM_70$uaoFf?G|Vjp|;DD_3k9D zpPC9MR~8?zdxR7?a<0Wlcz;VKX63u^j(frvgtT~torS<`x^BU_JGq5rMDQ{834jANoC>jbK?e6!6C>fyz5+Hzm*UY$oA{pya|reVvprS_PUIHe(k?4I zNoDX241lYrr>+1@26U5|O-vPs_0>J@j}Qh3%w|wEu?^J^qDTmz=@dy!QUKRBrDIB# z6C+&T%8v9_~| zM3hLCvk$aM7!m&x&aO`69-eGu+}xdudYy z2}MMFTY=e3)8geeZHT1U>Kq&zj7u4ai|bNoS3kaKvvX=N()mrBUkED*-34ZA8J3{1 zvmwI968^0rGSRgImXy2V;~hD*Hf>HVueE9O4nZO?Tgx;euPfuy#kO?rZxt);+hE!!wtc!tPyBb?Wc56Z%y$Ex9;wKZ+#5;_XZ*1C)? zxmpsj8HD=;@WF&}lrTtOw$^P#vOQr2;RgZ;w+OLGavO8g=4mn_{Y64qyt!#(HnW+{ eY-W49?Ee9F4{>4p_0Vkq0000 Date: Sun, 10 Nov 2024 19:17:53 +0100 Subject: [PATCH 150/178] Bump version to 5.10.0 --- CMakeLists.txt | 2 +- misc/net.minetest.minetest.metainfo.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e496c0b7c..a23828426 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,7 +16,7 @@ set(VERSION_PATCH 0) set(VERSION_EXTRA "" CACHE STRING "Stuff to append to version string") # Change to false for releases -set(DEVELOPMENT_BUILD TRUE) +set(DEVELOPMENT_BUILD FALSE) set(VERSION_STRING "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}") if(VERSION_EXTRA) diff --git a/misc/net.minetest.minetest.metainfo.xml b/misc/net.minetest.minetest.metainfo.xml index 92f8a80ef..ca61fe80c 100644 --- a/misc/net.minetest.minetest.metainfo.xml +++ b/misc/net.minetest.minetest.metainfo.xml @@ -149,6 +149,6 @@ celeron55@gmail.com - + From 8503d8de5ec536f3d6a0cbc7eca24bcc36b21ef3 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Sun, 10 Nov 2024 19:17:56 +0100 Subject: [PATCH 151/178] Continue with 5.11.0-dev --- CMakeLists.txt | 4 ++-- android/build.gradle | 2 +- doc/client_lua_api.md | 2 +- doc/menu_lua_api.md | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a23828426..de97d49bf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,12 +11,12 @@ set(CLANG_MINIMUM_VERSION "7.0.1") # You should not need to edit these manually, use util/bump_version.sh set(VERSION_MAJOR 5) -set(VERSION_MINOR 10) +set(VERSION_MINOR 11) set(VERSION_PATCH 0) set(VERSION_EXTRA "" CACHE STRING "Stuff to append to version string") # Change to false for releases -set(DEVELOPMENT_BUILD FALSE) +set(DEVELOPMENT_BUILD TRUE) set(VERSION_STRING "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}") if(VERSION_EXTRA) diff --git a/android/build.gradle b/android/build.gradle index 40266815e..a6b9c512d 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -1,7 +1,7 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. project.ext.set("versionMajor", 5) // Version Major -project.ext.set("versionMinor", 10) // Version Minor +project.ext.set("versionMinor", 11) // Version Minor project.ext.set("versionPatch", 0) // Version Patch // ^ keep in sync with cmake diff --git a/doc/client_lua_api.md b/doc/client_lua_api.md index 715f6aa03..fe65dd92e 100644 --- a/doc/client_lua_api.md +++ b/doc/client_lua_api.md @@ -1,4 +1,4 @@ -Luanti Lua Client Modding API Reference 5.10.0 +Luanti Lua Client Modding API Reference 5.11.0 ============================================== **WARNING**: if you're looking for the `minetest` namespace (e.g. `minetest.something`), diff --git a/doc/menu_lua_api.md b/doc/menu_lua_api.md index f69c5917f..ae4afd998 100644 --- a/doc/menu_lua_api.md +++ b/doc/menu_lua_api.md @@ -1,4 +1,4 @@ -Luanti Lua Mainmenu API Reference 5.10.0 +Luanti Lua Mainmenu API Reference 5.11.0 ======================================== Introduction From a5e3fca40c8feb74c91cafca1aef1423e5375bb6 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Sun, 10 Nov 2024 20:22:02 +0100 Subject: [PATCH 152/178] Revert "Disable SDL2 for 5.10.0 (#15284)" This reverts commit 6d7a5197407460515b68e1ca18052c124b2fe15b. --- .github/workflows/windows.yml | 2 +- doc/compiling/linux.md | 12 ++++++------ doc/compiling/windows.md | 3 +-- irr/README.md | 2 +- irr/src/CMakeLists.txt | 2 +- util/buildbot/buildwin32.sh | 1 + util/buildbot/buildwin64.sh | 1 + util/buildbot/common.sh | 3 +++ util/ci/common.sh | 2 +- 9 files changed, 16 insertions(+), 12 deletions(-) diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 670ce12f8..d82b9785d 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -73,7 +73,7 @@ jobs: env: VCPKG_VERSION: 01f602195983451bc83e72f4214af2cbc495aa94 # 2024.05.24 - vcpkg_packages: zlib zstd curl[winssl] openal-soft libvorbis libogg libjpeg-turbo sqlite3 freetype luajit gmp jsoncpp opengl-registry + vcpkg_packages: zlib zstd curl[winssl] openal-soft libvorbis libogg libjpeg-turbo sqlite3 freetype luajit gmp jsoncpp sdl2 strategy: fail-fast: false matrix: diff --git a/doc/compiling/linux.md b/doc/compiling/linux.md index 3b31250e8..573c6908e 100644 --- a/doc/compiling/linux.md +++ b/doc/compiling/linux.md @@ -21,27 +21,27 @@ For Debian/Ubuntu users: - sudo apt install g++ make libc6-dev cmake libpng-dev libjpeg-dev libxi-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev libzstd-dev libluajit-5.1-dev gettext + sudo apt install g++ make libc6-dev cmake libpng-dev libjpeg-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev libzstd-dev libluajit-5.1-dev gettext libsdl2-dev For Fedora users: - sudo dnf install make automake gcc gcc-c++ kernel-devel cmake libcurl-devel openal-soft-devel libpng-devel libjpeg-devel libvorbis-devel libXi-devel libogg-devel freetype-devel mesa-libGL-devel zlib-devel jsoncpp-devel gmp-devel sqlite-devel luajit-devel leveldb-devel ncurses-devel spatialindex-devel libzstd-devel gettext + sudo dnf install make automake gcc gcc-c++ kernel-devel cmake libcurl-devel openal-soft-devel libpng-devel libjpeg-devel libvorbis-devel libogg-devel freetype-devel mesa-libGL-devel zlib-devel jsoncpp-devel gmp-devel sqlite-devel luajit-devel leveldb-devel ncurses-devel spatialindex-devel libzstd-devel gettext SDL2-devel For openSUSE users: - sudo zypper install gcc gcc-c++ cmake libjpeg8-devel libpng16-devel openal-soft-devel libcurl-devel sqlite3-devel luajit-devel libzstd-devel Mesa-libGL-devel libXi-devel libvorbis-devel freetype2-devel + sudo zypper install gcc gcc-c++ cmake libjpeg8-devel libpng16-devel openal-soft-devel libcurl-devel sqlite3-devel luajit-devel libzstd-devel Mesa-libGL-devel libvorbis-devel freetype2-devel SDL2-devel For Arch users: - sudo pacman -S --needed base-devel libcurl-gnutls cmake libxi libpng sqlite libogg libvorbis openal freetype2 jsoncpp gmp luajit leveldb ncurses zstd gettext + sudo pacman -S --needed base-devel libcurl-gnutls cmake libpng sqlite libogg libvorbis openal freetype2 jsoncpp gmp luajit leveldb ncurses zstd gettext sdl2 For Alpine users: - sudo apk add build-base cmake libpng-dev jpeg-dev libxi-dev mesa-dev sqlite-dev libogg-dev libvorbis-dev openal-soft-dev curl-dev freetype-dev zlib-dev gmp-dev jsoncpp-dev luajit-dev zstd-dev gettext + sudo apk add build-base cmake libpng-dev jpeg-dev mesa-dev sqlite-dev libogg-dev libvorbis-dev openal-soft-dev curl-dev freetype-dev zlib-dev gmp-dev jsoncpp-dev luajit-dev zstd-dev gettext sdl2-dev For Void users: - sudo xbps-install cmake libpng-devel jpeg-devel libXi-devel mesa sqlite-devel libogg-devel libvorbis-devel libopenal-devel libcurl-devel freetype-devel zlib-devel gmp-devel jsoncpp-devel LuaJIT-devel zstd libzstd-devel gettext + sudo xbps-install cmake libpng-devel jpeg-devel mesa sqlite-devel libogg-devel libvorbis-devel libopenal-devel libcurl-devel freetype-devel zlib-devel gmp-devel jsoncpp-devel LuaJIT-devel zstd libzstd-devel gettext SDL2-devel ## Download diff --git a/doc/compiling/windows.md b/doc/compiling/windows.md index b36db4d9a..a4d9699f6 100644 --- a/doc/compiling/windows.md +++ b/doc/compiling/windows.md @@ -13,9 +13,8 @@ It is highly recommended to use vcpkg as package manager. After you successfully built vcpkg you can easily install the required libraries: - ```powershell -vcpkg install zlib zstd curl[winssl] openal-soft libvorbis libogg libjpeg-turbo sqlite3 freetype luajit gmp jsoncpp gettext[tools] opengl-registry --triplet x64-windows +vcpkg install zlib zstd curl[winssl] openal-soft libvorbis libogg libjpeg-turbo sqlite3 freetype luajit gmp jsoncpp gettext[tools] sdl2 --triplet x64-windows ``` - `curl` is optional, but required to read the serverlist, `curl[winssl]` is required to use the content store. diff --git a/irr/README.md b/irr/README.md index 25fff00e5..50e7338a5 100644 --- a/irr/README.md +++ b/irr/README.md @@ -21,7 +21,7 @@ Aside from standard search options (`ZLIB_INCLUDE_DIR`, `ZLIB_LIBRARY`, ...) the * `ENABLE_OPENGL` - Enable OpenGL driver * `ENABLE_OPENGL3` (default: `OFF`) - Enable OpenGL 3+ driver * `ENABLE_GLES2` - Enable OpenGL ES 2+ driver -* `USE_SDL2` (default: ON for Android, OFF for other platforms) - Use SDL2 instead of older native device code +* `USE_SDL2` (default: platform-dependent, usually `ON`) - Use SDL2 instead of older native device code However, IrrlichtMt cannot be built or installed separately. diff --git a/irr/src/CMakeLists.txt b/irr/src/CMakeLists.txt index 1d2996734..3b578d699 100644 --- a/irr/src/CMakeLists.txt +++ b/irr/src/CMakeLists.txt @@ -1,6 +1,6 @@ # When enabling SDL2 by default on macOS, don't forget to change # "NSHighResolutionCapable" to true in "Info.plist". -if(ANDROID) +if(NOT APPLE) set(DEFAULT_SDL2 ON) endif() diff --git a/util/buildbot/buildwin32.sh b/util/buildbot/buildwin32.sh index b070a4343..34767f707 100755 --- a/util/buildbot/buildwin32.sh +++ b/util/buildbot/buildwin32.sh @@ -42,6 +42,7 @@ download "$libhost/llvm/libleveldb-$leveldb_version-win32.zip" download "$libhost/llvm/openal-soft-$openal_version-win32.zip" download "$libhost/llvm/libjpeg-$libjpeg_version-win32.zip" download "$libhost/llvm/libpng-$libpng_version-win32.zip" +download "$libhost/llvm/sdl2-$sdl2_version-win32.zip" # Set source dir, downloading Minetest as needed get_sources diff --git a/util/buildbot/buildwin64.sh b/util/buildbot/buildwin64.sh index 541045a02..c63a18901 100755 --- a/util/buildbot/buildwin64.sh +++ b/util/buildbot/buildwin64.sh @@ -42,6 +42,7 @@ download "$libhost/llvm/libleveldb-$leveldb_version-win64.zip" download "$libhost/llvm/openal-soft-$openal_version-win64.zip" download "$libhost/llvm/libjpeg-$libjpeg_version-win64.zip" download "$libhost/llvm/libpng-$libpng_version-win64.zip" +download "$libhost/llvm/sdl2-$sdl2_version-win64.zip" # Set source dir, downloading Minetest as needed get_sources diff --git a/util/buildbot/common.sh b/util/buildbot/common.sh index 32434abdd..ff3aef2e9 100644 --- a/util/buildbot/common.sh +++ b/util/buildbot/common.sh @@ -88,6 +88,9 @@ add_cmake_libs () { -DJPEG_INCLUDE_DIR=$libdir/libjpeg/include -DJPEG_DLL="$(_dlls $libdir/libjpeg/bin/libjpeg*)" + -DCMAKE_PREFIX_PATH=$libdir/sdl2/lib/cmake + -DSDL2_DLL="$(_dlls $libdir/sdl2/bin/*)" + -DZLIB_INCLUDE_DIR=$libdir/zlib/include -DZLIB_LIBRARY=$libdir/zlib/lib/libz.dll.a -DZLIB_DLL=$libdir/zlib/bin/zlib1.dll diff --git a/util/ci/common.sh b/util/ci/common.sh index bd0220db5..201b182f2 100644 --- a/util/ci/common.sh +++ b/util/ci/common.sh @@ -4,7 +4,7 @@ install_linux_deps() { local pkgs=( cmake gettext postgresql - libpng-dev libjpeg-dev libgl1-mesa-dev libxi-dev libfreetype-dev + libpng-dev libjpeg-dev libgl1-mesa-dev libsdl2-dev libfreetype-dev libsqlite3-dev libhiredis-dev libogg-dev libgmp-dev libvorbis-dev libopenal-dev libpq-dev libleveldb-dev libcurl4-openssl-dev libzstd-dev ) From af61de77773b8cbb37fbd888c77421cf63173dd2 Mon Sep 17 00:00:00 2001 From: grorp Date: Tue, 12 Nov 2024 10:52:20 +0100 Subject: [PATCH 153/178] Minor rendering code fixes (#15399) * Fix line numbers in shader errors * Fix uninitialized variables in shadow code --- src/client/shader.cpp | 9 ++++----- src/client/shadows/dynamicshadowsrender.cpp | 5 +++-- src/client/shadows/dynamicshadowsrender.h | 6 +++--- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/client/shader.cpp b/src/client/shader.cpp index a227eb37a..778e17d2d 100644 --- a/src/client/shader.cpp +++ b/src/client/shader.cpp @@ -730,19 +730,18 @@ ShaderInfo ShaderSource::generateShader(const std::string &name, shaders_header << "#define VOLUMETRIC_LIGHT 1\n"; } - shaders_header << "#line 0\n"; // reset the line counter for meaningful diagnostics - std::string common_header = shaders_header.str(); + const char *final_header = "#line 0\n"; // reset the line counter for meaningful diagnostics std::string vertex_shader = m_sourcecache.getOrLoad(name, "opengl_vertex.glsl"); std::string fragment_shader = m_sourcecache.getOrLoad(name, "opengl_fragment.glsl"); std::string geometry_shader = m_sourcecache.getOrLoad(name, "opengl_geometry.glsl"); - vertex_shader = common_header + vertex_header + vertex_shader; - fragment_shader = common_header + fragment_header + fragment_shader; + vertex_shader = common_header + vertex_header + final_header + vertex_shader; + fragment_shader = common_header + fragment_header + final_header + fragment_shader; const char *geometry_shader_ptr = nullptr; // optional if (!geometry_shader.empty()) { - geometry_shader = common_header + geometry_header + geometry_shader; + geometry_shader = common_header + geometry_header + final_header + geometry_shader; geometry_shader_ptr = geometry_shader.c_str(); } diff --git a/src/client/shadows/dynamicshadowsrender.cpp b/src/client/shadows/dynamicshadowsrender.cpp index 909e2761e..466903cbc 100644 --- a/src/client/shadows/dynamicshadowsrender.cpp +++ b/src/client/shadows/dynamicshadowsrender.cpp @@ -21,8 +21,9 @@ ShadowRenderer::ShadowRenderer(IrrlichtDevice *device, Client *client) : m_smgr(device->getSceneManager()), m_driver(device->getVideoDriver()), - m_client(client), m_current_frame(0), - m_perspective_bias_xy(0.8), m_perspective_bias_z(0.5) + m_client(client), m_shadow_strength(0.0f), m_shadow_tint(255, 0, 0, 0), + m_time_day(0.0f), m_force_update_shadow_map(false), m_current_frame(0), + m_perspective_bias_xy(0.8f), m_perspective_bias_z(0.5f) { (void) m_client; diff --git a/src/client/shadows/dynamicshadowsrender.h b/src/client/shadows/dynamicshadowsrender.h index 5395c90b3..a12ba01e4 100644 --- a/src/client/shadows/dynamicshadowsrender.h +++ b/src/client/shadows/dynamicshadowsrender.h @@ -118,11 +118,11 @@ private: std::vector m_shadow_node_array; float m_shadow_strength; - video::SColor m_shadow_tint{ 255, 0, 0, 0 }; + video::SColor m_shadow_tint; float m_shadow_strength_gamma; float m_shadow_map_max_distance; float m_shadow_map_texture_size; - float m_time_day{0.0f}; + float m_time_day; int m_shadow_samples; bool m_shadow_map_texture_32bit; bool m_shadows_enabled; @@ -130,7 +130,7 @@ private: bool m_shadow_map_colored; bool m_force_update_shadow_map; u8 m_map_shadow_update_frames; /* Use this number of frames to update map shaodw */ - u8 m_current_frame{0}; /* Current frame */ + u8 m_current_frame; /* Current frame */ f32 m_perspective_bias_xy; f32 m_perspective_bias_z; From 1c92d6243fd42291d25798982c1dd1f1bd1013bb Mon Sep 17 00:00:00 2001 From: wrrrzr <161970349+wrrrzr@users.noreply.github.com> Date: Tue, 12 Nov 2024 12:52:37 +0300 Subject: [PATCH 154/178] MainMenuManager: fix FIXME (#15414) --- src/client/game.cpp | 3 +-- src/gui/mainmenumanager.h | 8 +++++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/client/game.cpp b/src/client/game.cpp index 27b58334f..f9f175d1b 100644 --- a/src/client/game.cpp +++ b/src/client/game.cpp @@ -1219,8 +1219,7 @@ void Game::shutdown() /* cleanup menus */ while (g_menumgr.menuCount() > 0) { - g_menumgr.m_stack.front()->setVisible(false); - g_menumgr.deletingMenu(g_menumgr.m_stack.front()); + g_menumgr.deleteFront(); } m_game_ui->deleteFormspec(); diff --git a/src/gui/mainmenumanager.h b/src/gui/mainmenumanager.h index a37db2a32..d5f43796d 100644 --- a/src/gui/mainmenumanager.h +++ b/src/gui/mainmenumanager.h @@ -70,6 +70,12 @@ public: return m_stack.size(); } + void deleteFront() + { + m_stack.front()->setVisible(false); + deletingMenu(m_stack.front()); + } + bool pausesGame() { for (gui::IGUIElement *i : m_stack) { @@ -80,7 +86,7 @@ public: return false; } - // FIXME: why isn't this private? +private: std::list m_stack; }; From f916f5de78c970b55257f38e5d66a6ae34be695f Mon Sep 17 00:00:00 2001 From: sfan5 Date: Tue, 5 Nov 2024 19:14:44 +0100 Subject: [PATCH 155/178] Add basic unit tests for collisionMoveSimple --- src/collision.cpp | 6 +- src/collision.h | 8 ++- src/dummymap.h | 14 ++++ src/unittest/test_collision.cpp | 113 ++++++++++++++++++++++++++++++++ 4 files changed, 139 insertions(+), 2 deletions(-) diff --git a/src/collision.cpp b/src/collision.cpp index dcb318b0f..9fd872eb8 100644 --- a/src/collision.cpp +++ b/src/collision.cpp @@ -21,6 +21,8 @@ #warning "-ffast-math is known to cause bugs in collision code, do not use!" #endif +bool g_collision_problems_encountered = false; + namespace { struct NearbyCollisionInfo { @@ -342,6 +344,7 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef, warningstream << "collisionMoveSimple: maximum step interval exceeded," " lost movement details!"<= 100) { - warningstream << "collisionMoveSimple: Loop count exceeded, aborting to avoid infiniite loop" << std::endl; + warningstream << "collisionMoveSimple: Loop count exceeded, aborting to avoid infinite loop" << std::endl; + g_collision_problems_encountered = true; break; } diff --git a/src/collision.h b/src/collision.h index 20dd42201..fa88c469d 100644 --- a/src/collision.h +++ b/src/collision.h @@ -37,6 +37,8 @@ struct CollisionInfo v3f new_pos; v3f old_speed; v3f new_speed; + + // FIXME: this is equivalent to `axis`, why does it exist? int plane = -1; }; @@ -44,12 +46,16 @@ struct collisionMoveResult { collisionMoveResult() = default; - bool touching_ground = false; bool collides = false; + bool touching_ground = false; bool standing_on_object = false; std::vector collisions; }; +/// Status if any problems were ever encountered during collision detection. +/// @warning For unit test use only. +extern bool g_collision_problems_encountered; + /// @brief Moves using a single iteration; speed should not exceed pos_max_d/dtime /// @param self (optional) ActiveObject to ignore in the collision detection. collisionMoveResult collisionMoveSimple(Environment *env,IGameDef *gamedef, diff --git a/src/dummymap.h b/src/dummymap.h index ab36f211b..2da371884 100644 --- a/src/dummymap.h +++ b/src/dummymap.h @@ -24,5 +24,19 @@ public: ~DummyMap() = default; + void fill(v3s16 bpmin, v3s16 bpmax, MapNode n) + { + for (s16 z = bpmin.Z; z <= bpmax.Z; z++) + for (s16 y = bpmin.Y; y <= bpmax.Y; y++) + for (s16 x = bpmin.X; x <= bpmax.X; x++) { + MapBlock *block = getBlockNoCreateNoEx({x, y, z}); + if (block) { + for (size_t i = 0; i < MapBlock::nodecount; i++) + block->getData()[i] = n; + block->expireIsAirCache(); + } + } + } + bool maySaveBlocks() override { return false; } }; diff --git a/src/unittest/test_collision.cpp b/src/unittest/test_collision.cpp index ce2e3933c..0c9ba0798 100644 --- a/src/unittest/test_collision.cpp +++ b/src/unittest/test_collision.cpp @@ -3,6 +3,9 @@ // Copyright (C) 2013 celeron55, Perttu Ahola #include "test.h" +#include "dummymap.h" +#include "environment.h" +#include "irrlicht_changes/printing.h" #include "collision.h" @@ -14,6 +17,7 @@ public: void runTests(IGameDef *gamedef); void testAxisAlignedCollision(); + void testCollisionMoveSimple(IGameDef *gamedef); }; static TestCollision g_test_instance; @@ -21,8 +25,42 @@ static TestCollision g_test_instance; void TestCollision::runTests(IGameDef *gamedef) { TEST(testAxisAlignedCollision); + TEST(testCollisionMoveSimple, gamedef); } +namespace { + class TestEnvironment : public Environment { + DummyMap map; + public: + TestEnvironment(IGameDef *gamedef) + : Environment(gamedef), map(gamedef, {-1, -1, -1}, {1, 1, 1}) + { + map.fill({-1, -1, -1}, {1, 1, 1}, MapNode(CONTENT_AIR)); + } + + void step(f32 dtime) override {} + + Map &getMap() override { return map; } + + void getSelectedActiveObjects(const core::line3d &shootline_on_map, + std::vector &objects, + const std::optional &pointabilities) override {} + }; +} + +#define UASSERTEQ_F(actual, expected) do { \ + f32 a = (actual); \ + f32 e = (expected); \ + UTEST(fabsf(a - e) <= 0.0001f, "actual: %.f expected: %.f", a, e) \ + } while (0) + +#define UASSERTEQ_V3F(actual, expected) do { \ + v3f va = (actual); \ + v3f ve = (expected); \ + UASSERTEQ_F(va.X, ve.X); UASSERTEQ_F(va.Y, ve.Y); UASSERTEQ_F(va.Z, ve.Z); \ + } while (0) + + //////////////////////////////////////////////////////////////////////////////// void TestCollision::testAxisAlignedCollision() @@ -163,3 +201,78 @@ void TestCollision::testAxisAlignedCollision() } } } + +#define fpos(x,y,z) (BS * v3f(x, y, z)) + +void TestCollision::testCollisionMoveSimple(IGameDef *gamedef) +{ + auto env = std::make_unique(gamedef); + g_collision_problems_encountered = false; + + for (s16 x = 0; x < MAP_BLOCKSIZE; x++) + for (s16 z = 0; z < MAP_BLOCKSIZE; z++) + env->getMap().setNode({x, 0, z}, MapNode(t_CONTENT_STONE)); + + const f32 pos_max_d = 0.25f * BS; // ? + v3f pos, speed, accel; + const aabb3f box(fpos(-0.1f, 0, -0.1f), fpos(0.1f, 1.4f, 0.1f)); + collisionMoveResult res; + + /* simple movement with accel */ + pos = fpos(4, 1, 4); + speed = fpos(0, 0, 0); + accel = fpos(0, 1, 0); + res = collisionMoveSimple(env.get(), gamedef, pos_max_d, box, 0.0f, 1.0f, + &pos, &speed, accel); + + UASSERT(!res.touching_ground || !res.collides || !res.standing_on_object); + UASSERT(res.collisions.empty()); + // FIXME: it's easy to tell that this should be y=1.5f, but our code does it wrong. + // It's unclear if/how this will be fixed. + UASSERTEQ_V3F(pos, fpos(4, 2, 4)); + UASSERTEQ_V3F(speed, fpos(0, 1, 0)); + + /* standing on ground */ + pos = fpos(0, 0.5f, 0); + speed = fpos(0, 0, 0); + accel = fpos(0, -9.81f, 0); + res = collisionMoveSimple(env.get(), gamedef, pos_max_d, box, 0.0f, 0.04f, + &pos, &speed, accel); + + UASSERT(res.collides); + UASSERT(res.touching_ground); + UASSERT(!res.standing_on_object); + UASSERTEQ_V3F(pos, fpos(0, 0.5f, 0)); + UASSERTEQ_V3F(speed, fpos(0, 0, 0)); + UASSERT(res.collisions.size() == 1); + { + auto &ci = res.collisions.front(); + UASSERTEQ(int, ci.type, COLLISION_NODE); + UASSERTEQ(int, ci.axis, COLLISION_AXIS_Y); + UASSERTEQ(v3s16, ci.node_p, v3s16(0, 0, 0)); + } + + /* not moving never collides */ + pos = fpos(0, -100, 0); + speed = fpos(0, 0, 0); + accel = fpos(0, 0, 0); + res = collisionMoveSimple(env.get(), gamedef, pos_max_d, box, 0.0f, 1/60.0f, + &pos, &speed, accel); + UASSERT(!res.collides); + + /* collision in ignore */ + pos = fpos(0, -100, 0); + speed = fpos(5, 0, 0); + accel = fpos(0, 0, 0); + res = collisionMoveSimple(env.get(), gamedef, pos_max_d, box, 0.0f, 1/60.0f, + &pos, &speed, accel); + UASSERTEQ_V3F(speed, fpos(0, 0, 0)); + UASSERT(!res.collides); // FIXME this is actually inconsistent + UASSERT(res.collisions.empty()); + + // TODO things to test: + // standing_on_object, multiple collisions, bouncy, stepheight + + // No warnings should have been raised during our test. + UASSERT(!g_collision_problems_encountered); +} From 9a44d835d6380e8e8a8f2b5070899dc8770aa1db Mon Sep 17 00:00:00 2001 From: sfan5 Date: Fri, 8 Nov 2024 15:03:48 +0100 Subject: [PATCH 156/178] Remove redundant CollisionInfo::plane --- src/client/localplayer.cpp | 2 +- src/collision.cpp | 1 - src/collision.h | 7 ++----- 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/src/client/localplayer.cpp b/src/client/localplayer.cpp index 2ea4c5495..4286e48ff 100644 --- a/src/client/localplayer.cpp +++ b/src/client/localplayer.cpp @@ -1196,7 +1196,7 @@ void LocalPlayer::handleAutojump(f32 dtime, Environment *env, bool horizontal_collision = false; for (const auto &colinfo : result.collisions) { - if (colinfo.type == COLLISION_NODE && colinfo.plane != 1) { + if (colinfo.type == COLLISION_NODE && colinfo.axis != COLLISION_AXIS_Y) { horizontal_collision = true; break; // one is enough } diff --git a/src/collision.cpp b/src/collision.cpp index 9fd872eb8..e352b0827 100644 --- a/src/collision.cpp +++ b/src/collision.cpp @@ -509,7 +509,6 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef, info.object = nearest_info.obj; info.new_pos = *pos_f; info.old_speed = *speed_f; - info.plane = nearest_collided; // Set the speed component that caused the collision to zero if (step_up) { diff --git a/src/collision.h b/src/collision.h index fa88c469d..67b4735f4 100644 --- a/src/collision.h +++ b/src/collision.h @@ -12,13 +12,13 @@ class IGameDef; class Environment; class ActiveObject; -enum CollisionType +enum CollisionType : u8 { COLLISION_NODE, COLLISION_OBJECT, }; -enum CollisionAxis +enum CollisionAxis : s8 { COLLISION_AXIS_NONE = -1, COLLISION_AXIS_X, @@ -37,9 +37,6 @@ struct CollisionInfo v3f new_pos; v3f old_speed; v3f new_speed; - - // FIXME: this is equivalent to `axis`, why does it exist? - int plane = -1; }; struct collisionMoveResult From c00129360ee0bb0d001f16c286191611311cdfeb Mon Sep 17 00:00:00 2001 From: sfan5 Date: Mon, 11 Nov 2024 19:46:02 +0100 Subject: [PATCH 157/178] Remove unused pos_max_d --- src/client/clientenvironment.cpp | 6 ++--- src/client/content_cao.cpp | 3 +-- src/client/localplayer.cpp | 43 ++++++++------------------------ src/client/localplayer.h | 13 +++++----- src/client/particles.cpp | 2 +- src/collision.cpp | 2 +- src/collision.h | 5 ++-- src/player.h | 7 ------ src/server/luaentity_sao.cpp | 3 +-- src/serverenvironment.cpp | 15 ----------- src/unittest/test_collision.cpp | 9 +++---- 11 files changed, 29 insertions(+), 79 deletions(-) diff --git a/src/client/clientenvironment.cpp b/src/client/clientenvironment.cpp index b6ae67588..bda9fc870 100644 --- a/src/client/clientenvironment.cpp +++ b/src/client/clientenvironment.cpp @@ -96,7 +96,6 @@ void ClientEnvironment::step(float dtime) /* Maximum position increment */ - //f32 position_max_increment = 0.05*BS; f32 position_max_increment = 0.1*BS; // Maximum time increment (for collision detection etc) @@ -176,12 +175,11 @@ void ClientEnvironment::step(float dtime) } /* - Move the lplayer. + Move the local player. This also does collision detection. */ - lplayer->move(dtime_part, this, position_max_increment, - &player_collisions); + lplayer->move(dtime_part, this, &player_collisions); } bool player_immortal = false; diff --git a/src/client/content_cao.cpp b/src/client/content_cao.cpp index 16ceda4ec..6c7976ea7 100644 --- a/src/client/content_cao.cpp +++ b/src/client/content_cao.cpp @@ -1143,11 +1143,10 @@ void GenericCAO::step(float dtime, ClientEnvironment *env) box.MinEdge *= BS; box.MaxEdge *= BS; collisionMoveResult moveresult; - f32 pos_max_d = BS*0.125; // Distance per iteration v3f p_pos = m_position; v3f p_velocity = m_velocity; moveresult = collisionMoveSimple(env,env->getGameDef(), - pos_max_d, box, m_prop.stepheight, dtime, + box, m_prop.stepheight, dtime, &p_pos, &p_velocity, m_acceleration, this, m_prop.collideWithObjects); // Apply results diff --git a/src/client/localplayer.cpp b/src/client/localplayer.cpp index 4286e48ff..53a9db810 100644 --- a/src/client/localplayer.cpp +++ b/src/client/localplayer.cpp @@ -209,7 +209,7 @@ bool LocalPlayer::updateSneakNode(Map *map, const v3f &position, return true; } -void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d, +void LocalPlayer::move(f32 dtime, Environment *env, std::vector *collision_info) { // Node at feet position, update each ClientEnvironment::step() @@ -218,7 +218,7 @@ void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d, // Temporary option for old move code if (!physics_override.new_move) { - old_move(dtime, env, pos_max_d, collision_info); + old_move(dtime, env, collision_info); return; } @@ -320,17 +320,6 @@ void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d, nodemgr->get(node2.getContent()).climbable) && !free_move; } - /* - Collision uncertainty radius - Make it a bit larger than the maximum distance of movement - */ - //f32 d = pos_max_d * 1.1; - // A fairly large value in here makes moving smoother - f32 d = 0.15f * BS; - - // This should always apply, otherwise there are glitches - sanity_check(d > pos_max_d); - // Player object property step height is multiplied by BS in // /src/script/common/c_content.cpp and /src/content_sao.cpp float player_stepheight = (m_cao == nullptr) ? 0.0f : @@ -341,7 +330,7 @@ void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d, const v3f initial_speed = m_speed; collisionMoveResult result = collisionMoveSimple(env, m_client, - pos_max_d, m_collisionbox, player_stepheight, dtime, + m_collisionbox, player_stepheight, dtime, &position, &m_speed, accel_f, m_cao); bool could_sneak = control.sneak && !free_move && !in_liquid && @@ -528,12 +517,12 @@ void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d, m_can_jump = m_can_jump && jumpspeed != 0.0f; // Autojump - handleAutojump(dtime, env, result, initial_position, initial_speed, pos_max_d); + handleAutojump(dtime, env, result, initial_position, initial_speed); } -void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d) +void LocalPlayer::move(f32 dtime, Environment *env) { - move(dtime, env, pos_max_d, NULL); + move(dtime, env, nullptr); } void LocalPlayer::applyControl(float dtime, Environment *env) @@ -827,7 +816,7 @@ void LocalPlayer::accelerate(const v3f &target_speed, const f32 max_increase_H, } // Temporary option for old move code -void LocalPlayer::old_move(f32 dtime, Environment *env, f32 pos_max_d, +void LocalPlayer::old_move(f32 dtime, Environment *env, std::vector *collision_info) { Map *map = &env->getMap(); @@ -924,15 +913,6 @@ void LocalPlayer::old_move(f32 dtime, Environment *env, f32 pos_max_d, is_climbing = (nodemgr->get(node.getContent()).climbable || nodemgr->get(node2.getContent()).climbable) && !free_move; - /* - Collision uncertainty radius - Make it a bit larger than the maximum distance of movement - */ - //f32 d = pos_max_d * 1.1; - // A fairly large value in here makes moving smoother - f32 d = 0.15f * BS; - // This should always apply, otherwise there are glitches - sanity_check(d > pos_max_d); // Maximum distance over border for sneaking f32 sneak_max = BS * 0.4f; @@ -971,7 +951,7 @@ void LocalPlayer::old_move(f32 dtime, Environment *env, f32 pos_max_d, const v3f initial_speed = m_speed; collisionMoveResult result = collisionMoveSimple(env, m_client, - pos_max_d, m_collisionbox, player_stepheight, dtime, + m_collisionbox, player_stepheight, dtime, &position, &m_speed, accel_f, m_cao); // Position was slightly changed; update standing node pos @@ -1155,7 +1135,7 @@ void LocalPlayer::old_move(f32 dtime, Environment *env, f32 pos_max_d, } // Autojump - handleAutojump(dtime, env, result, initial_position, initial_speed, pos_max_d); + handleAutojump(dtime, env, result, initial_position, initial_speed); } float LocalPlayer::getSlipFactor(Environment *env, const v3f &speedH) @@ -1178,8 +1158,7 @@ float LocalPlayer::getSlipFactor(Environment *env, const v3f &speedH) } void LocalPlayer::handleAutojump(f32 dtime, Environment *env, - const collisionMoveResult &result, const v3f &initial_position, - const v3f &initial_speed, f32 pos_max_d) + const collisionMoveResult &result, v3f initial_position, v3f initial_speed) { PlayerSettings &player_settings = getPlayerSettings(); if (!player_settings.autojump) @@ -1235,7 +1214,7 @@ void LocalPlayer::handleAutojump(f32 dtime, Environment *env, v3f jump_speed = initial_speed; // try at peak of jump, zero step height - collisionMoveResult jump_result = collisionMoveSimple(env, m_client, pos_max_d, + collisionMoveResult jump_result = collisionMoveSimple(env, m_client, m_collisionbox, 0.0f, dtime, &jump_pos, &jump_speed, v3f(0.0f), m_cao); // see if we can get a little bit farther horizontally if we had diff --git a/src/client/localplayer.h b/src/client/localplayer.h index db99d3679..93b768ceb 100644 --- a/src/client/localplayer.h +++ b/src/client/localplayer.h @@ -16,6 +16,7 @@ class GenericCAO; class ClientActiveObject; class ClientEnvironment; class IGameDef; +struct CollisionInfo; struct collisionMoveResult; enum class LocalPlayerAnimation @@ -68,11 +69,8 @@ public: f32 gravity = 0; // total downwards acceleration - void move(f32 dtime, Environment *env, f32 pos_max_d); - void move(f32 dtime, Environment *env, f32 pos_max_d, - std::vector *collision_info); - // Temporary option for old move code - void old_move(f32 dtime, Environment *env, f32 pos_max_d, + void move(f32 dtime, Environment *env); + void move(f32 dtime, Environment *env, std::vector *collision_info); void applyControl(float dtime, Environment *env); @@ -174,10 +172,11 @@ private: const f32 max_increase_V, const bool use_pitch); bool updateSneakNode(Map *map, const v3f &position, const v3f &sneak_max); float getSlipFactor(Environment *env, const v3f &speedH); + void old_move(f32 dtime, Environment *env, + std::vector *collision_info); void handleAutojump(f32 dtime, Environment *env, const collisionMoveResult &result, - const v3f &position_before_move, const v3f &speed_before_move, - f32 pos_max_d); + v3f position_before_move, v3f speed_before_move); v3f m_position; v3s16 m_standing_node; diff --git a/src/client/particles.cpp b/src/client/particles.cpp index 114abba08..6ba7fa701 100644 --- a/src/client/particles.cpp +++ b/src/client/particles.cpp @@ -89,7 +89,7 @@ void Particle::step(float dtime, ClientEnvironment *env) aabb3f box(v3f(-m_p.size / 2.0f), v3f(m_p.size / 2.0f)); v3f p_pos = m_pos * BS; v3f p_velocity = m_velocity * BS; - collisionMoveResult r = collisionMoveSimple(env, env->getGameDef(), BS * 0.5f, + collisionMoveResult r = collisionMoveSimple(env, env->getGameDef(), box, 0.0f, dtime, &p_pos, &p_velocity, m_acceleration * BS, nullptr, m_p.object_collision); diff --git a/src/collision.cpp b/src/collision.cpp index e352b0827..4ee9d5ed8 100644 --- a/src/collision.cpp +++ b/src/collision.cpp @@ -323,7 +323,7 @@ static void add_object_boxes(Environment *env, #define PROFILER_NAME(text) (dynamic_cast(env) ? ("Server: " text) : ("Client: " text)) collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef, - f32 pos_max_d, const aabb3f &box_0, + const aabb3f &box_0, f32 stepheight, f32 dtime, v3f *pos_f, v3f *speed_f, v3f accel_f, ActiveObject *self, diff --git a/src/collision.h b/src/collision.h index 67b4735f4..5306cdd8a 100644 --- a/src/collision.h +++ b/src/collision.h @@ -53,10 +53,9 @@ struct collisionMoveResult /// @warning For unit test use only. extern bool g_collision_problems_encountered; -/// @brief Moves using a single iteration; speed should not exceed pos_max_d/dtime /// @param self (optional) ActiveObject to ignore in the collision detection. -collisionMoveResult collisionMoveSimple(Environment *env,IGameDef *gamedef, - f32 pos_max_d, const aabb3f &box_0, +collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef, + const aabb3f &box_0, f32 stepheight, f32 dtime, v3f *pos_f, v3f *speed_f, v3f accel_f, ActiveObject *self=NULL, diff --git a/src/player.h b/src/player.h index 0af737d32..25c80039c 100644 --- a/src/player.h +++ b/src/player.h @@ -127,7 +127,6 @@ struct PlayerPhysicsOverride }; class Map; -struct CollisionInfo; struct HudElement; class Environment; @@ -140,12 +139,6 @@ public: DISABLE_CLASS_COPY(Player); - virtual void move(f32 dtime, Environment *env, f32 pos_max_d) - {} - virtual void move(f32 dtime, Environment *env, f32 pos_max_d, - std::vector *collision_info) - {} - // in BS-space inline void setSpeed(v3f speed) { diff --git a/src/server/luaentity_sao.cpp b/src/server/luaentity_sao.cpp index 27408565d..5de0167d6 100644 --- a/src/server/luaentity_sao.cpp +++ b/src/server/luaentity_sao.cpp @@ -155,12 +155,11 @@ void LuaEntitySAO::step(float dtime, bool send_recommended) aabb3f box = m_prop.collisionbox; box.MinEdge *= BS; box.MaxEdge *= BS; - f32 pos_max_d = BS*0.25; // Distance per iteration v3f p_pos = m_base_position; v3f p_velocity = m_velocity; v3f p_acceleration = m_acceleration; moveresult = collisionMoveSimple(m_env, m_env->getGameDef(), - pos_max_d, box, m_prop.stepheight, dtime, + box, m_prop.stepheight, dtime, &p_pos, &p_velocity, p_acceleration, this, m_prop.collideWithObjects); moveresult_p = &moveresult; diff --git a/src/serverenvironment.cpp b/src/serverenvironment.cpp index b333a30ec..d60e41ad9 100644 --- a/src/serverenvironment.cpp +++ b/src/serverenvironment.cpp @@ -1404,21 +1404,6 @@ void ServerEnvironment::step(float dtime) m_game_time_fraction_counter -= (float)inc_i; } - /* - Handle players - */ - { - ScopeProfiler sp(g_profiler, "ServerEnv: move players", SPT_AVG); - for (RemotePlayer *player : m_players) { - // Ignore disconnected players - if (player->getPeerId() == PEER_ID_INEXISTENT) - continue; - - // Move - player->move(dtime, this, 100 * BS); - } - } - /* Manage active block list */ diff --git a/src/unittest/test_collision.cpp b/src/unittest/test_collision.cpp index 0c9ba0798..40cd52798 100644 --- a/src/unittest/test_collision.cpp +++ b/src/unittest/test_collision.cpp @@ -213,7 +213,6 @@ void TestCollision::testCollisionMoveSimple(IGameDef *gamedef) for (s16 z = 0; z < MAP_BLOCKSIZE; z++) env->getMap().setNode({x, 0, z}, MapNode(t_CONTENT_STONE)); - const f32 pos_max_d = 0.25f * BS; // ? v3f pos, speed, accel; const aabb3f box(fpos(-0.1f, 0, -0.1f), fpos(0.1f, 1.4f, 0.1f)); collisionMoveResult res; @@ -222,7 +221,7 @@ void TestCollision::testCollisionMoveSimple(IGameDef *gamedef) pos = fpos(4, 1, 4); speed = fpos(0, 0, 0); accel = fpos(0, 1, 0); - res = collisionMoveSimple(env.get(), gamedef, pos_max_d, box, 0.0f, 1.0f, + res = collisionMoveSimple(env.get(), gamedef, box, 0.0f, 1.0f, &pos, &speed, accel); UASSERT(!res.touching_ground || !res.collides || !res.standing_on_object); @@ -236,7 +235,7 @@ void TestCollision::testCollisionMoveSimple(IGameDef *gamedef) pos = fpos(0, 0.5f, 0); speed = fpos(0, 0, 0); accel = fpos(0, -9.81f, 0); - res = collisionMoveSimple(env.get(), gamedef, pos_max_d, box, 0.0f, 0.04f, + res = collisionMoveSimple(env.get(), gamedef, box, 0.0f, 0.04f, &pos, &speed, accel); UASSERT(res.collides); @@ -256,7 +255,7 @@ void TestCollision::testCollisionMoveSimple(IGameDef *gamedef) pos = fpos(0, -100, 0); speed = fpos(0, 0, 0); accel = fpos(0, 0, 0); - res = collisionMoveSimple(env.get(), gamedef, pos_max_d, box, 0.0f, 1/60.0f, + res = collisionMoveSimple(env.get(), gamedef, box, 0.0f, 1/60.0f, &pos, &speed, accel); UASSERT(!res.collides); @@ -264,7 +263,7 @@ void TestCollision::testCollisionMoveSimple(IGameDef *gamedef) pos = fpos(0, -100, 0); speed = fpos(5, 0, 0); accel = fpos(0, 0, 0); - res = collisionMoveSimple(env.get(), gamedef, pos_max_d, box, 0.0f, 1/60.0f, + res = collisionMoveSimple(env.get(), gamedef, box, 0.0f, 1/60.0f, &pos, &speed, accel); UASSERTEQ_V3F(speed, fpos(0, 0, 0)); UASSERT(!res.collides); // FIXME this is actually inconsistent From 44b261d136fb0cbad5a971b0cb5a7d4803995b0b Mon Sep 17 00:00:00 2001 From: cx384 Date: Tue, 12 Nov 2024 10:53:04 +0100 Subject: [PATCH 158/178] Luacheck: add VoxelManip to globals --- .luacheckrc | 1 + games/devtest/.luacheckrc | 1 + 2 files changed, 2 insertions(+) diff --git a/.luacheckrc b/.luacheckrc index afc136c7c..3a4667b4a 100644 --- a/.luacheckrc +++ b/.luacheckrc @@ -15,6 +15,7 @@ read_globals = { "fgettext", "fgettext_ne", "vector", "VoxelArea", + "VoxelManip", "profiler", "Settings", "PerlinNoise", "PerlinNoiseMap", diff --git a/games/devtest/.luacheckrc b/games/devtest/.luacheckrc index 261cacf56..c5a7119a4 100644 --- a/games/devtest/.luacheckrc +++ b/games/devtest/.luacheckrc @@ -23,6 +23,7 @@ read_globals = { "fgettext", "fgettext_ne", "vector", "VoxelArea", + "VoxelManip", "profiler", "Settings", "check", From 4c44942a39f61f7a87a4f4ddecbad8cec441057f Mon Sep 17 00:00:00 2001 From: Erich Schubert Date: Tue, 12 Nov 2024 10:53:17 +0100 Subject: [PATCH 159/178] Add weights to biomes (#15142) --- builtin/game/features.lua | 1 + doc/lua_api.md | 6 ++++++ src/mapgen/mg_biome.cpp | 6 +++++- src/mapgen/mg_biome.h | 1 + src/script/lua_api/l_mapgen.cpp | 1 + 5 files changed, 14 insertions(+), 1 deletion(-) diff --git a/builtin/game/features.lua b/builtin/game/features.lua index 88ec282c3..8d7753839 100644 --- a/builtin/game/features.lua +++ b/builtin/game/features.lua @@ -43,6 +43,7 @@ core.features = { hotbar_hud_element = true, bulk_lbms = true, abm_without_neighbors = true, + biome_weights = true, } function core.has_feature(arg) diff --git a/doc/lua_api.md b/doc/lua_api.md index e27964fc5..ba3a0e630 100644 --- a/doc/lua_api.md +++ b/doc/lua_api.md @@ -5657,6 +5657,8 @@ Utilities bulk_lbms = true, -- ABM supports field without_neighbors (5.10.0) abm_without_neighbors = true, + -- biomes have a weight parameter (5.11.0) + biome_weights = true, } ``` @@ -10709,6 +10711,10 @@ performance and computing power the practical limit is much lower. -- distribution of the biomes. -- Heat and humidity have average values of 50, vary mostly between -- 0 and 100 but can exceed these values. + + weight = 1.0, + -- Relative weight of the biome in the Voronoi diagram. + -- A value of 0 (or less) is ignored and equivalent to 1.0. } ``` diff --git a/src/mapgen/mg_biome.cpp b/src/mapgen/mg_biome.cpp index 40e6aeda9..a1c4f5810 100644 --- a/src/mapgen/mg_biome.cpp +++ b/src/mapgen/mg_biome.cpp @@ -39,6 +39,7 @@ BiomeManager::BiomeManager(Server *server) : b->heat_point = 0.0; b->humidity_point = 0.0; b->vertical_blend = 0; + b->weight = 1.0f; b->m_nodenames.emplace_back("mapgen_stone"); b->m_nodenames.emplace_back("mapgen_stone"); @@ -256,7 +257,9 @@ Biome *BiomeGenOriginal::calcBiomeFromNoise(float heat, float humidity, v3s16 po float d_heat = heat - b->heat_point; float d_humidity = humidity - b->humidity_point; - float dist = (d_heat * d_heat) + (d_humidity * d_humidity); + float dist = ((d_heat * d_heat) + (d_humidity * d_humidity)); + if (b->weight > 0.f) + dist /= b->weight; if (pos.Y <= b->max_pos.Y) { // Within y limits of biome b if (dist < dist_min) { @@ -321,6 +324,7 @@ ObjDef *Biome::clone() const obj->heat_point = heat_point; obj->humidity_point = humidity_point; obj->vertical_blend = vertical_blend; + obj->weight = weight; return obj; } diff --git a/src/mapgen/mg_biome.h b/src/mapgen/mg_biome.h index c23dab2aa..3e9de89d9 100644 --- a/src/mapgen/mg_biome.h +++ b/src/mapgen/mg_biome.h @@ -54,6 +54,7 @@ public: float heat_point; float humidity_point; s16 vertical_blend; + float weight; virtual void resolveNodeNames(); }; diff --git a/src/script/lua_api/l_mapgen.cpp b/src/script/lua_api/l_mapgen.cpp index 0e9c15a1b..c8b412c73 100644 --- a/src/script/lua_api/l_mapgen.cpp +++ b/src/script/lua_api/l_mapgen.cpp @@ -374,6 +374,7 @@ Biome *read_biome_def(lua_State *L, int index, const NodeDefManager *ndef) b->heat_point = getfloatfield_default(L, index, "heat_point", 0.f); b->humidity_point = getfloatfield_default(L, index, "humidity_point", 0.f); b->vertical_blend = getintfield_default(L, index, "vertical_blend", 0); + b->weight = getfloatfield_default(L, index, "weight", 1.f); b->flags = 0; // reserved b->min_pos = getv3s16field_default( From 1fd4e0b82dd4e15aef0025eccdcb3bc984f70d9d Mon Sep 17 00:00:00 2001 From: sfan5 Date: Sun, 3 Nov 2024 14:24:35 +0100 Subject: [PATCH 160/178] Refactor ScriptApiSecurity for cleaner separation of concerns --- src/script/common/c_internal.cpp | 10 +- src/script/common/c_internal.h | 1 + src/script/cpp_api/s_async.h | 8 +- src/script/cpp_api/s_base.cpp | 33 +----- src/script/cpp_api/s_base.h | 20 ++-- src/script/cpp_api/s_security.cpp | 183 +++++++++++++++++++----------- src/script/cpp_api/s_security.h | 68 +++++++++-- src/script/lua_api/l_util.cpp | 13 +-- src/script/scripting_client.h | 12 ++ src/script/scripting_emerge.h | 7 ++ src/script/scripting_server.h | 9 ++ 11 files changed, 229 insertions(+), 135 deletions(-) diff --git a/src/script/common/c_internal.cpp b/src/script/common/c_internal.cpp index ae6b5cc23..eb74bfa8e 100644 --- a/src/script/common/c_internal.cpp +++ b/src/script/common/c_internal.cpp @@ -3,6 +3,7 @@ // Copyright (C) 2013 celeron55, Perttu Ahola #include "common/c_internal.h" +#include "cpp_api/s_security.h" #include "util/numeric.h" #include "debug.h" #include "log.h" @@ -184,12 +185,9 @@ void log_deprecated(lua_State *L, std::string_view message, int stack_depth, boo void call_string_dump(lua_State *L, int idx) { - // Retrieve string.dump from insecure env to avoid it being tampered with - lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_GLOBALS_BACKUP); - if (!lua_isnil(L, -1)) - lua_getfield(L, -1, "string"); - else - lua_getglobal(L, "string"); + // Retrieve string.dump from untampered env + ScriptApiSecurity::getGlobalsBackup(L); + lua_getfield(L, -1, "string"); lua_getfield(L, -1, "dump"); lua_remove(L, -2); // remove _G lua_remove(L, -2); // remove 'string' table diff --git a/src/script/common/c_internal.h b/src/script/common/c_internal.h index e0b30044b..ce948801b 100644 --- a/src/script/common/c_internal.h +++ b/src/script/common/c_internal.h @@ -39,6 +39,7 @@ enum { #endif CUSTOM_RIDX_SCRIPTAPI, + /// @warning don't use directly, `ScriptApiSecurity` has wrappers CUSTOM_RIDX_GLOBALS_BACKUP, CUSTOM_RIDX_CURRENT_MOD_NAME, CUSTOM_RIDX_ERROR_HANDLER, diff --git a/src/script/cpp_api/s_async.h b/src/script/cpp_api/s_async.h index 3dc339821..8a081b2fc 100644 --- a/src/script/cpp_api/s_async.h +++ b/src/script/cpp_api/s_async.h @@ -50,11 +50,17 @@ class AsyncWorkerThread : public Thread, public: virtual ~AsyncWorkerThread(); - void *run(); + void *run() override; protected: AsyncWorkerThread(AsyncEngine* jobDispatcher, const std::string &name); + bool checkPathInternal(const std::string &abs_path, bool write_required, + bool *write_allowed) override { + return ScriptApiSecurity::checkPathWithGamedef(getStack(), + abs_path, write_required, write_allowed); + }; + private: AsyncEngine *jobDispatcher = nullptr; bool isErrored = false; diff --git a/src/script/cpp_api/s_base.cpp b/src/script/cpp_api/s_base.cpp index d04419302..9cf886efd 100644 --- a/src/script/cpp_api/s_base.cpp +++ b/src/script/cpp_api/s_base.cpp @@ -225,37 +225,6 @@ std::string ScriptApiBase::getCurrentModNameInsecure(lua_State *L) return ret; } -std::string ScriptApiBase::getCurrentModName(lua_State *L) -{ - auto script = ModApiBase::getScriptApiBase(L); - if (script->getType() == ScriptingType::Async || - script->getType() == ScriptingType::Emerge) - { - // As a precaution never return a "secure" mod name in the async and - // emerge environment, because these currently do not track mod origins - // in a spoof-safe way (see l_register_async_dofile and l_register_mapgen_script). - return ""; - } - - // We have to make sure that this function is being called directly by - // a mod, otherwise a malicious mod could override a function and - // steal its return value. (e.g. request_insecure_environment) - lua_Debug info; - - // Make sure there's only one item below this function on the stack... - if (lua_getstack(L, 2, &info)) - return ""; - FATAL_ERROR_IF(!lua_getstack(L, 1, &info), "lua_getstack() failed"); - FATAL_ERROR_IF(!lua_getinfo(L, "S", &info), "lua_getinfo() failed"); - - // ...and that that item is the main file scope. - if (strcmp(info.what, "main") != 0) - return ""; - - // at this point we can trust this value: - return getCurrentModNameInsecure(L); -} - void ScriptApiBase::loadMod(const std::string &script_path, const std::string &mod_name) { @@ -273,7 +242,7 @@ void ScriptApiBase::loadScript(const std::string &script_path) int error_handler = PUSH_ERROR_HANDLER(L); bool ok; - if (m_secure) { + if (ScriptApiSecurity::isSecure(L)) { ok = ScriptApiSecurity::safeLoadFile(L, script_path.c_str()); } else { ok = !luaL_loadfile(L, script_path.c_str()); diff --git a/src/script/cpp_api/s_base.h b/src/script/cpp_api/s_base.h index b08a887f0..34ac22595 100644 --- a/src/script/cpp_api/s_base.h +++ b/src/script/cpp_api/s_base.h @@ -101,17 +101,15 @@ public: void setOriginDirect(const char *origin); void setOriginFromTableRaw(int index, const char *fxn); - // Returns the currently running mod, only during init time. - // The reason this is "insecure" is that mods can mess with each others code, - // so the boundary of who is responsible is fuzzy. - // Note: checking this against BUILTIN_MOD_NAME is always safe (not spoofable). - // returns "" on error + /** + * Returns the currently running mod, only during init time. + * The reason this is insecure is that mods can mess with each others code, + * so the boundary of who is responsible is fuzzy. + * @note Checking this against BUILTIN_MOD_NAME is always safe (not spoofable). + * @note See ScriptApiSecurity::getCurrentModName() for the secure equivalent. + * @return mod name or "" on error + */ static std::string getCurrentModNameInsecure(lua_State *L); - // Returns the currently running mod, only during init time. - // This checks the Lua stack to only permit direct calls in the file - // scope. That way it is assured that it's really the mod it claims to be. - // returns "" on error - static std::string getCurrentModName(lua_State *L); #if !CHECK_CLIENT_BUILD() inline void clientOpenLibs(lua_State *L) { assert(false); } @@ -171,7 +169,7 @@ protected: std::recursive_mutex m_luastackmutex; std::string m_last_run_mod; - bool m_secure = false; + #ifdef SCRIPTAPI_LOCK_DEBUG int m_lock_recursion_count{}; std::thread::id m_owning_thread; diff --git a/src/script/cpp_api/s_security.cpp b/src/script/cpp_api/s_security.cpp index b23e94cd2..ef882a1f6 100644 --- a/src/script/cpp_api/s_security.cpp +++ b/src/script/cpp_api/s_security.cpp @@ -260,6 +260,8 @@ void ScriptApiSecurity::initializeSecurity() lua_pop(L, 1); // Pop empty string } +#if CHECK_CLIENT_BUILD() + void ScriptApiSecurity::initializeSecurityClient() { static const char *whitelist[] = { @@ -375,6 +377,8 @@ void ScriptApiSecurity::initializeSecurityClient() setLuaEnv(L, thread); } +#endif + int ScriptApiSecurity::getThread(lua_State *L) { #if LUA_VERSION_NUM <= 501 @@ -408,19 +412,24 @@ void ScriptApiSecurity::setLuaEnv(lua_State *L, int thread) bool ScriptApiSecurity::isSecure(lua_State *L) { -#if CHECK_CLIENT_BUILD() - auto script = ModApiBase::getScriptApiBase(L); - // CSM keeps no globals backup but is always secure - if (script->getType() == ScriptingType::Client) - return true; -#endif - lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_GLOBALS_BACKUP); - bool secure = !lua_isnil(L, -1); - lua_pop(L, 1); - return secure; + auto *script = ModApiBase::getScriptApiBase(L); + if (auto *sec = dynamic_cast(script)) + return sec->m_secure; + return false; } -bool ScriptApiSecurity::safeLoadString(lua_State *L, const std::string &code, const char *chunk_name) +void ScriptApiSecurity::getGlobalsBackup(lua_State *L) +{ + if (!ScriptApiSecurity::isSecure(L)) { + lua_getglobal(L, "_G"); + return; + } + lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_GLOBALS_BACKUP); + // We cannot fulfill the callers wish securely if they don't exist. + FATAL_ERROR_IF(lua_isnil(L, -1), "Globals backup requested, but it is not available. Cannot proceed securely."); +} + +bool ScriptApiSecurity::safeLoadString(lua_State *L, std::string_view code, const char *chunk_name) { if (code.size() > 0 && code[0] == LUA_SIGNATURE[0]) { lua_pushliteral(L, "Bytecode prohibited when mod security is enabled."); @@ -441,7 +450,7 @@ bool ScriptApiSecurity::safeLoadFile(lua_State *L, const char *path, const char fp = stdin; chunk_name = const_cast("=stdin"); } else { - fp = fopen(path, "rb"); + fp = std::fopen(path, "rb"); if (!fp) { lua_pushfstring(L, "%s: %s", path, strerror(errno)); return false; @@ -500,7 +509,35 @@ bool ScriptApiSecurity::safeLoadFile(lua_State *L, const char *path, const char } -bool checkModNameWhitelisted(const std::string &mod_name, const std::string &setting) +std::string ScriptApiSecurity::getCurrentModName(lua_State *L) +{ + auto *script = ModApiBase::getScriptApiBase(L); + + auto *sec = dynamic_cast(script); + if (sec && !sec->modNamesAreTrusted()) + return ""; + + // We have to make sure that this function is being called directly by + // a mod, otherwise a malicious mod could override a function and + // steal its return value. (e.g. request_insecure_environment) + lua_Debug info; + + // Make sure there's only one item below this function on the stack... + if (lua_getstack(L, 2, &info)) + return ""; + FATAL_ERROR_IF(!lua_getstack(L, 1, &info), "lua_getstack() failed"); + FATAL_ERROR_IF(!lua_getinfo(L, "S", &info), "lua_getinfo() failed"); + + // ...and that that item is the main file scope. + if (strcmp(info.what, "main") != 0) + return ""; + + // at this point we can trust this value: + return getCurrentModNameInsecure(L); +} + + +static bool checkModNameWhitelisted(const std::string &mod_name, const std::string &setting) { assert(str_starts_with(setting, "secure.")); @@ -517,7 +554,7 @@ bool checkModNameWhitelisted(const std::string &mod_name, const std::string &set bool ScriptApiSecurity::checkWhitelisted(lua_State *L, const std::string &setting) { - std::string mod_name = ScriptApiBase::getCurrentModName(L); + std::string mod_name = getCurrentModName(L); return checkModNameWhitelisted(mod_name, setting); } @@ -528,16 +565,8 @@ bool ScriptApiSecurity::checkPath(lua_State *L, const char *path, if (write_allowed) *write_allowed = false; - std::string str; // Transient - std::string abs_path = fs::AbsolutePath(path); - if (!abs_path.empty()) { - // Don't allow accessing the settings file - str = fs::AbsolutePath(g_settings_path); - if (str == abs_path) return false; - } - // If we couldn't find the absolute path (path doesn't exist) then // try removing the last components until it works (to allow // non-existent files/folders for mkdir). @@ -560,61 +589,84 @@ bool ScriptApiSecurity::checkPath(lua_State *L, const char *path, } if (abs_path.empty()) return false; - // Add the removed parts back so that you can't, eg, create a + // Add the removed parts back so that you can e.g. create a // directory in worldmods if worldmods doesn't exist. if (!removed.empty()) abs_path += DIR_DELIM + removed; - // Get gamedef from registry - ScriptApiBase *script = ModApiBase::getScriptApiBase(L); - const IGameDef *gamedef = script->getGameDef(); + tracestream << "ScriptApiSecurity: path \"" << path << "\" resolved to \"" + << abs_path << "\"" << std::endl; + + // Ask the environment-specific implementation + auto *sec = ModApiBase::getScriptApi(L); + return sec->checkPathInternal(abs_path, write_required, write_allowed); +} + + +bool ScriptApiSecurity::checkPathWithGamedef(lua_State *L, + const std::string &abs_path, bool write_required, bool *write_allowed) +{ + const auto &set_write_allowed = [&] (bool v) { + if (write_allowed) + *write_allowed = v; + }; + std::string str; // Transient + + auto *gamedef = ModApiBase::getGameDef(L); if (!gamedef) return false; + if (!abs_path.empty()) { + // Don't allow accessing the settings file + str = fs::AbsolutePath(g_settings_path); + if (str == abs_path) + return false; + } + // Get mod name std::string mod_name = ScriptApiBase::getCurrentModNameInsecure(L); if (!mod_name.empty()) { // Builtin can access anything if (mod_name == BUILTIN_MOD_NAME) { - if (write_allowed) *write_allowed = true; + set_write_allowed(true); return true; } + } - // Allow paths in mod path - // Don't bother if write access isn't important, since it will be handled later - if (write_required || write_allowed != NULL) { - const ModSpec *mod = gamedef->getModSpec(mod_name); - if (mod) { - str = fs::AbsolutePath(mod->path); - if (!str.empty() && fs::PathStartsWith(abs_path, str)) { - // `mod_name` cannot be trusted here, so we catch the scenarios where this becomes a problem: - bool is_trusted = checkModNameWhitelisted(mod_name, "secure.trusted_mods") || - checkModNameWhitelisted(mod_name, "secure.http_mods"); - std::string filename = lowercase(fs::GetFilenameFromPath(abs_path.c_str())); - // By writing to any of these a malicious mod could turn itself into - // an existing trusted mod by renaming or becoming a modpack. - bool is_dangerous_file = filename == "mod.conf" || - filename == "modpack.conf" || - filename == "modpack.txt"; - if (write_required) { - if (is_trusted) { - throw LuaError( - "Unable to write to a trusted or http mod's directory. " - "For data storage consider minetest.get_mod_data_path() or minetest.get_worldpath() instead."); - } else if (is_dangerous_file) { - throw LuaError( - "Unable to write to special file for security reasons"); - } else { - const char *message = - "Writing to mod directories is deprecated, as any changes " - "will be overwritten when updating content. " - "For data storage consider minetest.get_mod_data_path() or minetest.get_worldpath() instead."; - log_deprecated(L, message, 1); - } + // Allow paths in mod path + // Don't bother if write access isn't important, since it will be handled later + if (write_required || write_allowed) { + const ModSpec *mod = gamedef->getModSpec(mod_name); + if (mod) { + str = fs::AbsolutePath(mod->path); + if (!str.empty() && fs::PathStartsWith(abs_path, str)) { + // `mod_name` cannot be trusted here, so we catch the scenarios where this becomes a problem: + bool is_trusted = checkModNameWhitelisted(mod_name, "secure.trusted_mods") || + checkModNameWhitelisted(mod_name, "secure.http_mods"); + std::string filename = lowercase(fs::GetFilenameFromPath(abs_path.c_str())); + // By writing to any of these a malicious mod could turn itself into + // an existing trusted mod by renaming or becoming a modpack. + bool is_dangerous_file = filename == "mod.conf" || + filename == "modpack.conf" || + filename == "modpack.txt"; + if (write_required) { + if (is_trusted) { + throw LuaError( + "Unable to write to a trusted or http mod's directory. " + "For data storage consider minetest.get_mod_data_path() or minetest.get_worldpath() instead."); + } else if (is_dangerous_file) { + throw LuaError( + "Unable to write to special file for security reasons"); + } else { + const char *message = + "Writing to mod directories is deprecated, as any changes " + "will be overwritten when updating content. " + "For data storage consider minetest.get_mod_data_path() or minetest.get_worldpath() instead."; + log_deprecated(L, message, 1); } - if (write_allowed) *write_allowed = !is_trusted && !is_dangerous_file; - return true; } + set_write_allowed(!is_trusted && !is_dangerous_file); + return true; } } } @@ -624,9 +676,8 @@ bool ScriptApiSecurity::checkPath(lua_State *L, const char *path, const SubgameSpec *game_spec = gamedef->getGameSpec(); if (game_spec && !game_spec->path.empty()) { str = fs::AbsolutePath(game_spec->path); - if (!str.empty() && fs::PathStartsWith(abs_path, str)) { + if (!str.empty() && fs::PathStartsWith(abs_path, str)) return true; - } } } @@ -635,16 +686,15 @@ bool ScriptApiSecurity::checkPath(lua_State *L, const char *path, const std::vector &mods = gamedef->getMods(); for (const ModSpec &mod : mods) { str = fs::AbsolutePath(mod.path); - if (!str.empty() && fs::PathStartsWith(abs_path, str)) { + if (!str.empty() && fs::PathStartsWith(abs_path, str)) return true; - } } } // Allow read/write access to all mod common dirs str = fs::AbsolutePath(gamedef->getModDataPath()); if (!str.empty() && fs::PathStartsWith(abs_path, str)) { - if (write_allowed) *write_allowed = true; + set_write_allowed(true); return true; } @@ -662,12 +712,11 @@ bool ScriptApiSecurity::checkPath(lua_State *L, const char *path, } // Allow all other paths in world path if (fs::PathStartsWith(abs_path, str)) { - if (write_allowed) *write_allowed = true; + set_write_allowed(true); return true; } } - // Default to disallowing return false; } diff --git a/src/script/cpp_api/s_security.h b/src/script/cpp_api/s_security.h index 91d5dce54..1241b0b06 100644 --- a/src/script/cpp_api/s_security.h +++ b/src/script/cpp_api/s_security.h @@ -12,10 +12,12 @@ throw LuaError(std::string("Mod security: Blocked attempted ") + \ (write_required ? "write to " : "read from ") + path); \ } + #define CHECK_SECURE_PATH(L, path, write_required) \ if (ScriptApiSecurity::isSecure(L)) { \ - CHECK_SECURE_PATH_INTERNAL(L, path, write_required, NULL); \ + CHECK_SECURE_PATH_INTERNAL(L, path, write_required, nullptr); \ } + #define CHECK_SECURE_PATH_POSSIBLE_WRITE(L, path, ptr) \ if (ScriptApiSecurity::isSecure(L)) { \ CHECK_SECURE_PATH_INTERNAL(L, path, false, ptr); \ @@ -27,19 +29,65 @@ class ScriptApiSecurity : virtual public ScriptApiBase public: // Sets up security on the ScriptApi's Lua state void initializeSecurity(); +#if CHECK_CLIENT_BUILD() void initializeSecurityClient(); +#else + inline void initializeSecurityClient() { assert(0); } +#endif + // Checks if the Lua state has been secured static bool isSecure(lua_State *L); - // Loads a string as Lua code safely (doesn't allow bytecode). - static bool safeLoadString(lua_State *L, const std::string &code, const char *chunk_name); - // Loads a file as Lua code safely (doesn't allow bytecode). - static bool safeLoadFile(lua_State *L, const char *path, const char *display_name = NULL); - // Check if mod is whitelisted in the given setting - // This additionally checks that the mod's main file scope is executing. + // Leaves the untampered globals (table) on top of the stack + static void getGlobalsBackup(lua_State *L); + + /// Loads a string as Lua code safely (doesn't allow bytecode). + static bool safeLoadString(lua_State *L, std::string_view code, const char *chunk_name); + /// Loads a file as Lua code safely (doesn't allow bytecode). + /// @warning path is not validated in any way + static bool safeLoadFile(lua_State *L, const char *path, const char *display_name = nullptr); + + /** + * Returns the currently running mod, only during init time. + * This checks the Lua stack to only permit direct calls in the file + * scope. That way it is assured that it's really the mod it claims to be. + * @return mod name or "" on error + */ + static std::string getCurrentModName(lua_State *L); + /// Check if mod is whitelisted in the given setting. + /// This additionally does main scope checks (see above method). + /// @note check is performed even in non-secured Lua state static bool checkWhitelisted(lua_State *L, const std::string &setting); - // Checks if mods are allowed to read (and optionally write) to the path + + /// Checks if mods are allowed to read (and optionally write) to the path + /// @note invalid to call in non-secured Lua state static bool checkPath(lua_State *L, const char *path, bool write_required, - bool *write_allowed=NULL); + bool *write_allowed = nullptr); + +protected: + // To be implemented by descendants: + + /** + * Specify if the mod names during init time(!) can be trusted. + * It needs to be assured that no tampering happens before any call to `loadMod()`. + * @note disabling this implies that mod whitelisting never works + * @return boolean value + */ + virtual bool modNamesAreTrusted() { return false; } + + /** + * Should check if the given path may be accessed. + * If `write_required` is true test for write access, if false test for read access. + * @param abs_path absolute file/directory path, may not exist + * @param write_required was write access requested? + * @param write_allowed output parameter (nullable): set to true if writing is allowed + * @return true if access is allowed + */ + virtual bool checkPathInternal(const std::string &abs_path, bool write_required, + bool *write_allowed) = 0; + + // Ready-made implementation of `checkPathInternal` suitable for server-related uses + static bool checkPathWithGamedef(lua_State *L, const std::string &abs_path, + bool write_required, bool *write_allowed); private: int getThread(lua_State *L); @@ -48,6 +96,8 @@ private: // creates an empty Lua environment void createEmptyEnv(lua_State *L); + bool m_secure = false; + // Syntax: "sl_" '_' // (sl stands for Secure Lua) diff --git a/src/script/lua_api/l_util.cpp b/src/script/lua_api/l_util.cpp index e464cb3a2..cfea974b3 100644 --- a/src/script/lua_api/l_util.cpp +++ b/src/script/lua_api/l_util.cpp @@ -494,18 +494,13 @@ int ModApiUtil::l_request_insecure_environment(lua_State *L) { NO_MAP_LOCK_REQUIRED; - // Just return _G if security is disabled - if (!ScriptApiSecurity::isSecure(L)) { - lua_getglobal(L, "_G"); - return 1; - } - - if (!ScriptApiSecurity::checkWhitelisted(L, "secure.trusted_mods")) { - return 0; + if (ScriptApiSecurity::isSecure(L)) { + if (!ScriptApiSecurity::checkWhitelisted(L, "secure.trusted_mods")) + return 0; } // Push insecure environment - lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_GLOBALS_BACKUP); + ScriptApiSecurity::getGlobalsBackup(L); return 1; } diff --git a/src/script/scripting_client.h b/src/script/scripting_client.h index cfe4133c7..872ad295a 100644 --- a/src/script/scripting_client.h +++ b/src/script/scripting_client.h @@ -5,6 +5,8 @@ #pragma once +#include + #include "cpp_api/s_base.h" #include "cpp_api/s_client.h" #include "cpp_api/s_modchannels.h" @@ -27,6 +29,16 @@ public: void on_camera_ready(Camera *camera); void on_minimap_ready(Minimap *minimap); +protected: + // from ScriptApiSecurity: + bool checkPathInternal(const std::string &abs_path, bool write_required, + bool *write_allowed) override { + warningstream << "IO API called in client scripting" << std::endl; + assert(0); + return false; + } + bool modNamesAreTrusted() override { return true; } + private: virtual void InitializeModApi(lua_State *L, int top); }; diff --git a/src/script/scripting_emerge.h b/src/script/scripting_emerge.h index 8f3c7c348..8e645fd9d 100644 --- a/src/script/scripting_emerge.h +++ b/src/script/scripting_emerge.h @@ -17,6 +17,13 @@ class EmergeScripting: public: EmergeScripting(EmergeThread *parent); +protected: + bool checkPathInternal(const std::string &abs_path, bool write_required, + bool *write_allowed) override { + return ScriptApiSecurity::checkPathWithGamedef(getStack(), + abs_path, write_required, write_allowed); + }; + private: void InitializeModApi(lua_State *L, int top); }; diff --git a/src/script/scripting_server.h b/src/script/scripting_server.h index 54093e84a..6c0583553 100644 --- a/src/script/scripting_server.h +++ b/src/script/scripting_server.h @@ -50,6 +50,15 @@ public: u32 queueAsync(std::string &&serialized_func, PackedValue *param, const std::string &mod_origin); +protected: + // from ScriptApiSecurity: + bool checkPathInternal(const std::string &abs_path, bool write_required, + bool *write_allowed) override { + return ScriptApiSecurity::checkPathWithGamedef(getStack(), + abs_path, write_required, write_allowed); + } + bool modNamesAreTrusted() override { return true; } + private: void InitializeModApi(lua_State *L, int top); From ea4ae55e24d2c27524490cb8e0d3c34aa46e3da3 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Sun, 3 Nov 2024 16:53:01 +0100 Subject: [PATCH 161/178] Implement script sandboxing for main menu --- builtin/mainmenu/async_event.lua | 7 +- builtin/mainmenu/content/contentdb.lua | 36 +++---- builtin/mainmenu/init.lua | 1 + src/script/cpp_api/s_async.cpp | 25 ++++- src/script/cpp_api/s_async.h | 5 +- src/script/cpp_api/s_security.cpp | 1 + src/script/lua_api/l_mainmenu.cpp | 129 +++++++++---------------- src/script/lua_api/l_mainmenu.h | 8 -- src/script/scripting_mainmenu.cpp | 43 ++++++++- src/script/scripting_mainmenu.h | 17 +++- 10 files changed, 146 insertions(+), 126 deletions(-) diff --git a/builtin/mainmenu/async_event.lua b/builtin/mainmenu/async_event.lua index 04bfb78d6..2358ee70e 100644 --- a/builtin/mainmenu/async_event.lua +++ b/builtin/mainmenu/async_event.lua @@ -11,11 +11,6 @@ end core.async_event_handler = handle_job function core.handle_async(func, parameter, callback) - -- Serialize function - local serialized_func = string.dump(func) - - assert(serialized_func ~= nil) - -- Serialize parameters local serialized_param = core.serialize(parameter) @@ -23,7 +18,7 @@ function core.handle_async(func, parameter, callback) return false end - local jobid = core.do_async_callback(serialized_func, serialized_param) + local jobid = core.do_async_callback(func, serialized_param) core.async_jobs[jobid] = callback diff --git a/builtin/mainmenu/content/contentdb.lua b/builtin/mainmenu/content/contentdb.lua index c352a260b..963400a12 100644 --- a/builtin/mainmenu/content/contentdb.lua +++ b/builtin/mainmenu/content/contentdb.lua @@ -392,7 +392,7 @@ function contentdb.resolve_dependencies(package, game, callback) end -local function fetch_pkgs(params) +local function fetch_pkgs() local version = core.get_version() local base_url = core.settings:get("contentdb_url") local url = base_url .. @@ -429,41 +429,43 @@ local function fetch_pkgs(params) if not packages or #packages == 0 then return end - local aliases = {} + return packages +end + + +function contentdb.set_packages_from_api(packages) + contentdb.package_by_id = {} + contentdb.aliases = {} for _, package in pairs(packages) do - package.id = params.calculate_package_id(package.type, package.author, package.name) + package.id = contentdb.calculate_package_id(package.type, package.author, package.name) package.url_part = core.urlencode(package.author) .. "/" .. core.urlencode(package.name) + contentdb.package_by_id[package.id] = package + if package.aliases then for _, alias in ipairs(package.aliases) do -- We currently don't support name changing local suffix = "/" .. package.name if alias:sub(-#suffix) == suffix then - aliases[alias:lower()] = package.id + contentdb.aliases[alias:lower()] = package.id end end end end - return { packages = packages, aliases = aliases } + contentdb.load_ok = true + contentdb.load_error = false + contentdb.packages = packages + contentdb.packages_full = packages + contentdb.packages_full_unordered = packages end - function contentdb.fetch_pkgs(callback) contentdb.loading = true - core.handle_async(fetch_pkgs, { calculate_package_id = contentdb.calculate_package_id }, function(result) + core.handle_async(fetch_pkgs, nil, function(result) if result then - contentdb.load_ok = true - contentdb.load_error = false - contentdb.packages = result.packages - contentdb.packages_full = result.packages - contentdb.packages_full_unordered = result.packages - contentdb.aliases = result.aliases - - for _, package in ipairs(result.packages) do - contentdb.package_by_id[package.id] = package - end + contentdb.set_packages_from_api(result) else contentdb.load_error = true end diff --git a/builtin/mainmenu/init.lua b/builtin/mainmenu/init.lua index fc237e158..41519b2ee 100644 --- a/builtin/mainmenu/init.lua +++ b/builtin/mainmenu/init.lua @@ -133,4 +133,5 @@ local function init_globals() check_new_version() end +assert(os.execute == nil) init_globals() diff --git a/src/script/cpp_api/s_async.cpp b/src/script/cpp_api/s_async.cpp index f55082308..4cb46f6bb 100644 --- a/src/script/cpp_api/s_async.cpp +++ b/src/script/cpp_api/s_async.cpp @@ -14,10 +14,14 @@ extern "C" { #include "server.h" #include "s_async.h" #include "log.h" +#include "config.h" #include "filesys.h" #include "porting.h" #include "common/c_internal.h" #include "common/c_packer.h" +#if CHECK_CLIENT_BUILD() +#include "script/scripting_mainmenu.h" +#endif #include "lua_api/l_base.h" /******************************************************************************/ @@ -256,7 +260,6 @@ bool AsyncEngine::prepareEnvironment(lua_State* L, int top) return true; } -/******************************************************************************/ AsyncWorkerThread::AsyncWorkerThread(AsyncEngine* jobDispatcher, const std::string &name) : ScriptApiBase(ScriptingType::Async), @@ -270,6 +273,8 @@ AsyncWorkerThread::AsyncWorkerThread(AsyncEngine* jobDispatcher, if (g_settings->getBool("secure.enable_security")) initializeSecurity(); + } else { + initializeSecurity(); } // Prepare job lua environment @@ -287,13 +292,27 @@ AsyncWorkerThread::AsyncWorkerThread(AsyncEngine* jobDispatcher, lua_pop(L, 1); } -/******************************************************************************/ AsyncWorkerThread::~AsyncWorkerThread() { sanity_check(!isRunning()); } -/******************************************************************************/ +bool AsyncWorkerThread::checkPathInternal(const std::string &abs_path, + bool write_required, bool *write_allowed) +{ + auto *L = getStack(); + // dispatch to the right implementation. this should be refactored some day... + if (jobDispatcher->server) { + return ScriptApiSecurity::checkPathWithGamedef(L, abs_path, write_required, write_allowed); + } else { +#if CHECK_CLIENT_BUILD() + return MainMenuScripting::checkPathAccess(abs_path, write_required, write_allowed); +#else + FATAL_ERROR("should never get here"); +#endif + } +} + void* AsyncWorkerThread::run() { if (isErrored) diff --git a/src/script/cpp_api/s_async.h b/src/script/cpp_api/s_async.h index 8a081b2fc..d2a6913ef 100644 --- a/src/script/cpp_api/s_async.h +++ b/src/script/cpp_api/s_async.h @@ -56,10 +56,7 @@ protected: AsyncWorkerThread(AsyncEngine* jobDispatcher, const std::string &name); bool checkPathInternal(const std::string &abs_path, bool write_required, - bool *write_allowed) override { - return ScriptApiSecurity::checkPathWithGamedef(getStack(), - abs_path, write_required, write_allowed); - }; + bool *write_allowed) override; private: AsyncEngine *jobDispatcher = nullptr; diff --git a/src/script/cpp_api/s_security.cpp b/src/script/cpp_api/s_security.cpp index ef882a1f6..40a95ca1a 100644 --- a/src/script/cpp_api/s_security.cpp +++ b/src/script/cpp_api/s_security.cpp @@ -66,6 +66,7 @@ void ScriptApiSecurity::initializeSecurity() "core", "collectgarbage", "DIR_DELIM", + "PLATFORM", "error", "getfenv", "getmetatable", diff --git a/src/script/lua_api/l_mainmenu.cpp b/src/script/lua_api/l_mainmenu.cpp index 69f63d964..e8c969268 100644 --- a/src/script/lua_api/l_mainmenu.cpp +++ b/src/script/lua_api/l_mainmenu.cpp @@ -343,6 +343,8 @@ int ModApiMainMenu::l_get_content_info(lua_State *L) { std::string path = luaL_checkstring(L, 1); + CHECK_SECURE_PATH(L, path.c_str(), false) + ContentSpec spec; spec.path = path; parseContentInfo(spec); @@ -410,6 +412,8 @@ int ModApiMainMenu::l_check_mod_configuration(lua_State *L) { std::string worldpath = luaL_checkstring(L, 1); + CHECK_SECURE_PATH(L, worldpath.c_str(), false) + ModConfiguration modmgr; // Add all game mods @@ -732,15 +736,13 @@ int ModApiMainMenu::l_get_temp_path(lua_State *L) } /******************************************************************************/ -int ModApiMainMenu::l_create_dir(lua_State *L) { +int ModApiMainMenu::l_create_dir(lua_State *L) +{ const char *path = luaL_checkstring(L, 1); - if (ModApiMainMenu::mayModifyPath(path)) { - lua_pushboolean(L, fs::CreateAllDirs(path)); - return 1; - } + CHECK_SECURE_PATH(L, path, true) - lua_pushboolean(L, false); + lua_pushboolean(L, fs::CreateAllDirs(path)); return 1; } @@ -749,14 +751,9 @@ int ModApiMainMenu::l_delete_dir(lua_State *L) { const char *path = luaL_checkstring(L, 1); - std::string absolute_path = fs::RemoveRelativePathComponents(path); + CHECK_SECURE_PATH(L, path, true) - if (ModApiMainMenu::mayModifyPath(absolute_path)) { - lua_pushboolean(L, fs::RecursiveDelete(absolute_path)); - return 1; - } - - lua_pushboolean(L, false); + lua_pushboolean(L, fs::RecursiveDelete(path)); return 1; } @@ -766,24 +763,16 @@ int ModApiMainMenu::l_copy_dir(lua_State *L) const char *source = luaL_checkstring(L, 1); const char *destination = luaL_checkstring(L, 2); - bool keep_source = true; - if (!lua_isnoneornil(L, 3)) - keep_source = readParam(L, 3); + bool keep_source = readParam(L, 3, true); - std::string abs_destination = fs::RemoveRelativePathComponents(destination); - std::string abs_source = fs::RemoveRelativePathComponents(source); - - if (!ModApiMainMenu::mayModifyPath(abs_destination) || - (!keep_source && !ModApiMainMenu::mayModifyPath(abs_source))) { - lua_pushboolean(L, false); - return 1; - } + CHECK_SECURE_PATH(L, source, !keep_source) + CHECK_SECURE_PATH(L, destination, true) bool retval; if (keep_source) - retval = fs::CopyDir(abs_source, abs_destination); + retval = fs::CopyDir(source, destination); else - retval = fs::MoveDir(abs_source, abs_destination); + retval = fs::MoveDir(source, destination); lua_pushboolean(L, retval); return 1; } @@ -793,6 +782,8 @@ int ModApiMainMenu::l_is_dir(lua_State *L) { const char *path = luaL_checkstring(L, 1); + CHECK_SECURE_PATH(L, path, false) + lua_pushboolean(L, fs::IsDir(path)); return 1; } @@ -803,16 +794,12 @@ int ModApiMainMenu::l_extract_zip(lua_State *L) const char *zipfile = luaL_checkstring(L, 1); const char *destination = luaL_checkstring(L, 2); - std::string absolute_destination = fs::RemoveRelativePathComponents(destination); + CHECK_SECURE_PATH(L, zipfile, false) + CHECK_SECURE_PATH(L, destination, true) - if (ModApiMainMenu::mayModifyPath(absolute_destination)) { - auto fs = RenderingEngine::get_raw_device()->getFileSystem(); - bool ok = fs::extractZipFile(fs, zipfile, destination); - lua_pushboolean(L, ok); - return 1; - } - - lua_pushboolean(L,false); + auto fs = RenderingEngine::get_raw_device()->getFileSystem(); + bool ok = fs::extractZipFile(fs, zipfile, destination); + lua_pushboolean(L, ok); return 1; } @@ -826,40 +813,13 @@ int ModApiMainMenu::l_get_mainmenu_path(lua_State *L) return 1; } -/******************************************************************************/ -bool ModApiMainMenu::mayModifyPath(std::string path) -{ - path = fs::RemoveRelativePathComponents(path); - - if (fs::PathStartsWith(path, fs::TempPath())) - return true; - - std::string path_user = fs::RemoveRelativePathComponents(porting::path_user); - - if (fs::PathStartsWith(path, path_user + DIR_DELIM "client")) - return true; - if (fs::PathStartsWith(path, path_user + DIR_DELIM "games")) - return true; - if (fs::PathStartsWith(path, path_user + DIR_DELIM "mods")) - return true; - if (fs::PathStartsWith(path, path_user + DIR_DELIM "textures")) - return true; - if (fs::PathStartsWith(path, path_user + DIR_DELIM "worlds")) - return true; - - if (fs::PathStartsWith(path, fs::RemoveRelativePathComponents(porting::path_cache))) - return true; - - return false; -} - - /******************************************************************************/ int ModApiMainMenu::l_may_modify_path(lua_State *L) { const char *target = luaL_checkstring(L, 1); - std::string absolute_destination = fs::RemoveRelativePathComponents(target); - lua_pushboolean(L, ModApiMainMenu::mayModifyPath(absolute_destination)); + bool write_allowed = false; + bool ok = ScriptApiSecurity::checkPath(L, target, false, &write_allowed); + lua_pushboolean(L, ok && write_allowed); return 1; } @@ -892,19 +852,9 @@ int ModApiMainMenu::l_download_file(lua_State *L) const char *url = luaL_checkstring(L, 1); const char *target = luaL_checkstring(L, 2); - //check path - std::string absolute_destination = fs::RemoveRelativePathComponents(target); + CHECK_SECURE_PATH(L, target, true) - if (ModApiMainMenu::mayModifyPath(absolute_destination)) { - if (GUIEngine::downloadFile(url,absolute_destination)) { - lua_pushboolean(L,true); - return 1; - } - } else { - errorstream << "DOWNLOAD denied: " << absolute_destination - << " isn't an allowed path" << std::endl; - } - lua_pushboolean(L,false); + lua_pushboolean(L, GUIEngine::downloadFile(url, target)); return 1; } @@ -1068,16 +1018,22 @@ int ModApiMainMenu::l_open_url_dialog(lua_State *L) /******************************************************************************/ int ModApiMainMenu::l_open_dir(lua_State *L) { - std::string path = luaL_checkstring(L, 1); - lua_pushboolean(L, porting::open_directory(path)); + const char *target = luaL_checkstring(L, 1); + + CHECK_SECURE_PATH(L, target, false) + + lua_pushboolean(L, porting::open_directory(target)); return 1; } /******************************************************************************/ int ModApiMainMenu::l_share_file(lua_State *L) { + const char *path = luaL_checkstring(L, 1); + + CHECK_SECURE_PATH(L, path, false) + #ifdef __ANDROID__ - std::string path = luaL_checkstring(L, 1); porting::shareFileAndroid(path); lua_pushboolean(L, true); #else @@ -1091,19 +1047,20 @@ int ModApiMainMenu::l_do_async_callback(lua_State *L) { MainMenuScripting *script = getScriptApi(L); - size_t func_length, param_length; - const char* serialized_func_raw = luaL_checklstring(L, 1, &func_length); - const char* serialized_param_raw = luaL_checklstring(L, 2, ¶m_length); + luaL_checktype(L, 1, LUA_TFUNCTION); + call_string_dump(L, 1); + size_t func_length; + const char *serialized_func_raw = lua_tolstring(L, -1, &func_length); - sanity_check(serialized_func_raw != NULL); - sanity_check(serialized_param_raw != NULL); + size_t param_length; + const char* serialized_param_raw = luaL_checklstring(L, 2, ¶m_length); u32 jobId = script->queueAsync( std::string(serialized_func_raw, func_length), std::string(serialized_param_raw, param_length)); + lua_settop(L, 0); lua_pushinteger(L, jobId); - return 1; } diff --git a/src/script/lua_api/l_mainmenu.h b/src/script/lua_api/l_mainmenu.h index 25ea551bc..d0f72b6c4 100644 --- a/src/script/lua_api/l_mainmenu.h +++ b/src/script/lua_api/l_mainmenu.h @@ -37,14 +37,6 @@ private: */ static int getBoolData(lua_State *L, const std::string &name ,bool& valid); - /** - * Checks if a path may be modified. Paths in the temp directory or the user - * games, mods, textures, or worlds directories may be modified. - * @param path path to check - * @return true if the path may be modified - */ - static bool mayModifyPath(std::string path); - //api calls static int l_start(lua_State *L); diff --git a/src/script/scripting_mainmenu.cpp b/src/script/scripting_mainmenu.cpp index 17e2ebb1e..d5434c325 100644 --- a/src/script/scripting_mainmenu.cpp +++ b/src/script/scripting_mainmenu.cpp @@ -12,11 +12,14 @@ #include "lua_api/l_util.h" #include "lua_api/l_settings.h" #include "log.h" +#include "filesys.h" +#include "porting.h" extern "C" { #include "lualib.h" } -#define MAINMENU_NUM_ASYNC_THREADS 4 + +#define MAINMENU_NUM_ASYNC_THREADS 2 MainMenuScripting::MainMenuScripting(GUIEngine* guiengine): @@ -26,6 +29,8 @@ MainMenuScripting::MainMenuScripting(GUIEngine* guiengine): SCRIPTAPI_PRECHECKHEADER + initializeSecurity(); + lua_getglobal(L, "core"); int top = lua_gettop(L); @@ -69,6 +74,42 @@ void MainMenuScripting::registerLuaClasses(lua_State *L, int top) MainMenuSoundHandle::Register(L); } +bool MainMenuScripting::mayModifyPath(const std::string &path) +{ + if (fs::PathStartsWith(path, fs::TempPath())) + return true; + + std::string path_user = fs::RemoveRelativePathComponents(porting::path_user); + + if (fs::PathStartsWith(path, path_user + DIR_DELIM "client")) + return true; + if (fs::PathStartsWith(path, path_user + DIR_DELIM "games")) + return true; + if (fs::PathStartsWith(path, path_user + DIR_DELIM "mods")) + return true; + if (fs::PathStartsWith(path, path_user + DIR_DELIM "textures")) + return true; + if (fs::PathStartsWith(path, path_user + DIR_DELIM "worlds")) + return true; + + if (fs::PathStartsWith(path, fs::RemoveRelativePathComponents(porting::path_cache))) + return true; + + return false; +} + +bool MainMenuScripting::checkPathAccess(const std::string &abs_path, bool write_required, + bool *write_allowed) +{ + if (mayModifyPath(abs_path)) { + if (write_allowed) + *write_allowed = true; + return true; + } + // TODO?: global read access sounds too broad + return !write_required; +} + void MainMenuScripting::beforeClose() { SCRIPTAPI_PRECHECKHEADER diff --git a/src/script/scripting_mainmenu.h b/src/script/scripting_mainmenu.h index 8b7c0cfe8..f56c67727 100644 --- a/src/script/scripting_mainmenu.h +++ b/src/script/scripting_mainmenu.h @@ -6,6 +6,7 @@ #include "cpp_api/s_base.h" #include "cpp_api/s_mainmenu.h" +#include "cpp_api/s_security.h" #include "cpp_api/s_async.h" /*****************************************************************************/ @@ -14,7 +15,8 @@ class MainMenuScripting : virtual public ScriptApiBase, - public ScriptApiMainMenu + public ScriptApiMainMenu, + public ScriptApiSecurity { public: MainMenuScripting(GUIEngine* guiengine); @@ -29,6 +31,19 @@ public: u32 queueAsync(std::string &&serialized_func, std::string &&serialized_param); + // Is the main menu allowed writeable access to this path? + static bool mayModifyPath(const std::string &path); + + // (public implementation so it can be used from AsyncEngine) + static bool checkPathAccess(const std::string &abs_path, bool write_required, + bool *write_allowed); + +protected: + bool checkPathInternal(const std::string &abs_path, bool write_required, + bool *write_allowed) override { + return checkPathAccess(abs_path, write_required, write_allowed); + } + private: void initializeModApi(lua_State *L, int top); static void registerLuaClasses(lua_State *L, int top); From 11e04ec1136f9cd37817a2e129770fe463f2aea1 Mon Sep 17 00:00:00 2001 From: grorp Date: Wed, 13 Nov 2024 14:23:13 +0100 Subject: [PATCH 162/178] Replace forgotten SEvent memset --- irr/src/CIrrDeviceSDL.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/irr/src/CIrrDeviceSDL.cpp b/irr/src/CIrrDeviceSDL.cpp index 60cf54d04..408027761 100644 --- a/irr/src/CIrrDeviceSDL.cpp +++ b/irr/src/CIrrDeviceSDL.cpp @@ -713,7 +713,7 @@ bool CIrrDeviceSDL::run() while (!Close && wrap_PollEvent(&SDL_event)) { // os::Printer::log("event: ", core::stringc((int)SDL_event.type).c_str(), ELL_INFORMATION); // just for debugging - memset(&irrevent, 0, sizeof(irrevent)); + irrevent = {}; switch (SDL_event.type) { case SDL_MOUSEMOTION: { From 0fde9ab7e84490914a7e22fe674f1de237c3a674 Mon Sep 17 00:00:00 2001 From: veprogames <75524847+veprogames@users.noreply.github.com> Date: Wed, 13 Nov 2024 14:23:39 +0100 Subject: [PATCH 163/178] Change minetest.net to luanti.org in 'Further documentation' --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9eecbfc19..b21153d54 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ Table of Contents Further documentation ---------------------- -- Website: https://www.minetest.net/ +- Website: https://www.luanti.org/ - Wiki: https://wiki.minetest.net/ - Forum: https://forum.luanti.org/ - GitHub: https://github.com/minetest/minetest/ From 794aea8e92b9f06d3118f65223729b92b505568a Mon Sep 17 00:00:00 2001 From: sfan5 Date: Wed, 13 Nov 2024 14:24:01 +0100 Subject: [PATCH 164/178] Drop fixed pipeline support code (#15421) OpenGL 2.0 is now mandatory. --- builtin/mainmenu/settings/dlg_settings.lua | 12 +-- .../settings/shader_warning_component.lua | 26 ------- builtin/settingtypes.txt | 76 +++++++------------ doc/android.md | 26 ++----- doc/developing/os-compatibility.md | 9 +-- irr/src/COpenGLExtensionHandler.cpp | 6 +- src/client/clouds.cpp | 22 ++---- src/client/clouds.h | 2 +- src/client/content_cao.cpp | 42 ++-------- src/client/content_cao.h | 2 - src/client/content_mapblock.cpp | 20 ++--- src/client/content_mapblock.h | 3 - src/client/hud.cpp | 14 +--- src/client/mapblock_mesh.cpp | 59 ++------------ src/client/mapblock_mesh.h | 13 +--- src/client/mesh_generator_thread.cpp | 3 +- src/client/mesh_generator_thread.h | 2 - src/client/minimap.cpp | 3 +- src/client/minimap.h | 1 - src/client/render/plain.cpp | 6 +- src/client/shader.cpp | 25 ++---- src/client/shadows/dynamicshadowsrender.cpp | 24 ++---- src/client/sky.cpp | 15 +--- src/client/sky.h | 1 - src/client/tile.h | 1 - src/client/wieldmesh.cpp | 31 +++----- src/client/wieldmesh.h | 3 +- src/defaultsettings.cpp | 2 - src/environment.cpp | 3 +- src/environment.h | 1 - src/gui/guiScene.cpp | 5 -- src/nodedef.cpp | 61 +++------------ src/nodedef.h | 3 +- src/unittest/test_content_mapblock.cpp | 4 +- util/test_multiplayer.sh | 2 +- 35 files changed, 117 insertions(+), 411 deletions(-) delete mode 100644 builtin/mainmenu/settings/shader_warning_component.lua diff --git a/builtin/mainmenu/settings/dlg_settings.lua b/builtin/mainmenu/settings/dlg_settings.lua index 57e5a1300..dbd77a4db 100644 --- a/builtin/mainmenu/settings/dlg_settings.lua +++ b/builtin/mainmenu/settings/dlg_settings.lua @@ -19,8 +19,6 @@ local component_funcs = dofile(core.get_mainmenu_path() .. DIR_DELIM .. "settings" .. DIR_DELIM .. "components.lua") -local shader_warning_component = dofile(core.get_mainmenu_path() .. DIR_DELIM .. - "settings" .. DIR_DELIM .. "shader_warning_component.lua") local shadows_component = dofile(core.get_mainmenu_path() .. DIR_DELIM .. "settings" .. DIR_DELIM .. "shadows_component.lua") @@ -154,12 +152,7 @@ local function load() table.insert(page_by_id.controls_keyboard_and_mouse.content, 1, change_keys) do - local content = page_by_id.graphics_and_audio_graphics.content - table.insert(content, 1, shader_warning_component) - - content = page_by_id.graphics_and_audio_effects.content - table.insert(content, 1, shader_warning_component) - + local content = page_by_id.graphics_and_audio_effects.content local idx = table.indexof(content, "enable_dynamic_shadows") table.insert(content, idx, shadows_component) @@ -348,7 +341,6 @@ local function check_requirements(name, requires) end local video_driver = core.get_active_driver() - local shaders_support = video_driver == "opengl" or video_driver == "opengl3" or video_driver == "ogles2" local touch_support = core.irrlicht_device_supports_touch() local touch_controls = core.settings:get("touch_controls") local special = { @@ -359,8 +351,6 @@ local function check_requirements(name, requires) -- be used, so we show settings for both. touchscreen = touch_support and (touch_controls == "auto" or core.is_yes(touch_controls)), keyboard_mouse = not touch_support or (touch_controls == "auto" or not core.is_yes(touch_controls)), - shaders_support = shaders_support, - shaders = core.settings:get_bool("enable_shaders") and shaders_support, opengl = video_driver == "opengl", gles = video_driver:sub(1, 5) == "ogles", } diff --git a/builtin/mainmenu/settings/shader_warning_component.lua b/builtin/mainmenu/settings/shader_warning_component.lua deleted file mode 100644 index b227bcee3..000000000 --- a/builtin/mainmenu/settings/shader_warning_component.lua +++ /dev/null @@ -1,26 +0,0 @@ --- Luanti --- SPDX-License-Identifier: LGPL-2.1-or-later - -return { - query_text = "Shaders", - requires = { - shaders_support = true, - shaders = false, - }, - full_width = true, - get_formspec = function(self, avail_w) - local fs = { - "box[0,0;", avail_w, ",1.2;", mt_color_orange, "]", - "label[0.2,0.4;", fgettext("Shaders are disabled."), "]", - "label[0.2,0.8;", fgettext("This is not a recommended configuration."), "]", - "button[", avail_w - 2.2, ",0.2;2,0.8;fix_shader_warning;", fgettext("Enable"), "]", - } - return table.concat(fs, ""), 1.2 - end, - on_submit = function(self, fields) - if fields.fix_shader_warning then - core.settings:remove("enable_shaders") -- default value is true - return true - end - end, -} diff --git a/builtin/settingtypes.txt b/builtin/settingtypes.txt index 728eaf425..71d976ec7 100644 --- a/builtin/settingtypes.txt +++ b/builtin/settingtypes.txt @@ -61,7 +61,7 @@ # # # This is a comment # # -# # Requires: shaders, enable_dynamic_shadows, !enable_waving_leaves +# # Requires: enable_dynamic_shadows, !enable_waving_leaves # name (Readable name) type type_args # # A requirement can be the name of a boolean setting or an engine-defined value. @@ -69,8 +69,6 @@ # # * The value of a boolean setting, such as enable_dynamic_shadows # * An engine-defined value: -# * shaders_support (a video driver that supports shaders, may not be enabled) -# * shaders (both enable_shaders and shaders_support) # * desktop / android # * touchscreen / keyboard_mouse # * opengl / gles @@ -277,7 +275,6 @@ undersampling (Undersampling) int 1 1 8 # - topbottom: split screen top/bottom. # - sidebyside: split screen side by side. # - crossview: Cross-eyed 3d -# Note that the interlaced mode requires shaders to be enabled. 3d_mode (3D mode) enum none none,anaglyph,interlaced,topbottom,sidebyside,crossview # Strength of 3D mode parallax. @@ -416,11 +413,11 @@ anisotropic_filter (Anisotropic filtering) bool false # Smoothens out block edges but does not affect the insides of textures. # A restart is required to change this option. # -# * FXAA - Fast approximate antialiasing (requires shaders) +# * FXAA - Fast approximate antialiasing # Applies a post-processing filter to detect and smoothen high-contrast edges. # Provides balance between speed and image quality. # -# * SSAA - Super-sampling antialiasing (requires shaders) +# * SSAA - Super-sampling antialiasing # Renders higher-resolution image of the scene, then scales down to reduce # the aliasing effects. This is the slowest and the most accurate method. antialiasing (Antialiasing method) enum none none,fsaa,fxaa,ssaa @@ -473,18 +470,12 @@ enable_particles (Digging particles) bool true [**Waving Nodes] # Set to true to enable waving leaves. -# -# Requires: shaders enable_waving_leaves (Waving leaves) bool false # Set to true to enable waving plants. -# -# Requires: shaders enable_waving_plants (Waving plants) bool false # Set to true to enable waving liquids (like water). -# -# Requires: shaders enable_waving_water (Waving liquids) bool false # The maximum height of the surface of waving liquids. @@ -492,70 +483,70 @@ enable_waving_water (Waving liquids) bool false # 0.0 = Wave doesn't move at all. # Default is 1.0 (1/2 node). # -# Requires: shaders, enable_waving_water +# Requires: enable_waving_water water_wave_height (Waving liquids wave height) float 1.0 0.0 4.0 # Length of liquid waves. # -# Requires: shaders, enable_waving_water +# Requires: enable_waving_water water_wave_length (Waving liquids wavelength) float 20.0 0.1 # How fast liquid waves will move. Higher = faster. # If negative, liquid waves will move backwards. # -# Requires: shaders, enable_waving_water +# Requires: enable_waving_water water_wave_speed (Waving liquids wave speed) float 5.0 [**Dynamic shadows] # Set to true to enable Shadow Mapping. # -# Requires: shaders, opengl +# Requires: opengl enable_dynamic_shadows (Dynamic shadows) bool false # Set the shadow strength gamma. # Adjusts the intensity of in-game dynamic shadows. # Lower value means lighter shadows, higher value means darker shadows. # -# Requires: shaders, enable_dynamic_shadows, opengl +# Requires: enable_dynamic_shadows, opengl shadow_strength_gamma (Shadow strength gamma) float 1.0 0.1 10.0 # Maximum distance to render shadows. # -# Requires: shaders, enable_dynamic_shadows, opengl +# Requires: enable_dynamic_shadows, opengl shadow_map_max_distance (Shadow map max distance in nodes to render shadows) float 140.0 10.0 1000.0 # Texture size to render the shadow map on. # This must be a power of two. # Bigger numbers create better shadows but it is also more expensive. # -# Requires: shaders, enable_dynamic_shadows, opengl +# Requires: enable_dynamic_shadows, opengl shadow_map_texture_size (Shadow map texture size) int 2048 128 8192 # Sets shadow texture quality to 32 bits. # On false, 16 bits texture will be used. # This can cause much more artifacts in the shadow. # -# Requires: shaders, enable_dynamic_shadows, opengl +# Requires: enable_dynamic_shadows, opengl shadow_map_texture_32bit (Shadow map texture in 32 bits) bool true # Enable Poisson disk filtering. # On true uses Poisson disk to make "soft shadows". Otherwise uses PCF filtering. # -# Requires: shaders, enable_dynamic_shadows, opengl +# Requires: enable_dynamic_shadows, opengl shadow_poisson_filter (Poisson filtering) bool true # Define shadow filtering quality. # This simulates the soft shadows effect by applying a PCF or Poisson disk # but also uses more resources. # -# Requires: shaders, enable_dynamic_shadows, opengl +# Requires: enable_dynamic_shadows, opengl shadow_filters (Shadow filter quality) enum 1 0,1,2 # Enable colored shadows. # On true translucent nodes cast colored shadows. This is expensive. # -# Requires: shaders, enable_dynamic_shadows, opengl +# Requires: enable_dynamic_shadows, opengl shadow_map_color (Colored shadows) bool false # Spread a complete update of shadow map over given number of frames. @@ -563,28 +554,26 @@ shadow_map_color (Colored shadows) bool false # will consume more resources. # Minimum value: 1; maximum value: 16 # -# Requires: shaders, enable_dynamic_shadows, opengl +# Requires: enable_dynamic_shadows, opengl shadow_update_frames (Map shadows update frames) int 8 1 16 # Set the soft shadow radius size. # Lower values mean sharper shadows, bigger values mean softer shadows. # Minimum value: 1.0; maximum value: 15.0 # -# Requires: shaders, enable_dynamic_shadows, opengl +# Requires: enable_dynamic_shadows, opengl shadow_soft_radius (Soft shadow radius) float 5.0 1.0 15.0 # Set the default tilt of Sun/Moon orbit in degrees. # Games may change orbit tilt via API. # Value of 0 means no tilt / vertical orbit. # -# Requires: shaders, enable_dynamic_shadows, opengl +# Requires: enable_dynamic_shadows, opengl shadow_sky_body_orbit_tilt (Sky Body Orbit Tilt) float 0.0 -60.0 60.0 [**Post Processing] # Enables the post processing pipeline. -# -# Requires: shaders enable_post_processing (Enable Post Processing) bool true # Enables Hable's 'Uncharted 2' filmic tone mapping. @@ -592,7 +581,7 @@ enable_post_processing (Enable Post Processing) bool true # appearance of high dynamic range images. Mid-range contrast is slightly # enhanced, highlights and shadows are gradually compressed. # -# Requires: shaders, enable_post_processing +# Requires: enable_post_processing tone_mapping (Filmic tone mapping) bool false # Enable automatic exposure correction @@ -600,14 +589,14 @@ tone_mapping (Filmic tone mapping) bool false # automatically adjust to the brightness of the scene, # simulating the behavior of human eye. # -# Requires: shaders, enable_post_processing +# Requires: enable_post_processing enable_auto_exposure (Enable Automatic Exposure) bool false # Set the exposure compensation in EV units. # Value of 0.0 (default) means no exposure compensation. # Range: from -1 to 1.0 # -# Requires: shaders, enable_post_processing, enable_auto_exposure +# Requires: enable_post_processing, enable_auto_exposure exposure_compensation (Exposure compensation) float 0.0 -1.0 1.0 # Apply dithering to reduce color banding artifacts. @@ -618,35 +607,35 @@ exposure_compensation (Exposure compensation) float 0.0 -1.0 1.0 # With OpenGL ES, dithering only works if the shader supports high # floating-point precision and it may have a higher performance impact. # -# Requires: shaders, enable_post_processing +# Requires: enable_post_processing debanding (Enable Debanding) bool true # Set to true to enable bloom effect. # Bright colors will bleed over the neighboring objects. # -# Requires: shaders, enable_post_processing +# Requires: enable_post_processing enable_bloom (Enable Bloom) bool false # Set to true to enable volumetric lighting effect (a.k.a. "Godrays"). # -# Requires: shaders, enable_post_processing, enable_bloom +# Requires: enable_post_processing, enable_bloom enable_volumetric_lighting (Volumetric lighting) bool false [**Other Effects] # Simulate translucency when looking at foliage in the sunlight. # -# Requires: shaders, enable_dynamic_shadows +# Requires: enable_dynamic_shadows enable_translucent_foliage (Translucent foliage) bool false # Apply specular shading to nodes. # -# Requires: shaders, enable_dynamic_shadows +# Requires: enable_dynamic_shadows enable_node_specular (Node specular) bool false # When enabled, liquid reflections are simulated. # -# Requires: shaders, enable_waving_water, enable_dynamic_shadows +# Requires: enable_waving_water, enable_dynamic_shadows enable_water_reflections (Liquid reflections) bool false [*Audio] @@ -1837,14 +1826,7 @@ ignore_world_load_errors (Ignore world errors) bool false [**Graphics] -# Shaders are a fundamental part of rendering and enable advanced visual effects. -# -# Requires: shaders_support -enable_shaders (Shaders) bool true - # Path to shader directory. If no path is defined, default location will be used. -# -# Requires: shaders shader_path (Shader path) path # The rendering back-end. @@ -1864,10 +1846,6 @@ cloud_radius (Cloud radius) int 12 1 62 # Whether node texture animations should be desynchronized per mapblock. desynchronize_mapblock_texture_animation (Desynchronize block animation) bool false -# Enables caching of facedir rotated meshes. -# This is only effective with shaders disabled. -enable_mesh_cache (Mesh cache) bool false - # Delay between mesh updates on the client in ms. Increasing this will slow # down the rate of mesh updates, thus reducing jitter on slower clients. mesh_generation_interval (Mapblock mesh generation delay) int 0 0 50 @@ -1922,7 +1900,7 @@ opengl_debug (OpenGL debug) bool false # top-left - processed base image, top-right - final image # bottom-left - raw base image, bottom-right - bloom texture. # -# Requires: shaders, enable_post_processing, enable_bloom +# Requires: enable_post_processing, enable_bloom enable_bloom_debug (Enable Bloom Debug) bool false [**Sound] diff --git a/doc/android.md b/doc/android.md index 19d7e569b..65cc0440c 100644 --- a/doc/android.md +++ b/doc/android.md @@ -3,8 +3,6 @@ All Luanti builds, including the Android variant, are based on the same code. However, additional Java code is used for proper Android integration. ## Controls -Compared to Luanti binaries for PC, the Android port has limited functionality -due to limited capabilities of common devices. What can be done is described below: While you're playing the game normally (that is, no menu or inventory is shown), the following controls are available: @@ -58,35 +56,25 @@ Mobile device generally have less RAM than PC, this setting limit how many mapbl this setting limit max FPS (Frame per second). Default value is 60, which lowest Android device screen refresh rate commonly found, but if you're using an device have lower refresh rate, change this ## Requirements -The minimal and recommended system requirements for Luanti are listed below. +The recommended system requirements for Luanti are listed below. ### CPU Supported architectures: -1. ARM v7 -2. ARM v8 +1. ARMv7 +2. AArch64 3. x86 4. x86_64 -CPU architectures similar to ARM or x86 might run Luanti but are not tested. - -### Minimum -1. Graphics API: OpenGL ES 1.0 - * Shaders might not work correctly or work at all on OpenGL ES 1.0. -2. Android version: Android 4.1 (API Level 16) -3. Free RAM: 500 MB -4. Free storage: 100 MB - * More storage is highly recommended - ### Recommended 1. Graphics API: OpenGL ES 2.0 -2. Android version: Android 4.4 (API Level 19) or newer -3. Empty RAM: 850 MB -4. Free storage: 480 MB +2. Android version: Android 5 (API Level 21) or newer +3. Free RAM: 1 GB +4. Free storage: 500 MB ## Rendering Unlike on PC, Android devices use OpenGL ES which less powerful than OpenGL, thus some shader settings cannot be used on OpenGL ES. -Changing the graphic driver setting to OpenGL will result in undesirable behavior. +Changing the graphic driver setting to OpenGL will not work. ## Building Requirements In order to build, your PC has to be set up to build Luanti in the usual diff --git a/doc/developing/os-compatibility.md b/doc/developing/os-compatibility.md index 29b271e6f..794328e7b 100644 --- a/doc/developing/os-compatibility.md +++ b/doc/developing/os-compatibility.md @@ -45,13 +45,8 @@ There's usually no reason to raise this unless the NDK drops older versions. **Compilers**: gcc, clang and MSVC (exceptions exist) -**OpenGL** is an entirely different beast, there is no formal consensus on changing the requirements -and neither do we have an exact set of requirements. - -We still support OpenGL 1.4 without shaders (fixed-pipeline), which could be considered very unreasonable in 2024. -OpenGL ES 2.0 is supported for the sake of mobile platforms. - -It has been [proposed](https://irc.minetest.net/minetest-dev/2022-08-18) moving to OpenGL 2.x or 3.0 with shaders required. +We require **OpenGL** 2.0 or ES 2.0, so shaders can be relied on. +Graphics code should generally work on both. Newer features can be used as long as a fallback exists. General **system requirements** are not bounded either. Being able to play Luanti on a recent low-end phone is a reasonable target. diff --git a/irr/src/COpenGLExtensionHandler.cpp b/irr/src/COpenGLExtensionHandler.cpp index 6127d6e46..a20932c8f 100644 --- a/irr/src/COpenGLExtensionHandler.cpp +++ b/irr/src/COpenGLExtensionHandler.cpp @@ -130,10 +130,10 @@ void COpenGLExtensionHandler::initExtensions(video::IContextManager *cmgr, bool { const f32 ogl_ver = core::fast_atof(reinterpret_cast(glGetString(GL_VERSION))); Version = static_cast(core::floor32(ogl_ver) * 100 + core::round32(core::fract(ogl_ver) * 10.0f)); - if (Version >= 102) - os::Printer::log("OpenGL driver version is 1.2 or better.", ELL_INFORMATION); + if (Version >= 200) + os::Printer::log("OpenGL driver version is 2.0 or newer.", ELL_INFORMATION); else - os::Printer::log("OpenGL driver version is not 1.2 or better.", ELL_WARNING); + os::Printer::log("OpenGL driver version is older than 2.0.", ELL_WARNING); { const char *t = reinterpret_cast(glGetString(GL_EXTENSIONS)); diff --git a/src/client/clouds.cpp b/src/client/clouds.cpp index 37f044f22..82a85d7b0 100644 --- a/src/client/clouds.cpp +++ b/src/client/clouds.cpp @@ -33,16 +33,13 @@ Clouds::Clouds(scene::ISceneManager* mgr, IShaderSource *ssrc, m_seed(seed) { assert(ssrc); - m_enable_shaders = g_settings->getBool("enable_shaders"); m_material.BackfaceCulling = true; m_material.FogEnable = true; m_material.AntiAliasing = video::EAAM_SIMPLE; - if (m_enable_shaders) { + { auto sid = ssrc->getShader("cloud_shader", TILE_MATERIAL_ALPHA); m_material.MaterialType = ssrc->getShaderInfo(sid).material; - } else { - m_material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL; } m_params = SkyboxDefaults::getCloudDefaults(); @@ -119,15 +116,11 @@ void Clouds::updateMesh() // Colors with primitive shading - video::SColorf c_top_f(m_color); - video::SColorf c_side_1_f(m_color); - video::SColorf c_side_2_f(m_color); - video::SColorf c_bottom_f(m_color); - if (m_enable_shaders) { - // shader mixes the base color, set via ColorParam - c_top_f = c_side_1_f = c_side_2_f = c_bottom_f = video::SColorf(1.0f, 1.0f, 1.0f, 1.0f); - } - video::SColorf shadow = m_params.color_shadow; + video::SColorf c_top_f(1, 1, 1, 1); + video::SColorf c_side_1_f(1, 1, 1, 1); + video::SColorf c_side_2_f(1, 1, 1, 1); + video::SColorf c_bottom_f(1, 1, 1, 1); + const video::SColorf shadow = m_params.color_shadow; c_side_1_f.r *= shadow.r * 0.25f + 0.75f; c_side_1_f.g *= shadow.g * 0.25f + 0.75f; @@ -385,8 +378,7 @@ void Clouds::render() } m_material.BackfaceCulling = is3D(); - if (m_enable_shaders) - m_material.ColorParam = m_color.toSColor(); + m_material.ColorParam = m_color.toSColor(); driver->setTransform(video::ETS_WORLD, AbsoluteTransformation); driver->setMaterial(m_material); diff --git a/src/client/clouds.h b/src/client/clouds.h index 06a4f090b..950327aa2 100644 --- a/src/client/clouds.h +++ b/src/client/clouds.h @@ -169,7 +169,7 @@ private: v3s16 m_camera_offset; bool m_camera_inside_cloud = false; - bool m_enable_shaders, m_enable_3d; + bool m_enable_3d; video::SColorf m_color = video::SColorf(1.0f, 1.0f, 1.0f, 1.0f); CloudParams m_params; }; diff --git a/src/client/content_cao.cpp b/src/client/content_cao.cpp index 6c7976ea7..b73b3602c 100644 --- a/src/client/content_cao.cpp +++ b/src/client/content_cao.cpp @@ -349,8 +349,6 @@ bool GenericCAO::collideWithObjects() const void GenericCAO::initialize(const std::string &data) { processInitData(data); - - m_enable_shaders = g_settings->getBool("enable_shaders"); } void GenericCAO::processInitData(const std::string &data) @@ -603,7 +601,7 @@ void GenericCAO::addToScene(ITextureSource *tsrc, scene::ISceneManager *smgr) m_material_type_param = 0.5f; // May cut off alpha < 128 depending on m_material_type - if (m_enable_shaders) { + { IShaderSource *shader_source = m_client->getShaderSource(); MaterialType material_type; @@ -616,13 +614,6 @@ void GenericCAO::addToScene(ITextureSource *tsrc, scene::ISceneManager *smgr) u32 shader_id = shader_source->getShader("object_shader", material_type, NDT_NORMAL); m_material_type = shader_source->getShaderInfo(shader_id).material; - } else { - if (m_prop.use_texture_alpha) { - m_material_type = video::EMT_TRANSPARENT_ALPHA_CHANNEL; - m_material_type_param = 1.0f / 256.f; // minimal alpha for texture rendering - } else { - m_material_type = video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF; - } } auto grabMatrixNode = [this] { @@ -688,9 +679,7 @@ void GenericCAO::addToScene(ITextureSource *tsrc, scene::ISceneManager *smgr) // Set material setMaterial(buf->getMaterial()); - if (m_enable_shaders) { - buf->getMaterial().ColorParam = c; - } + buf->getMaterial().ColorParam = c; // Add to mesh mesh->addMeshBuffer(buf); @@ -714,9 +703,7 @@ void GenericCAO::addToScene(ITextureSource *tsrc, scene::ISceneManager *smgr) // Set material setMaterial(buf->getMaterial()); - if (m_enable_shaders) { - buf->getMaterial().ColorParam = c; - } + buf->getMaterial().ColorParam = c; // Add to mesh mesh->addMeshBuffer(buf); @@ -741,8 +728,7 @@ void GenericCAO::addToScene(ITextureSource *tsrc, scene::ISceneManager *smgr) }); } else if (m_prop.visual == "mesh") { grabMatrixNode(); - // can't cache mesh if shaders disabled, since we modify vertices - scene::IAnimatedMesh *mesh = m_client->getMesh(m_prop.mesh, m_enable_shaders); + scene::IAnimatedMesh *mesh = m_client->getMesh(m_prop.mesh, true); if (mesh) { if (!checkMeshNormals(mesh)) { infostream << "GenericCAO: recalculating normals for mesh " @@ -795,7 +781,7 @@ void GenericCAO::addToScene(ITextureSource *tsrc, scene::ISceneManager *smgr) /* Set VBO hint */ // wieldmesh sets its own hint, no need to handle it - if (m_enable_shaders && (m_meshnode || m_animated_meshnode)) { + if (m_meshnode || m_animated_meshnode) { // sprite uses vertex animation if (m_meshnode && m_prop.visual != "upright_sprite") m_meshnode->getMesh()->setHardwareMappingHint(scene::EHM_STATIC); @@ -893,10 +879,7 @@ void GenericCAO::updateLight(u32 day_night_ratio) // Encode light into color, adding a small boost // based on the entity glow. - if (m_enable_shaders) - light = encode_light(light_at_pos, m_prop.glow); - else - final_color_blend(&light, light_at_pos, day_night_ratio); + light = encode_light(light_at_pos, m_prop.glow); if (light != m_last_light) { m_last_light = light; @@ -912,22 +895,11 @@ void GenericCAO::setNodeLight(const video::SColor &light_color) return; } - if (m_enable_shaders) { + { auto *node = getSceneNode(); if (!node) return; setColorParam(node, light_color); - } else { - // TODO refactor vertex colors to be separate from the other vertex attributes - // instead of mutating meshes / buffers for everyone via setMeshColor. - // (Note: There are a couple more places here where setMeshColor is used.) - if (m_meshnode) { - setMeshColor(m_meshnode->getMesh(), light_color); - } else if (m_animated_meshnode) { - setMeshColor(m_animated_meshnode->getMesh(), light_color); - } else if (m_spritenode) { - m_spritenode->setColor(light_color); - } } } diff --git a/src/client/content_cao.h b/src/client/content_cao.h index 714a7f241..1115b6819 100644 --- a/src/client/content_cao.h +++ b/src/client/content_cao.h @@ -116,8 +116,6 @@ private: // Material video::E_MATERIAL_TYPE m_material_type; f32 m_material_type_param; - // Settings - bool m_enable_shaders = false; bool visualExpiryRequired(const ObjectProperties &newprops) const; diff --git a/src/client/content_mapblock.cpp b/src/client/content_mapblock.cpp index 0c1113d0c..2d294953a 100644 --- a/src/client/content_mapblock.cpp +++ b/src/client/content_mapblock.cpp @@ -67,8 +67,6 @@ MapblockMeshGenerator::MapblockMeshGenerator(MeshMakeData *input, MeshCollector nodedef(data->nodedef), meshmanip(mm), blockpos_nodes(data->m_blockpos * MAP_BLOCKSIZE), - enable_mesh_cache(g_settings->getBool("enable_mesh_cache") && - !data->m_smooth_lighting), // Mesh cache is not supported with smooth lighting smooth_liquids(g_settings->getBool("enable_water_reflections")) { } @@ -1657,31 +1655,27 @@ void MapblockMeshGenerator::drawMeshNode() } else if (cur_node.f->param_type_2 == CPT2_WALLMOUNTED || cur_node.f->param_type_2 == CPT2_COLORED_WALLMOUNTED) { // Convert wallmounted to 6dfacedir. - // When cache enabled, it is already converted. facedir = cur_node.n.getWallMounted(nodedef); - if (!enable_mesh_cache) - facedir = wallmounted_to_facedir[facedir]; + facedir = wallmounted_to_facedir[facedir]; } else if (cur_node.f->param_type_2 == CPT2_DEGROTATE || cur_node.f->param_type_2 == CPT2_COLORED_DEGROTATE) { degrotate = cur_node.n.getDegRotate(nodedef); } - if (!data->m_smooth_lighting && cur_node.f->mesh_ptr[facedir] && !degrotate) { - // use cached meshes - private_mesh = false; - mesh = cur_node.f->mesh_ptr[facedir]; - } else if (cur_node.f->mesh_ptr[0]) { - // no cache, clone and rotate mesh + if (cur_node.f->mesh_ptr) { + // clone and rotate mesh private_mesh = true; - mesh = cloneMesh(cur_node.f->mesh_ptr[0]); + mesh = cloneMesh(cur_node.f->mesh_ptr); if (facedir) rotateMeshBy6dFacedir(mesh, facedir); else if (degrotate) rotateMeshXZby(mesh, 1.5f * degrotate); recalculateBoundingBox(mesh); meshmanip->recalculateNormals(mesh, true, false); - } else + } else { + warningstream << "drawMeshNode(): missing mesh" << std::endl; return; + } int mesh_buffer_count = mesh->getMeshBufferCount(); for (int j = 0; j < mesh_buffer_count; j++) { diff --git a/src/client/content_mapblock.h b/src/client/content_mapblock.h index 88b0e8a79..0473a9b75 100644 --- a/src/client/content_mapblock.h +++ b/src/client/content_mapblock.h @@ -60,9 +60,6 @@ private: const v3s16 blockpos_nodes; -// options - const bool enable_mesh_cache; - // current node struct { v3s16 p; diff --git a/src/client/hud.cpp b/src/client/hud.cpp index 2da9efa5e..6929d4c9e 100644 --- a/src/client/hud.cpp +++ b/src/client/hud.cpp @@ -84,15 +84,11 @@ Hud::Hud(Client *client, LocalPlayer *player, } // Initialize m_selection_material - - - if (g_settings->getBool("enable_shaders")) { - IShaderSource *shdrsrc = client->getShaderSource(); + IShaderSource *shdrsrc = client->getShaderSource(); + { auto shader_id = shdrsrc->getShader( m_mode == HIGHLIGHT_HALO ? "selection_shader" : "default_shader", TILE_MATERIAL_ALPHA); m_selection_material.MaterialType = shdrsrc->getShaderInfo(shader_id).material; - } else { - m_selection_material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL; } if (m_mode == HIGHLIGHT_BOX) { @@ -106,12 +102,9 @@ Hud::Hud(Client *client, LocalPlayer *player, } // Initialize m_block_bounds_material - if (g_settings->getBool("enable_shaders")) { - IShaderSource *shdrsrc = client->getShaderSource(); + { auto shader_id = shdrsrc->getShader("default_shader", TILE_MATERIAL_ALPHA); m_block_bounds_material.MaterialType = shdrsrc->getShaderInfo(shader_id).material; - } else { - m_block_bounds_material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL; } m_block_bounds_material.Thickness = rangelim(g_settings->getS16("selectionbox_width"), 1, 5); @@ -1171,6 +1164,7 @@ void drawItemStack( auto &p = imesh->buffer_colors[j]; p.applyOverride(c); + // TODO: could be moved to a shader if (p.needColorize(c)) { buf->setDirty(scene::EBT_VERTEX); if (imesh->needs_shading) diff --git a/src/client/mapblock_mesh.cpp b/src/client/mapblock_mesh.cpp index 0922b9500..c212bd148 100644 --- a/src/client/mapblock_mesh.cpp +++ b/src/client/mapblock_mesh.cpp @@ -25,10 +25,9 @@ MeshMakeData */ -MeshMakeData::MeshMakeData(const NodeDefManager *ndef, u16 side_length, bool use_shaders): +MeshMakeData::MeshMakeData(const NodeDefManager *ndef, u16 side_length): side_length(side_length), - nodedef(ndef), - m_use_shaders(use_shaders) + nodedef(ndef) {} void MeshMakeData::fillBlockDataBegin(const v3s16 &blockpos) @@ -267,7 +266,8 @@ u16 getSmoothLightTransparent(const v3s16 &p, const v3s16 &corner, MeshMakeData return getSmoothLightCombined(p, dirs, data); } -void get_sunlight_color(video::SColorf *sunlight, u32 daynight_ratio){ +void get_sunlight_color(video::SColorf *sunlight, u32 daynight_ratio) +{ f32 rg = daynight_ratio / 1000.0f - 0.04f; f32 b = (0.98f * daynight_ratio) / 1000.0f + 0.078f; sunlight->r = rg; @@ -594,14 +594,12 @@ MapBlockMesh::MapBlockMesh(Client *client, MeshMakeData *data, v3s16 camera_offs m_shdrsrc(client->getShaderSource()), m_bounding_sphere_center((data->side_length * 0.5f - 0.5f) * BS), m_animation_force_timer(0), // force initial animation - m_last_crack(-1), - m_last_daynight_ratio((u32) -1) + m_last_crack(-1) { ZoneScoped; for (auto &m : m_mesh) m = make_irr(); - m_enable_shaders = data->m_use_shaders; auto mesh_grid = client->getMeshGrid(); v3s16 bp = data->m_blockpos; @@ -695,30 +693,6 @@ MapBlockMesh::MapBlockMesh(Client *client, MeshMakeData *data, v3s16 camera_offs p.layer.texture = (*p.layer.frames)[0].texture; } - if (!m_enable_shaders) { - // Extract colors for day-night animation - // Dummy sunlight to handle non-sunlit areas - video::SColorf sunlight; - get_sunlight_color(&sunlight, 0); - - std::map colors; - const u32 vertex_count = p.vertices.size(); - for (u32 j = 0; j < vertex_count; j++) { - video::SColor *vc = &p.vertices[j].Color; - video::SColor copy = *vc; - if (vc->getAlpha() == 0) // No sunlight - no need to animate - final_color_blend(vc, copy, sunlight); // Finalize color - else // Record color to animate - colors[j] = copy; - - // The sunlight ratio has been stored, - // delete alpha (for the final rendering). - vc->setAlpha(255); - } - if (!colors.empty()) - m_daynight_diffs[{layer, i}] = std::move(colors); - } - // Create material video::SMaterial material; material.BackfaceCulling = true; @@ -729,12 +703,10 @@ MapBlockMesh::MapBlockMesh(Client *client, MeshMakeData *data, v3s16 camera_offs tex.MagFilter = video::ETMAGF_NEAREST; }); - if (m_enable_shaders) { + { material.MaterialType = m_shdrsrc->getShaderInfo( p.layer.shader_id).material; p.layer.applyMaterialOptionsWithShaders(material); - } else { - p.layer.applyMaterialOptions(material); } scene::SMeshBuffer *buf = new scene::SMeshBuffer(); @@ -771,7 +743,6 @@ MapBlockMesh::MapBlockMesh(Client *client, MeshMakeData *data, v3s16 camera_offs // Check if animation is required for this mesh m_has_animation = !m_crack_materials.empty() || - !m_daynight_diffs.empty() || !m_animation_info.empty(); } @@ -844,24 +815,6 @@ bool MapBlockMesh::animate(bool faraway, float time, int crack, buf->getMaterial().setTexture(0, frame.texture); } - // Day-night transition - if (!m_enable_shaders && (daynight_ratio != m_last_daynight_ratio)) { - video::SColorf day_color; - get_sunlight_color(&day_color, daynight_ratio); - - for (auto &daynight_diff : m_daynight_diffs) { - auto *mesh = m_mesh[daynight_diff.first.first].get(); - mesh->setDirty(scene::EBT_VERTEX); // force reload to VBO - scene::IMeshBuffer *buf = mesh-> - getMeshBuffer(daynight_diff.first.second); - video::S3DVertex *vertices = (video::S3DVertex *)buf->getVertices(); - for (const auto &j : daynight_diff.second) - final_color_blend(&(vertices[j.first].Color), j.second, - day_color); - } - m_last_daynight_ratio = daynight_ratio; - } - return true; } diff --git a/src/client/mapblock_mesh.h b/src/client/mapblock_mesh.h index 9bdebec7c..5a8daf50c 100644 --- a/src/client/mapblock_mesh.h +++ b/src/client/mapblock_mesh.h @@ -35,9 +35,8 @@ struct MeshMakeData u16 side_length; const NodeDefManager *nodedef; - bool m_use_shaders; - MeshMakeData(const NodeDefManager *ndef, u16 side_length, bool use_shaders); + MeshMakeData(const NodeDefManager *ndef, u16 side_length); /* Copy block data manually (to allow optimizations by the caller) @@ -235,8 +234,6 @@ private: f32 m_bounding_radius; v3f m_bounding_sphere_center; - bool m_enable_shaders; - // Must animate() be called before rendering? bool m_has_animation; int m_animation_force_timer; @@ -252,14 +249,6 @@ private: // Keys are pairs of (mesh index, buffer index in the mesh) std::map, AnimationInfo> m_animation_info; - // Animation info: day/night transitions - // Last daynight_ratio value passed to animate() - u32 m_last_daynight_ratio; - // For each mesh and mesh buffer, stores pre-baked colors - // of sunlit vertices - // Keys are pairs of (mesh index, buffer index in the mesh) - std::map, std::map > m_daynight_diffs; - // list of all semitransparent triangles in the mapblock std::vector m_transparent_triangles; // Binary Space Partitioning tree for the block diff --git a/src/client/mesh_generator_thread.cpp b/src/client/mesh_generator_thread.cpp index ec868980c..3d80f8e67 100644 --- a/src/client/mesh_generator_thread.cpp +++ b/src/client/mesh_generator_thread.cpp @@ -39,7 +39,6 @@ QueuedMeshUpdate::~QueuedMeshUpdate() MeshUpdateQueue::MeshUpdateQueue(Client *client): m_client(client) { - m_cache_enable_shaders = g_settings->getBool("enable_shaders"); m_cache_smooth_lighting = g_settings->getBool("smooth_lighting"); } @@ -177,7 +176,7 @@ void MeshUpdateQueue::done(v3s16 pos) void MeshUpdateQueue::fillDataFromMapBlocks(QueuedMeshUpdate *q) { auto mesh_grid = m_client->getMeshGrid(); - MeshMakeData *data = new MeshMakeData(m_client->ndef(), MAP_BLOCKSIZE * mesh_grid.cell_size, m_cache_enable_shaders); + MeshMakeData *data = new MeshMakeData(m_client->ndef(), MAP_BLOCKSIZE * mesh_grid.cell_size); q->data = data; data->fillBlockDataBegin(q->p); diff --git a/src/client/mesh_generator_thread.h b/src/client/mesh_generator_thread.h index d6e2863bf..fb9b5ae9e 100644 --- a/src/client/mesh_generator_thread.h +++ b/src/client/mesh_generator_thread.h @@ -70,11 +70,9 @@ private: std::mutex m_mutex; // TODO: Add callback to update these when g_settings changes - bool m_cache_enable_shaders; bool m_cache_smooth_lighting; void fillDataFromMapBlocks(QueuedMeshUpdate *q); - void cleanupCache(); }; struct MeshUpdateResult diff --git a/src/client/minimap.cpp b/src/client/minimap.cpp index 3bc208808..f28f6a39a 100644 --- a/src/client/minimap.cpp +++ b/src/client/minimap.cpp @@ -173,7 +173,6 @@ Minimap::Minimap(Client *client) m_current_mode_index = 0; // Initialize static settings - m_enable_shaders = g_settings->getBool("enable_shaders"); m_surface_mode_scan_height = g_settings->getBool("minimap_double_scan_height") ? 256 : 128; @@ -599,7 +598,7 @@ void Minimap::drawMinimap(core::rect rect) material.TextureLayers[0].Texture = minimap_texture; material.TextureLayers[1].Texture = data->heightmap_texture; - if (m_enable_shaders && data->mode.type == MINIMAP_TYPE_SURFACE) { + if (data->mode.type == MINIMAP_TYPE_SURFACE) { auto sid = m_shdrsrc->getShader("minimap_shader", TILE_MATERIAL_ALPHA); material.MaterialType = m_shdrsrc->getShaderInfo(sid).material; } else { diff --git a/src/client/minimap.h b/src/client/minimap.h index 5bc69894f..15112d565 100644 --- a/src/client/minimap.h +++ b/src/client/minimap.h @@ -152,7 +152,6 @@ private: const NodeDefManager *m_ndef; std::unique_ptr m_minimap_update_thread; irr_ptr m_meshbuffer; - bool m_enable_shaders; std::vector m_modes; size_t m_current_mode_index; u16 m_surface_mode_scan_height; diff --git a/src/client/render/plain.cpp b/src/client/render/plain.cpp index c08ae78b2..2215ad777 100644 --- a/src/client/render/plain.cpp +++ b/src/client/render/plain.cpp @@ -87,7 +87,7 @@ void UpscaleStep::run(PipelineContext &context) std::unique_ptr create3DStage(Client *client, v2f scale) { RenderStep *step = new Draw3D(); - if (g_settings->getBool("enable_shaders") && g_settings->getBool("enable_post_processing")) { + if (g_settings->getBool("enable_post_processing")) { RenderPipeline *pipeline = new RenderPipeline(); pipeline->addStep(pipeline->own(std::unique_ptr(step))); @@ -111,8 +111,8 @@ RenderStep* addUpscaling(RenderPipeline *pipeline, RenderStep *previousStep, v2f if (downscale_factor.X == 1.0f && downscale_factor.Y == 1.0f) return previousStep; - // When shaders are enabled, post-processing pipeline takes care of rescaling - if (g_settings->getBool("enable_shaders") && g_settings->getBool("enable_post_processing")) + // post-processing pipeline takes care of rescaling + if (g_settings->getBool("enable_post_processing")) return previousStep; diff --git a/src/client/shader.cpp b/src/client/shader.cpp index 778e17d2d..8d2d5744a 100644 --- a/src/client/shader.cpp +++ b/src/client/shader.cpp @@ -307,9 +307,6 @@ public: private: - // Are shaders even enabled? - bool m_enabled; - // The id of the thread that is allowed to use irrlicht directly std::thread::id m_main_thread; @@ -348,12 +345,6 @@ ShaderSource::ShaderSource() // Add a dummy ShaderInfo as the first index, named "" m_shaderinfo_cache.emplace_back(); - m_enabled = g_settings->getBool("enable_shaders"); - if (!m_enabled) { - warningstream << "You are running " PROJECT_NAME_C " with shaders disabled, " - "this is not a recommended configuration." << std::endl; - } - // Add main global constant setter addShaderConstantSetterFactory(new MainShaderConstantSetterFactory()); } @@ -362,11 +353,9 @@ ShaderSource::~ShaderSource() { MutexAutoLock lock(m_shaderinfo_cache_mutex); - if (!m_enabled) - return; - // Delete materials auto *gpu = RenderingEngine::get_video_driver()->getGPUProgrammingServices(); + assert(gpu); for (ShaderInfo &i : m_shaderinfo_cache) { if (!i.name.empty()) gpu->deleteShaderMaterial(i.material); @@ -495,11 +484,9 @@ void ShaderSource::rebuildShaders() { MutexAutoLock lock(m_shaderinfo_cache_mutex); - if (!m_enabled) - return; - // Delete materials auto *gpu = RenderingEngine::get_video_driver()->getGPUProgrammingServices(); + assert(gpu); for (ShaderInfo &i : m_shaderinfo_cache) { if (!i.name.empty()) { gpu->deleteShaderMaterial(i.material); @@ -546,14 +533,14 @@ ShaderInfo ShaderSource::generateShader(const std::string &name, } shaderinfo.material = shaderinfo.base_material; - if (!m_enabled) + video::IVideoDriver *driver = RenderingEngine::get_video_driver(); + // The null driver doesn't support shaders (duh), but we can pretend it does. + if (driver->getDriverType() == video::EDT_NULL) return shaderinfo; - video::IVideoDriver *driver = RenderingEngine::get_video_driver(); auto *gpu = driver->getGPUProgrammingServices(); if (!driver->queryFeature(video::EVDF_ARB_GLSL) || !gpu) { - throw ShaderException(gettext("Shaders are enabled but GLSL is not " - "supported by the driver.")); + throw ShaderException(gettext("GLSL is not supported by the driver")); } // Create shaders header diff --git a/src/client/shadows/dynamicshadowsrender.cpp b/src/client/shadows/dynamicshadowsrender.cpp index 466903cbc..2bf3adeb3 100644 --- a/src/client/shadows/dynamicshadowsrender.cpp +++ b/src/client/shadows/dynamicshadowsrender.cpp @@ -107,25 +107,13 @@ void ShadowRenderer::disable() void ShadowRenderer::preInit(IWritableShaderSource *shsrc) { - if (g_settings->getBool("enable_shaders") && - g_settings->getBool("enable_dynamic_shadows")) { + if (g_settings->getBool("enable_dynamic_shadows")) { shsrc->addShaderConstantSetterFactory(new ShadowConstantSetterFactory()); } } void ShadowRenderer::initialize() { - auto *gpu = m_driver->getGPUProgrammingServices(); - - // we need glsl - if (!m_shadows_supported || !gpu || !m_driver->queryFeature(video::EVDF_ARB_GLSL)) { - m_shadows_supported = false; - - warningstream << "Shadows: GLSL Shader not supported on this system." - << std::endl; - return; - } - createShaders(); @@ -533,7 +521,7 @@ void ShadowRenderer::mixShadowsQuad() void ShadowRenderer::createShaders() { - video::IGPUProgrammingServices *gpu = m_driver->getGPUProgrammingServices(); + auto *gpu = m_driver->getGPUProgrammingServices(); if (depth_shader == -1) { std::string depth_shader_vs = getShaderPath("shadow_shaders", "pass1_vertex.glsl"); @@ -706,14 +694,12 @@ std::string ShadowRenderer::readShaderFile(const std::string &path) ShadowRenderer *createShadowRenderer(IrrlichtDevice *device, Client *client) { // disable if unsupported - if (g_settings->getBool("enable_dynamic_shadows") && ( - device->getVideoDriver()->getDriverType() != video::EDT_OPENGL || - !g_settings->getBool("enable_shaders"))) { + if (g_settings->getBool("enable_dynamic_shadows") && + device->getVideoDriver()->getDriverType() != video::EDT_OPENGL) { g_settings->setBool("enable_dynamic_shadows", false); } - if (g_settings->getBool("enable_shaders") && - g_settings->getBool("enable_dynamic_shadows")) { + if (g_settings->getBool("enable_dynamic_shadows")) { ShadowRenderer *shadow_renderer = new ShadowRenderer(device, client); shadow_renderer->initialize(); return shadow_renderer; diff --git a/src/client/sky.cpp b/src/client/sky.cpp index cd02b5554..cfce57ef3 100644 --- a/src/client/sky.cpp +++ b/src/client/sky.cpp @@ -53,8 +53,6 @@ Sky::Sky(s32 id, RenderingEngine *rendering_engine, ITextureSource *tsrc, IShade m_box.MaxEdge.set(0, 0, 0); m_box.MinEdge.set(0, 0, 0); - m_enable_shaders = g_settings->getBool("enable_shaders"); - m_sky_params = SkyboxDefaults::getSkyDefaults(); m_sun_params = SkyboxDefaults::getSunDefaults(); m_moon_params = SkyboxDefaults::getMoonDefaults(); @@ -63,9 +61,8 @@ Sky::Sky(s32 id, RenderingEngine *rendering_engine, ITextureSource *tsrc, IShade // Create materials m_materials[0] = baseMaterial(); - m_materials[0].MaterialType = m_enable_shaders ? - ssrc->getShaderInfo(ssrc->getShader("stars_shader", TILE_MATERIAL_ALPHA)).material : - video::EMT_TRANSPARENT_ALPHA_CHANNEL; + m_materials[0].MaterialType = + ssrc->getShaderInfo(ssrc->getShader("stars_shader", TILE_MATERIAL_ALPHA)).material; m_materials[1] = baseMaterial(); m_materials[1].MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL; @@ -668,10 +665,7 @@ void Sky::draw_stars(video::IVideoDriver * driver, float wicked_time_of_day) color.a *= alpha; if (color.a <= 0.0f) // Stars are only drawn when not fully transparent return; - if (m_enable_shaders) - m_materials[0].ColorParam = color.toSColor(); - else - setMeshBufferColor(m_stars.get(), color.toSColor()); + m_materials[0].ColorParam = color.toSColor(); auto sky_rotation = core::matrix4().setRotationAxisRadians(2.0f * M_PI * (wicked_time_of_day - 0.25f), v3f(0.0f, 0.0f, 1.0f)); auto world_matrix = driver->getTransform(video::ETS_WORLD); @@ -841,8 +835,7 @@ void Sky::updateStars() indices.push_back(i * 4 + 3); indices.push_back(i * 4 + 0); } - if (m_enable_shaders) - m_stars->setHardwareMappingHint(scene::EHM_STATIC); + m_stars->setHardwareMappingHint(scene::EHM_STATIC); } void Sky::setSkyColors(const SkyColor &sky_color) diff --git a/src/client/sky.h b/src/client/sky.h index 8986a505c..73f377ae2 100644 --- a/src/client/sky.h +++ b/src/client/sky.h @@ -173,7 +173,6 @@ private: bool m_clouds_enabled = true; // Initialised to true, reset only by set_sky API bool m_directional_colored_fog; bool m_in_clouds = true; // Prevent duplicating bools to remember old values - bool m_enable_shaders = false; video::SColorf m_bgcolor_bright_f = video::SColorf(1.0f, 1.0f, 1.0f, 1.0f); video::SColorf m_skycolor_bright_f = video::SColorf(1.0f, 1.0f, 1.0f, 1.0f); diff --git a/src/client/tile.h b/src/client/tile.h index ceee54243..df02d2244 100644 --- a/src/client/tile.h +++ b/src/client/tile.h @@ -78,7 +78,6 @@ struct TileLayer return !(*this == other); } - // Sets everything else except the texture in the material void applyMaterialOptions(video::SMaterial &material) const; void applyMaterialOptionsWithShaders(video::SMaterial &material) const; diff --git a/src/client/wieldmesh.cpp b/src/client/wieldmesh.cpp index 28fe362a7..5e645e9be 100644 --- a/src/client/wieldmesh.cpp +++ b/src/client/wieldmesh.cpp @@ -184,7 +184,6 @@ WieldMeshSceneNode::WieldMeshSceneNode(scene::ISceneManager *mgr, s32 id): scene::ISceneNode(mgr->getRootSceneNode(), mgr, id), m_material_type(video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF) { - m_enable_shaders = g_settings->getBool("enable_shaders"); m_anisotropic_filter = g_settings->getBool("anisotropic_filter"); m_bilinear_filter = g_settings->getBool("bilinear_filter"); m_trilinear_filter = g_settings->getBool("trilinear_filter"); @@ -233,7 +232,7 @@ void WieldMeshSceneNode::setCube(const ContentFeatures &f, scene::IMesh *cubemesh = g_extrusion_mesh_cache->createCube(); scene::SMesh *copy = cloneMesh(cubemesh); cubemesh->drop(); - postProcessNodeMesh(copy, f, false, true, &m_material_type, &m_colors, true); + postProcessNodeMesh(copy, f, false, &m_material_type, &m_colors, true); changeToMesh(copy); copy->drop(); m_meshnode->setScale(wield_scale * WIELD_SCALE_FACTOR); @@ -297,7 +296,7 @@ void WieldMeshSceneNode::setExtruded(const std::string &imagename, static scene::SMesh *createSpecialNodeMesh(Client *client, MapNode n, std::vector *colors, const ContentFeatures &f) { - MeshMakeData mesh_make_data(client->ndef(), 1, false); + MeshMakeData mesh_make_data(client->ndef(), 1); MeshCollector collector(v3f(0.0f * BS), v3f()); mesh_make_data.setSmoothLighting(false); MapblockMeshGenerator gen(&mesh_make_data, &collector, @@ -354,10 +353,8 @@ void WieldMeshSceneNode::setItem(const ItemStack &item, Client *client, bool che scene::SMesh *mesh = nullptr; - if (m_enable_shaders) { - u32 shader_id = shdrsrc->getShader("object_shader", TILE_MATERIAL_BASIC, NDT_NORMAL); - m_material_type = shdrsrc->getShaderInfo(shader_id).material; - } + u32 shader_id = shdrsrc->getShader("object_shader", TILE_MATERIAL_BASIC, NDT_NORMAL); + m_material_type = shdrsrc->getShaderInfo(shader_id).material; // Color-related m_colors.clear(); @@ -500,10 +497,7 @@ void WieldMeshSceneNode::setColor(video::SColor c) if (m_colors[j].needColorize(buffercolor)) { buf->setDirty(scene::EBT_VERTEX); - if (m_enable_shaders) - setMeshBufferColor(buf, buffercolor); - else - colorizeMeshBuffer(buf, &buffercolor); + setMeshBufferColor(buf, buffercolor); } } } @@ -513,13 +507,11 @@ void WieldMeshSceneNode::setNodeLightColor(video::SColor color) if (!m_meshnode) return; - if (m_enable_shaders) { + { for (u32 i = 0; i < m_meshnode->getMaterialCount(); ++i) { video::SMaterial &material = m_meshnode->getMaterial(i); material.ColorParam = color; } - } else { - setColor(color); } } @@ -538,12 +530,7 @@ void WieldMeshSceneNode::changeToMesh(scene::IMesh *mesh) dummymesh->drop(); // m_meshnode grabbed it } else { m_meshnode->setMesh(mesh); - // without shaders recolored often for lighting - // otherwise only once - if (m_enable_shaders) - mesh->setHardwareMappingHint(scene::EHM_STATIC); - else - mesh->setHardwareMappingHint(scene::EHM_DYNAMIC); + mesh->setHardwareMappingHint(scene::EHM_STATIC); } m_meshnode->setVisible(true); @@ -596,7 +583,7 @@ void getItemMesh(Client *client, const ItemStack &item, ItemMesh *result) } else scaleMesh(mesh, v3f(1.2, 1.2, 1.2)); // add overlays - postProcessNodeMesh(mesh, f, false, false, nullptr, + postProcessNodeMesh(mesh, f, false, nullptr, &result->buffer_colors, true); if (f.drawtype == NDT_ALLFACES) scaleMesh(mesh, v3f(f.visual_scale)); @@ -704,7 +691,7 @@ scene::SMesh *getExtrudedMesh(ITextureSource *tsrc, } void postProcessNodeMesh(scene::SMesh *mesh, const ContentFeatures &f, - bool use_shaders, bool set_material, const video::E_MATERIAL_TYPE *mattype, + bool set_material, const video::E_MATERIAL_TYPE *mattype, std::vector *colors, bool apply_scale) { const u32 mc = mesh->getMeshBufferCount(); diff --git a/src/client/wieldmesh.h b/src/client/wieldmesh.h index 8291cce14..5a5a6957a 100644 --- a/src/client/wieldmesh.h +++ b/src/client/wieldmesh.h @@ -117,7 +117,6 @@ private: scene::IMeshSceneNode *m_meshnode = nullptr; video::E_MATERIAL_TYPE m_material_type; - bool m_enable_shaders; bool m_anisotropic_filter; bool m_bilinear_filter; bool m_trilinear_filter; @@ -152,6 +151,6 @@ scene::SMesh *getExtrudedMesh(ITextureSource *tsrc, const std::string &imagename * be NULL to leave the original material. * \param colors returns the colors of the mesh buffers in the mesh. */ -void postProcessNodeMesh(scene::SMesh *mesh, const ContentFeatures &f, bool use_shaders, +void postProcessNodeMesh(scene::SMesh *mesh, const ContentFeatures &f, bool set_material, const video::E_MATERIAL_TYPE *mattype, std::vector *colors, bool apply_scale = false); diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index 7758c96bf..2142615e2 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -102,7 +102,6 @@ void set_default_settings() settings->setDefault("sound_volume_unfocused", "0.3"); settings->setDefault("mute_sound", "false"); settings->setDefault("sound_extensions_blacklist", ""); - settings->setDefault("enable_mesh_cache", "false"); settings->setDefault("mesh_generation_interval", "0"); settings->setDefault("mesh_generation_threads", "0"); settings->setDefault("free_move", "false"); @@ -299,7 +298,6 @@ void set_default_settings() settings->setDefault("enable_local_map_saving", "false"); settings->setDefault("show_entity_selectionbox", "false"); settings->setDefault("ambient_occlusion_gamma", "1.8"); - settings->setDefault("enable_shaders", "true"); settings->setDefault("enable_particles", "true"); settings->setDefault("arm_inertia", "true"); settings->setDefault("show_nametag_backgrounds", "true"); diff --git a/src/environment.cpp b/src/environment.cpp index 533959723..fe582afd4 100644 --- a/src/environment.cpp +++ b/src/environment.cpp @@ -17,7 +17,6 @@ Environment::Environment(IGameDef *gamedef): m_day_count(0), m_gamedef(gamedef) { - m_cache_enable_shaders = g_settings->getBool("enable_shaders"); m_cache_active_block_mgmt_interval = g_settings->getFloat("active_block_mgmt_interval"); m_cache_abm_interval = g_settings->getFloat("abm_interval"); m_cache_nodetimer_interval = g_settings->getFloat("nodetimer_interval"); @@ -32,7 +31,7 @@ u32 Environment::getDayNightRatio() MutexAutoLock lock(m_time_lock); if (m_enable_day_night_ratio_override) return m_day_night_ratio_override; - return time_to_daynight_ratio(m_time_of_day_f * 24000, m_cache_enable_shaders); + return time_to_daynight_ratio(m_time_of_day_f * 24000, true); } void Environment::setTimeOfDaySpeed(float speed) diff --git a/src/environment.h b/src/environment.h index 925154d84..b668e69c2 100644 --- a/src/environment.h +++ b/src/environment.h @@ -131,7 +131,6 @@ protected: * (as opposed to the this local caching). This can be addressed in * a later release. */ - bool m_cache_enable_shaders; float m_cache_active_block_mgmt_interval; float m_cache_abm_interval; float m_cache_nodetimer_interval; diff --git a/src/gui/guiScene.cpp b/src/gui/guiScene.cpp index f30c4f3d1..88865b384 100644 --- a/src/gui/guiScene.cpp +++ b/src/gui/guiScene.cpp @@ -98,11 +98,6 @@ void GUIScene::draw() if (m_inf_rot) rotateCamera(v3f(0.f, -0.03f * (float)dtime_ms, 0.f)); - // HACK restore mesh vertex colors to full brightness: - // They may have been mutated in entity rendering code before. - if (!g_settings->getBool("enable_shaders")) - setMeshColor(m_mesh->getMesh(), irr::video::SColor(0xFFFFFFFF)); - m_smgr->drawAll(); if (m_initial_rotation && m_mesh) { diff --git a/src/nodedef.cpp b/src/nodedef.cpp index c956bbdfd..2301b179f 100644 --- a/src/nodedef.cpp +++ b/src/nodedef.cpp @@ -270,18 +270,12 @@ void TextureSettings::readSettings() { connected_glass = g_settings->getBool("connected_glass"); translucent_liquids = g_settings->getBool("translucent_liquids"); - bool smooth_lighting = g_settings->getBool("smooth_lighting"); - enable_mesh_cache = g_settings->getBool("enable_mesh_cache"); enable_minimap = g_settings->getBool("enable_minimap"); node_texture_size = std::max(g_settings->getU16("texture_min_size"), 1); std::string leaves_style_str = g_settings->get("leaves_style"); std::string world_aligned_mode_str = g_settings->get("world_aligned_mode"); std::string autoscale_mode_str = g_settings->get("autoscale_mode"); - // Mesh cache is not supported in combination with smooth lighting - if (smooth_lighting) - enable_mesh_cache = false; - if (leaves_style_str == "fancy") { leaves_style = LEAVES_FANCY; } else if (leaves_style_str == "simple") { @@ -357,8 +351,7 @@ void ContentFeatures::reset() drawtype = NDT_NORMAL; mesh.clear(); #if CHECK_CLIENT_BUILD() - for (auto &i : mesh_ptr) - i = NULL; + mesh_ptr = nullptr; minimap_color = video::SColor(0, 0, 0, 0); #endif visual_scale = 1.0; @@ -952,48 +945,14 @@ void ContentFeatures::updateTextures(ITextureSource *tsrc, IShaderSource *shdsrc if (drawtype == NDT_MESH && !mesh.empty()) { // Meshnode drawtype // Read the mesh and apply scale - mesh_ptr[0] = client->getMesh(mesh); - if (mesh_ptr[0]){ - v3f scale = v3f(1.0, 1.0, 1.0) * BS * visual_scale; - scaleMesh(mesh_ptr[0], scale); - recalculateBoundingBox(mesh_ptr[0]); - meshmanip->recalculateNormals(mesh_ptr[0], true, false); + mesh_ptr = client->getMesh(mesh); + if (mesh_ptr) { + v3f scale = v3f(BS) * visual_scale; + scaleMesh(mesh_ptr, scale); + recalculateBoundingBox(mesh_ptr); + meshmanip->recalculateNormals(mesh_ptr, true, false); } } - - //Cache 6dfacedir and wallmounted rotated clones of meshes - if (tsettings.enable_mesh_cache && mesh_ptr[0] && - (param_type_2 == CPT2_FACEDIR - || param_type_2 == CPT2_COLORED_FACEDIR)) { - for (u16 j = 1; j < 24; j++) { - mesh_ptr[j] = cloneMesh(mesh_ptr[0]); - rotateMeshBy6dFacedir(mesh_ptr[j], j); - recalculateBoundingBox(mesh_ptr[j]); - meshmanip->recalculateNormals(mesh_ptr[j], true, false); - } - } else if (tsettings.enable_mesh_cache && mesh_ptr[0] && - (param_type_2 == CPT2_4DIR - || param_type_2 == CPT2_COLORED_4DIR)) { - for (u16 j = 1; j < 4; j++) { - mesh_ptr[j] = cloneMesh(mesh_ptr[0]); - rotateMeshBy6dFacedir(mesh_ptr[j], j); - recalculateBoundingBox(mesh_ptr[j]); - meshmanip->recalculateNormals(mesh_ptr[j], true, false); - } - } else if (tsettings.enable_mesh_cache && mesh_ptr[0] - && (param_type_2 == CPT2_WALLMOUNTED || - param_type_2 == CPT2_COLORED_WALLMOUNTED)) { - static const u8 wm_to_6d[6] = { 20, 0, 16 + 1, 12 + 3, 8, 4 + 2 }; - for (u16 j = 1; j < 6; j++) { - mesh_ptr[j] = cloneMesh(mesh_ptr[0]); - rotateMeshBy6dFacedir(mesh_ptr[j], wm_to_6d[j]); - recalculateBoundingBox(mesh_ptr[j]); - meshmanip->recalculateNormals(mesh_ptr[j], true, false); - } - rotateMeshBy6dFacedir(mesh_ptr[0], wm_to_6d[0]); - recalculateBoundingBox(mesh_ptr[0]); - meshmanip->recalculateNormals(mesh_ptr[0], true, false); - } } #endif @@ -1014,10 +973,8 @@ NodeDefManager::~NodeDefManager() { #if CHECK_CLIENT_BUILD() for (ContentFeatures &f : m_content_features) { - for (auto &j : f.mesh_ptr) { - if (j) - j->drop(); - } + if (f.mesh_ptr) + f.mesh_ptr->drop(); } #endif } diff --git a/src/nodedef.h b/src/nodedef.h index bc0058101..c3f88ce83 100644 --- a/src/nodedef.h +++ b/src/nodedef.h @@ -171,7 +171,6 @@ public: int node_texture_size; bool translucent_liquids; bool connected_glass; - bool enable_mesh_cache; bool enable_minimap; TextureSettings() = default; @@ -337,7 +336,7 @@ struct ContentFeatures enum NodeDrawType drawtype; std::string mesh; #if CHECK_CLIENT_BUILD() - scene::IMesh *mesh_ptr[24]; + scene::IMesh *mesh_ptr; // mesh in case of mesh node video::SColor minimap_color; #endif float visual_scale; // Misc. scale parameter diff --git a/src/unittest/test_content_mapblock.cpp b/src/unittest/test_content_mapblock.cpp index acc6213a4..6e0026cba 100644 --- a/src/unittest/test_content_mapblock.cpp +++ b/src/unittest/test_content_mapblock.cpp @@ -36,9 +36,9 @@ public: node_mgr()->resolveCrossrefs(); } - MeshMakeData makeSingleNodeMMD(bool smooth_lighting = true, bool for_shaders = true) + MeshMakeData makeSingleNodeMMD(bool smooth_lighting = true) { - MeshMakeData data{ndef(), 1, for_shaders}; + MeshMakeData data{ndef(), 1}; data.setSmoothLighting(smooth_lighting); data.m_blockpos = {0, 0, 0}; for (s16 x = -1; x <= 1; x++) diff --git a/util/test_multiplayer.sh b/util/test_multiplayer.sh index 5c0e6bfaa..ade24b648 100755 --- a/util/test_multiplayer.sh +++ b/util/test_multiplayer.sh @@ -29,7 +29,7 @@ mkdir -p "$worldpath/worldmods" printf '%s\n' >"$testspath/client1.conf" \ video_driver=null name=client1 viewing_range=10 \ - enable_{sound,minimap,shaders}=false + enable_{sound,minimap,post_processing}=false printf '%s\n' >"$testspath/server.conf" \ max_block_send_distance=1 active_block_range=1 \ From 0c3117f9b32624955846314ebf87f757d124184f Mon Sep 17 00:00:00 2001 From: sfan5 Date: Wed, 13 Nov 2024 18:39:10 +0100 Subject: [PATCH 165/178] Fix mainmenu settings crash caused by last commit closes #15432 --- builtin/mainmenu/settings/dlg_settings.lua | 2 +- builtin/mainmenu/settings/shadows_component.lua | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/builtin/mainmenu/settings/dlg_settings.lua b/builtin/mainmenu/settings/dlg_settings.lua index dbd77a4db..f03596815 100644 --- a/builtin/mainmenu/settings/dlg_settings.lua +++ b/builtin/mainmenu/settings/dlg_settings.lua @@ -359,7 +359,7 @@ local function check_requirements(name, requires) if special[req_key] == nil then local required_setting = get_setting_info(req_key) if required_setting == nil then - core.log("warning", "Unknown setting " .. req_key .. " required by " .. name) + core.log("warning", "Unknown setting " .. req_key .. " required by " .. (name or "???")) end local actual_value = core.settings:get_bool(req_key, required_setting and core.is_yes(required_setting.default)) diff --git a/builtin/mainmenu/settings/shadows_component.lua b/builtin/mainmenu/settings/shadows_component.lua index 2ca03b71b..2d68f9d3d 100644 --- a/builtin/mainmenu/settings/shadows_component.lua +++ b/builtin/mainmenu/settings/shadows_component.lua @@ -82,7 +82,6 @@ end return { query_text = "Shadows", requires = { - shaders = true, opengl = true, }, get_formspec = function(self, avail_w) From d4378a74d3c593c9dd4dfbba30120049e8128102 Mon Sep 17 00:00:00 2001 From: cx384 Date: Fri, 15 Nov 2024 11:37:17 +0100 Subject: [PATCH 166/178] Fix register_ore ore_type error handling --- src/mapgen/mg_ore.h | 3 +-- src/script/lua_api/l_mapgen.cpp | 33 +++++++++++++++++---------------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/mapgen/mg_ore.h b/src/mapgen/mg_ore.h index 435933046..eed13ebfc 100644 --- a/src/mapgen/mg_ore.h +++ b/src/mapgen/mg_ore.h @@ -172,9 +172,8 @@ public: return new OreVein; case ORE_STRATUM: return new OreStratum; - default: - return nullptr; } + return nullptr; } void clear(); diff --git a/src/script/lua_api/l_mapgen.cpp b/src/script/lua_api/l_mapgen.cpp index c8b412c73..89323b2f6 100644 --- a/src/script/lua_api/l_mapgen.cpp +++ b/src/script/lua_api/l_mapgen.cpp @@ -1323,20 +1323,20 @@ int ModApiMapgen::l_register_ore(lua_State *L) BiomeManager *bmgr = emerge->getWritableBiomeManager(); OreManager *oremgr = emerge->getWritableOreManager(); - enum OreType oretype = (OreType)getenumfield(L, index, - "ore_type", es_OreType, ORE_SCATTER); - Ore *ore = oremgr->create(oretype); - if (!ore) { - errorstream << "register_ore: ore_type " << oretype << " not implemented\n"; - return 0; + int oretype_int; + std::string oretype_string = getstringfield_default(L, index, "ore_type", "nil"); + if (!string_to_enum(es_OreType, oretype_int, oretype_string)) { + throw LuaError("register_ore: unknown oretype \"" + oretype_string + "\""); } + enum OreType oretype = (OreType) oretype_int; + std::unique_ptr ore(oremgr->create(oretype)); ore->name = getstringfield_default(L, index, "name", ""); ore->ore_param2 = (u8)getintfield_default(L, index, "ore_param2", 0); ore->clust_scarcity = getintfield_default(L, index, "clust_scarcity", 1); ore->clust_num_ores = getintfield_default(L, index, "clust_num_ores", 1); ore->clust_size = getintfield_default(L, index, "clust_size", 0); - ore->noise = NULL; + ore->noise = nullptr; ore->flags = 0; //// Get noise_threshold @@ -1368,12 +1368,11 @@ int ModApiMapgen::l_register_ore(lua_State *L) if (ore->clust_scarcity <= 0 || ore->clust_num_ores <= 0) { errorstream << "register_ore: clust_scarcity and clust_num_ores" "must be greater than 0" << std::endl; - delete ore; return 0; } //// Get flags - getflagsfield(L, index, "flags", flagdesc_ore, &ore->flags, NULL); + getflagsfield(L, index, "flags", flagdesc_ore, &ore->flags, nullptr); //// Get biomes associated with this decoration (if any) lua_getfield(L, index, "biomes"); @@ -1394,7 +1393,7 @@ int ModApiMapgen::l_register_ore(lua_State *L) //// Get type-specific parameters switch (oretype) { case ORE_SHEET: { - OreSheet *oresheet = (OreSheet *)ore; + OreSheet *oresheet = (OreSheet *)ore.get(); oresheet->column_height_min = getintfield_default(L, index, "column_height_min", 1); @@ -1406,7 +1405,7 @@ int ModApiMapgen::l_register_ore(lua_State *L) break; } case ORE_PUFF: { - OrePuff *orepuff = (OrePuff *)ore; + OrePuff *orepuff = (OrePuff *)ore.get(); lua_getfield(L, index, "np_puff_top"); read_noiseparams(L, -1, &orepuff->np_puff_top); @@ -1419,7 +1418,7 @@ int ModApiMapgen::l_register_ore(lua_State *L) break; } case ORE_VEIN: { - OreVein *orevein = (OreVein *)ore; + OreVein *orevein = (OreVein *)ore.get(); orevein->random_factor = getfloatfield_default(L, index, "random_factor", 1.f); @@ -1427,7 +1426,7 @@ int ModApiMapgen::l_register_ore(lua_State *L) break; } case ORE_STRATUM: { - OreStratum *orestratum = (OreStratum *)ore; + OreStratum *orestratum = (OreStratum *)ore.get(); lua_getfield(L, index, "np_stratum_thickness"); if (read_noiseparams(L, -1, &orestratum->np_stratum_thickness)) @@ -1443,9 +1442,8 @@ int ModApiMapgen::l_register_ore(lua_State *L) break; } - ObjDefHandle handle = oremgr->add(ore); + ObjDefHandle handle = oremgr->add(ore.get()); if (handle == OBJDEF_INVALID_HANDLE) { - delete ore; return 0; } @@ -1454,7 +1452,10 @@ int ModApiMapgen::l_register_ore(lua_State *L) size_t nnames = getstringlistfield(L, index, "wherein", &ore->m_nodenames); ore->m_nnlistsizes.push_back(nnames); - ndef->pendNodeResolve(ore); + ndef->pendNodeResolve(ore.get()); + + // We passed ownership of the ore object to oremgr earlier. + ore.release(); lua_pushinteger(L, handle); return 1; From a9fe83126a3f5c7240359272495eaf3eecd9a272 Mon Sep 17 00:00:00 2001 From: grorp Date: Fri, 15 Nov 2024 11:38:56 +0100 Subject: [PATCH 167/178] Get rid of depth buffer workaround in the render pipeline code (#15407) I originally wanted to get of the legacy IVideoDriver::setRenderTarget altogether, but that ended up being too much work. The remaining usage is in "dynamicshadowsrender.cpp". Here's a comment I wrote about the workaround: ---------------------------------------- Use legacy call when there's single texture without depth texture This means Irrlicht creates a depth texture for us and binds it to the FBO This is currently necessary for a working depth buffer in the following cases: - post-processing disabled, undersampling enabled (addUpscaling specifies no depth texture) - post-processing disabled, 3d_mode = sidebyside / topbottom / crossview (populateSideBySidePipeline specifies no depth texture) - post-processing disabled, 3d_mode = interlaced (probably, can't test since it's broken) (populateInterlacedPipeline specifies no depth texture) With post-processing disabled, the world is rendered to the TextureBufferOutput created in the functions listed above, so a depth buffer is needed (-> this workaround is needed). With post-processing enabled, only a fullscreen rectangle is rendered to this TextureBufferOutput, so a depth buffer isn't actually needed. But: These pipeline steps shouldn't rely on what ends up being rendered to the TextureBufferOutput they provide, since that may change. This workaround was added in 1e9640395468beb53f70303ef6b7aa72e395b7b4 / https://irc.minetest.net/minetest-dev/2022-10-04#i_6021940 This workaround should be replaced by explicitly configuring depth textures where needed. ---------------------------------------- --- builtin/settingtypes.txt | 2 ++ src/client/render/interlaced.cpp | 7 +++++++ src/client/render/pipeline.cpp | 9 +-------- src/client/render/plain.cpp | 32 ++++++++++++++++++++++++++----- src/client/render/plain.h | 5 ++++- src/client/render/secondstage.cpp | 12 ++---------- src/client/render/sidebyside.cpp | 14 +++++++++++--- 7 files changed, 54 insertions(+), 27 deletions(-) diff --git a/builtin/settingtypes.txt b/builtin/settingtypes.txt index 71d976ec7..f8f1dec05 100644 --- a/builtin/settingtypes.txt +++ b/builtin/settingtypes.txt @@ -263,6 +263,8 @@ viewing_range (Viewing range) int 190 20 4000 # to the game world only, keeping the GUI intact. # It should give a significant performance boost at the cost of less detailed image. # Higher values result in a less detailed image. +# Note: Undersampling is currently not supported if the "3d_mode" setting is set +# to a non-default value. undersampling (Undersampling) int 1 1 8 [**3D] diff --git a/src/client/render/interlaced.cpp b/src/client/render/interlaced.cpp index ae085877f..7399d9242 100644 --- a/src/client/render/interlaced.cpp +++ b/src/client/render/interlaced.cpp @@ -35,6 +35,13 @@ void InitInterlacedMaskStep::run(PipelineContext &context) void populateInterlacedPipeline(RenderPipeline *pipeline, Client *client) { + // FIXME: "3d_mode = interlaced" is currently broken. Two options: + // 1. Remove it + // 2. Fix it + // If you fix it, make sure to test it with "enable_post_processing = false". + // You'll probably have to add a depth texture to make that combination work. + // Also, this code should probably use selectColorFormat/selectDepthFormat. + static const u8 TEXTURE_LEFT = 0; static const u8 TEXTURE_RIGHT = 1; static const u8 TEXTURE_MASK = 2; diff --git a/src/client/render/pipeline.cpp b/src/client/render/pipeline.cpp index 5558d05b0..a37fd32fd 100644 --- a/src/client/render/pipeline.cpp +++ b/src/client/render/pipeline.cpp @@ -177,13 +177,6 @@ void TextureBufferOutput::activate(PipelineContext &context) size = texture->getSize(); } - // Use legacy call when there's single texture without depth texture - // This binds default depth buffer to the FBO - if (textures.size() == 1 && depth_stencil == NO_DEPTH_TEXTURE) { - driver->setRenderTarget(textures[0], m_clear, m_clear, context.clear_color); - return; - } - video::ITexture *depth_texture = nullptr; if (depth_stencil != NO_DEPTH_TEXTURE) depth_texture = buffer->getTexture(depth_stencil); @@ -211,7 +204,7 @@ video::ITexture *DynamicSource::getTexture(u8 index) void ScreenTarget::activate(PipelineContext &context) { auto driver = context.device->getVideoDriver(); - driver->setRenderTarget(nullptr, m_clear, m_clear, context.clear_color); + driver->setRenderTargetEx(nullptr, m_clear ? video::ECBF_ALL : video::ECBF_NONE, context.clear_color); driver->OnResize(size); RenderTarget::activate(context); } diff --git a/src/client/render/plain.cpp b/src/client/render/plain.cpp index 2215ad777..22b167518 100644 --- a/src/client/render/plain.cpp +++ b/src/client/render/plain.cpp @@ -104,9 +104,10 @@ static v2f getDownscaleFactor() return v2f(1.0f / undersampling); } -RenderStep* addUpscaling(RenderPipeline *pipeline, RenderStep *previousStep, v2f downscale_factor) +RenderStep* addUpscaling(RenderPipeline *pipeline, RenderStep *previousStep, v2f downscale_factor, Client *client) { - const int TEXTURE_UPSCALE = 0; + const int TEXTURE_LOWRES_COLOR = 0; + const int TEXTURE_LOWRES_DEPTH = 1; if (downscale_factor.X == 1.0f && downscale_factor.Y == 1.0f) return previousStep; @@ -115,13 +116,18 @@ RenderStep* addUpscaling(RenderPipeline *pipeline, RenderStep *previousStep, v2f if (g_settings->getBool("enable_post_processing")) return previousStep; + auto driver = client->getSceneManager()->getVideoDriver(); + video::ECOLOR_FORMAT color_format = selectColorFormat(driver); + video::ECOLOR_FORMAT depth_format = selectDepthFormat(driver); // Initialize buffer TextureBuffer *buffer = pipeline->createOwned(); - buffer->setTexture(TEXTURE_UPSCALE, downscale_factor, "upscale", video::ECF_A8R8G8B8); + buffer->setTexture(TEXTURE_LOWRES_COLOR, downscale_factor, "lowres_color", color_format); + buffer->setTexture(TEXTURE_LOWRES_DEPTH, downscale_factor, "lowres_depth", depth_format); // Attach previous step to the buffer - TextureBufferOutput *buffer_output = pipeline->createOwned(buffer, TEXTURE_UPSCALE); + TextureBufferOutput *buffer_output = pipeline->createOwned( + buffer, std::vector {TEXTURE_LOWRES_COLOR}, TEXTURE_LOWRES_DEPTH); previousStep->setRenderTarget(buffer_output); // Add upscaling step @@ -140,9 +146,25 @@ void populatePlainPipeline(RenderPipeline *pipeline, Client *client) pipeline->addStep(); pipeline->addStep(); - step3D = addUpscaling(pipeline, step3D, downscale_factor); + step3D = addUpscaling(pipeline, step3D, downscale_factor, client); step3D->setRenderTarget(pipeline->createOwned()); pipeline->addStep(); } + +video::ECOLOR_FORMAT selectColorFormat(video::IVideoDriver *driver) +{ + if (driver->queryTextureFormat(video::ECF_A16B16G16R16F)) + return video::ECF_A16B16G16R16F; + return video::ECF_A8R8G8B8; +} + +video::ECOLOR_FORMAT selectDepthFormat(video::IVideoDriver *driver) +{ + if (driver->queryTextureFormat(video::ECF_D32)) + return video::ECF_D32; + if (driver->queryTextureFormat(video::ECF_D24S8)) + return video::ECF_D24S8; + return video::ECF_D16; // fallback depth format +} diff --git a/src/client/render/plain.h b/src/client/render/plain.h index 889dd0f01..b0ce29608 100644 --- a/src/client/render/plain.h +++ b/src/client/render/plain.h @@ -82,6 +82,9 @@ private: }; std::unique_ptr create3DStage(Client *client, v2f scale); -RenderStep* addUpscaling(RenderPipeline *pipeline, RenderStep *previousStep, v2f downscale_factor); +RenderStep* addUpscaling(RenderPipeline *pipeline, RenderStep *previousStep, v2f downscale_factor, Client *client); void populatePlainPipeline(RenderPipeline *pipeline, Client *client); + +video::ECOLOR_FORMAT selectColorFormat(video::IVideoDriver *driver); +video::ECOLOR_FORMAT selectDepthFormat(video::IVideoDriver *driver); diff --git a/src/client/render/secondstage.cpp b/src/client/render/secondstage.cpp index b5156cd41..212074535 100644 --- a/src/client/render/secondstage.cpp +++ b/src/client/render/secondstage.cpp @@ -87,16 +87,8 @@ RenderStep *addPostProcessing(RenderPipeline *pipeline, RenderStep *previousStep auto driver = client->getSceneManager()->getVideoDriver(); // configure texture formats - video::ECOLOR_FORMAT color_format = video::ECF_A8R8G8B8; - if (driver->queryTextureFormat(video::ECF_A16B16G16R16F)) - color_format = video::ECF_A16B16G16R16F; - - video::ECOLOR_FORMAT depth_format = video::ECF_D16; // fallback depth format - if (driver->queryTextureFormat(video::ECF_D32)) - depth_format = video::ECF_D32; - else if (driver->queryTextureFormat(video::ECF_D24S8)) - depth_format = video::ECF_D24S8; - + video::ECOLOR_FORMAT color_format = selectColorFormat(driver); + video::ECOLOR_FORMAT depth_format = selectDepthFormat(driver); // init post-processing buffer static const u8 TEXTURE_COLOR = 0; diff --git a/src/client/render/sidebyside.cpp b/src/client/render/sidebyside.cpp index 02a7e7a86..57d5b474e 100644 --- a/src/client/render/sidebyside.cpp +++ b/src/client/render/sidebyside.cpp @@ -4,6 +4,7 @@ // Copyright (C) 2017 numzero, Lobachevskiy Vitaliy #include "sidebyside.h" +#include "client/client.h" #include "client/hud.h" #include "client/camera.h" @@ -35,6 +36,11 @@ void populateSideBySidePipeline(RenderPipeline *pipeline, Client *client, bool h { static const u8 TEXTURE_LEFT = 0; static const u8 TEXTURE_RIGHT = 1; + static const u8 TEXTURE_DEPTH = 2; + + auto driver = client->getSceneManager()->getVideoDriver(); + video::ECOLOR_FORMAT color_format = selectColorFormat(driver); + video::ECOLOR_FORMAT depth_format = selectDepthFormat(driver); v2f offset; if (horizontal) { @@ -47,15 +53,17 @@ void populateSideBySidePipeline(RenderPipeline *pipeline, Client *client, bool h } TextureBuffer *buffer = pipeline->createOwned(); - buffer->setTexture(TEXTURE_LEFT, virtual_size_scale, "3d_render_left", video::ECF_A8R8G8B8); - buffer->setTexture(TEXTURE_RIGHT, virtual_size_scale, "3d_render_right", video::ECF_A8R8G8B8); + buffer->setTexture(TEXTURE_LEFT, virtual_size_scale, "3d_render_left", color_format); + buffer->setTexture(TEXTURE_RIGHT, virtual_size_scale, "3d_render_right", color_format); + buffer->setTexture(TEXTURE_DEPTH, virtual_size_scale, "3d_depthmap_sidebyside", depth_format); auto step3D = pipeline->own(create3DStage(client, virtual_size_scale)); // eyes for (bool right : { false, true }) { pipeline->addStep(flipped ? !right : right); - auto output = pipeline->createOwned(buffer, right ? TEXTURE_RIGHT : TEXTURE_LEFT); + auto output = pipeline->createOwned( + buffer, std::vector {right ? TEXTURE_RIGHT : TEXTURE_LEFT}, TEXTURE_DEPTH); pipeline->addStep(step3D, output); pipeline->addStep(step3D); pipeline->addStep(); From 58dd42166df90425521a09102dc06ef1e9b783d1 Mon Sep 17 00:00:00 2001 From: sfence Date: Fri, 15 Nov 2024 11:39:08 +0100 Subject: [PATCH 168/178] Add some info to compiling README --- doc/compiling/README.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/doc/compiling/README.md b/doc/compiling/README.md index 70a78946f..55357adf6 100644 --- a/doc/compiling/README.md +++ b/doc/compiling/README.md @@ -61,7 +61,14 @@ Library specific options: GETTEXT_INCLUDE_DIR - Only when building with gettext; directory that contains libintl.h GETTEXT_LIBRARY - Optional/platform-dependent with gettext; path to libintl.so/libintl.dll.a GETTEXT_MSGFMT - Only when building with gettext; path to msgfmt/msgfmt.exe + GMP_INCLUDE_DIR - Directory that contains gmp.h + GMP_LIBRARY - Path to libgmp.a/libgmp.so/libgmp.lib ICONV_LIBRARY - Optional/platform-dependent; path to libiconv.so/libiconv.dylib + JPEG_DLL - Only on Windows; path to libjpeg.dll + JPEG_INCLUDE_DIR - Directory that contains jpeg.h + JPEG_LIBRARY - Path to libjpeg.a/libjpeg.so/libjpeg.lib + JSON_INCLUDE_DIR - Directory that contains json/allocator.h + JSON_LIBRARY - Path to libjson.a/libjson.so/libjson.lib LEVELDB_INCLUDE_DIR - Only when building with LevelDB; directory that contains db.h LEVELDB_LIBRARY - Only when building with LevelDB; path to libleveldb.a/libleveldb.so/libleveldb.dll.a LEVELDB_DLL - Only when building with LevelDB on Windows; path to libleveldb.dll @@ -79,6 +86,12 @@ Library specific options: OPENAL_DLL - Only if building with sound on Windows; path to OpenAL32.dll OPENAL_INCLUDE_DIR - Only if building with sound; directory where al.h is located OPENAL_LIBRARY - Only if building with sound; path to libopenal.a/libopenal.so/OpenAL32.lib + PNG_DLL - Only on Windows; path to libpng.dll + PNG_INCLUDE_DIR - Directory that contains png.h + PNG_LIBRARY - Path to libpng.a/libpng.so/libpng.lib + PROMETHEUS_PULL_LIBRARY - Only if building with prometheus; path to prometheus-cpp-pull + PROMETHEUS_CORE_LIBRARY - Only if building with prometheus; path to prometheus-cpp-core + PROMETHEUS_CPP_INCLUDE_DIR - Only if building with prometheus; directory where prometheus/counter.h is located SQLITE3_INCLUDE_DIR - Directory that contains sqlite3.h SQLITE3_LIBRARY - Path to libsqlite3.a/libsqlite3.so/sqlite3.lib VORBISFILE_LIBRARY - Only if building with sound; path to libvorbisfile.a/libvorbisfile.so/libvorbisfile.dll.a From 87ac32edeafafea662b62dc0a96fda9b663737b4 Mon Sep 17 00:00:00 2001 From: SmallJoker Date: Sat, 2 Nov 2024 15:52:29 +0100 Subject: [PATCH 169/178] Dynamic shadows: whitelist the 'opengl3' driver --- builtin/mainmenu/settings/dlg_settings.lua | 2 +- src/client/shadows/dynamicshadowsrender.cpp | 10 +++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/builtin/mainmenu/settings/dlg_settings.lua b/builtin/mainmenu/settings/dlg_settings.lua index f03596815..ef28398b1 100644 --- a/builtin/mainmenu/settings/dlg_settings.lua +++ b/builtin/mainmenu/settings/dlg_settings.lua @@ -351,7 +351,7 @@ local function check_requirements(name, requires) -- be used, so we show settings for both. touchscreen = touch_support and (touch_controls == "auto" or core.is_yes(touch_controls)), keyboard_mouse = not touch_support or (touch_controls == "auto" or not core.is_yes(touch_controls)), - opengl = video_driver == "opengl", + opengl = (video_driver == "opengl" or video_driver == "opengl3"), gles = video_driver:sub(1, 5) == "ogles", } diff --git a/src/client/shadows/dynamicshadowsrender.cpp b/src/client/shadows/dynamicshadowsrender.cpp index 2bf3adeb3..039ab1a98 100644 --- a/src/client/shadows/dynamicshadowsrender.cpp +++ b/src/client/shadows/dynamicshadowsrender.cpp @@ -694,9 +694,13 @@ std::string ShadowRenderer::readShaderFile(const std::string &path) ShadowRenderer *createShadowRenderer(IrrlichtDevice *device, Client *client) { // disable if unsupported - if (g_settings->getBool("enable_dynamic_shadows") && - device->getVideoDriver()->getDriverType() != video::EDT_OPENGL) { - g_settings->setBool("enable_dynamic_shadows", false); + if (g_settings->getBool("enable_dynamic_shadows")) { + // See also checks in builtin/mainmenu/settings/dlg_settings.lua + const video::E_DRIVER_TYPE type = device->getVideoDriver()->getDriverType(); + if (type != video::EDT_OPENGL && type != video::EDT_OPENGL3) { + warningstream << "Shadows: disabled dynamic shadows due to being unsupported" << std::endl; + g_settings->setBool("enable_dynamic_shadows", false); + } } if (g_settings->getBool("enable_dynamic_shadows")) { From 4838eb2f7de8477ef5be7e064d072954ff78e36c Mon Sep 17 00:00:00 2001 From: SmallJoker Date: Sat, 2 Nov 2024 15:51:44 +0100 Subject: [PATCH 170/178] Non-SDL: Add opengl3 support --- irr/src/CIrrDeviceLinux.cpp | 58 ++++++++++++++----------------------- irr/src/CIrrDeviceOSX.mm | 9 +----- irr/src/CIrrDeviceSDL.cpp | 47 ------------------------------ irr/src/CIrrDeviceStub.cpp | 36 +++++++++++++++++++++++ irr/src/CIrrDeviceStub.h | 10 ++++++- irr/src/CIrrDeviceWin32.cpp | 36 +++++++++-------------- irr/src/CMakeLists.txt | 18 ++++++++---- irr/src/COpenGLDriver.cpp | 18 ++---------- irr/src/OpenGL/Driver.cpp | 4 +-- irr/src/OpenGL3/Driver.cpp | 10 +++++-- 10 files changed, 107 insertions(+), 139 deletions(-) diff --git a/irr/src/CIrrDeviceLinux.cpp b/irr/src/CIrrDeviceLinux.cpp index f20be36f7..e88902936 100644 --- a/irr/src/CIrrDeviceLinux.cpp +++ b/irr/src/CIrrDeviceLinux.cpp @@ -38,7 +38,7 @@ #include "CEGLManager.h" #endif -#if defined(_IRR_COMPILE_WITH_OPENGL_) +#if defined(_IRR_COMPILE_WITH_GLX_MANAGER_) #include "CGLXManager.h" #endif @@ -69,24 +69,6 @@ #endif // _IRR_COMPILE_WITH_JOYSTICK_EVENTS_ -namespace irr -{ -namespace video -{ -#ifdef _IRR_COMPILE_WITH_OPENGL_ -IVideoDriver *createOpenGLDriver(const irr::SIrrlichtCreationParameters ¶ms, io::IFileSystem *io, IContextManager *contextManager); -#endif - -#ifdef _IRR_COMPILE_WITH_OGLES2_ -IVideoDriver *createOGLES2Driver(const irr::SIrrlichtCreationParameters ¶ms, io::IFileSystem *io, IContextManager *contextManager); -#endif - -#ifdef _IRR_COMPILE_WITH_WEBGL1_ -IVideoDriver *createWebGL1Driver(const irr::SIrrlichtCreationParameters ¶ms, io::IFileSystem *io, IContextManager *contextManager); -#endif -} -} // end namespace irr - namespace { Atom X_ATOM_CLIPBOARD; @@ -397,10 +379,11 @@ bool CIrrDeviceLinux::createWindow() if (WMCheck != None) HasNetWM = true; -#if defined(_IRR_COMPILE_WITH_OPENGL_) +#if defined(_IRR_COMPILE_WITH_GLX_MANAGER_) // don't use the XVisual with OpenGL, because it ignores all requested // properties of the CreationParams - if (CreationParams.DriverType == video::EDT_OPENGL) { + if (CreationParams.DriverType == video::EDT_OPENGL + || CreationParams.DriverType == video::EDT_OPENGL3) { video::SExposedVideoData data; data.OpenGLLinux.X11Display = XDisplay; ContextManager = new video::CGLXManager(CreationParams, data, Screennr); @@ -539,51 +522,54 @@ void CIrrDeviceLinux::createDriver() switch (CreationParams.DriverType) { #ifdef _IRR_COMPILE_WITH_X11_ case video::EDT_OPENGL: -#ifdef _IRR_COMPILE_WITH_OPENGL_ { +#ifdef _IRR_COMPILE_WITH_OPENGL_ video::SExposedVideoData data; data.OpenGLLinux.X11Window = XWindow; data.OpenGLLinux.X11Display = XDisplay; ContextManager->initialize(CreationParams, data); - +#endif VideoDriver = video::createOpenGLDriver(CreationParams, FileSystem, ContextManager); } -#else - os::Printer::log("No OpenGL support compiled in.", ELL_ERROR); + break; + case video::EDT_OPENGL3: + { +#ifdef ENABLE_OPENGL3 + video::SExposedVideoData data; + data.OpenGLLinux.X11Window = XWindow; + data.OpenGLLinux.X11Display = XDisplay; + + ContextManager->initialize(CreationParams, data); #endif + VideoDriver = video::createOpenGL3Driver(CreationParams, FileSystem, ContextManager); + } break; case video::EDT_OGLES2: -#ifdef _IRR_COMPILE_WITH_OGLES2_ { +#ifdef _IRR_COMPILE_WITH_OGLES2_ video::SExposedVideoData data; data.OpenGLLinux.X11Window = XWindow; data.OpenGLLinux.X11Display = XDisplay; ContextManager = new video::CEGLManager(); ContextManager->initialize(CreationParams, data); - +#endif VideoDriver = video::createOGLES2Driver(CreationParams, FileSystem, ContextManager); } -#else - os::Printer::log("No OpenGL-ES2 support compiled in.", ELL_ERROR); -#endif break; case video::EDT_WEBGL1: -#ifdef _IRR_COMPILE_WITH_WEBGL1_ { +#ifdef _IRR_COMPILE_WITH_WEBGL1_ video::SExposedVideoData data; data.OpenGLLinux.X11Window = XWindow; data.OpenGLLinux.X11Display = XDisplay; ContextManager = new video::CEGLManager(); ContextManager->initialize(CreationParams, data); - +#endif VideoDriver = video::createWebGL1Driver(CreationParams, FileSystem, ContextManager); } -#else - os::Printer::log("No WebGL1 support compiled in.", ELL_ERROR); -#endif break; case video::EDT_NULL: VideoDriver = video::createNullDriver(FileSystem, CreationParams.WindowSize); @@ -591,7 +577,7 @@ void CIrrDeviceLinux::createDriver() default: os::Printer::log("Unable to create video driver of unknown type.", ELL_ERROR); break; -#else +#else // no X11 case video::EDT_NULL: VideoDriver = video::createNullDriver(FileSystem, CreationParams.WindowSize); break; diff --git a/irr/src/CIrrDeviceOSX.mm b/irr/src/CIrrDeviceOSX.mm index 43c1c81b6..4b46e5e29 100644 --- a/irr/src/CIrrDeviceOSX.mm +++ b/irr/src/CIrrDeviceOSX.mm @@ -433,14 +433,6 @@ long GetDictionaryLong(CFDictionaryRef theDict, const void *key) return value; } -namespace irr -{ -namespace video -{ -IVideoDriver *createOpenGLDriver(const SIrrlichtCreationParameters ¶m, io::IFileSystem *io, IContextManager *contextManager); -} -} // end namespace irr - static bool firstLaunch = true; @implementation CIrrDelegateOSX { @@ -721,6 +713,7 @@ void CIrrDeviceMacOSX::createDriver() #endif break; + case video::EDT_OPENGL3: case video::EDT_OGLES2: os::Printer::log("This driver is not available on OSX.", ELL_ERROR); break; diff --git a/irr/src/CIrrDeviceSDL.cpp b/irr/src/CIrrDeviceSDL.cpp index 408027761..543bea63e 100644 --- a/irr/src/CIrrDeviceSDL.cpp +++ b/irr/src/CIrrDeviceSDL.cpp @@ -29,53 +29,6 @@ static int SDLDeviceInstances = 0; -namespace irr -{ -namespace video -{ -#ifdef _IRR_COMPILE_WITH_OPENGL_ -IVideoDriver *createOpenGLDriver(const SIrrlichtCreationParameters ¶ms, io::IFileSystem *io, IContextManager *contextManager); -#else -static IVideoDriver *createOpenGLDriver(const SIrrlichtCreationParameters ¶ms, io::IFileSystem *io, IContextManager *contextManager) -{ - os::Printer::log("No OpenGL support compiled in.", ELL_ERROR); - return nullptr; -} -#endif - -#ifdef ENABLE_OPENGL3 -IVideoDriver *createOpenGL3Driver(const SIrrlichtCreationParameters ¶ms, io::IFileSystem *io, IContextManager *contextManager); -#else -static IVideoDriver *createOpenGL3Driver(const SIrrlichtCreationParameters ¶ms, io::IFileSystem *io, IContextManager *contextManager) -{ - os::Printer::log("No OpenGL 3 support compiled in.", ELL_ERROR); - return nullptr; -} -#endif - -#ifdef _IRR_COMPILE_WITH_OGLES2_ -IVideoDriver *createOGLES2Driver(const SIrrlichtCreationParameters ¶ms, io::IFileSystem *io, IContextManager *contextManager); -#else -static IVideoDriver *createOGLES2Driver(const SIrrlichtCreationParameters ¶ms, io::IFileSystem *io, IContextManager *contextManager) -{ - os::Printer::log("No OpenGL ES 2 support compiled in.", ELL_ERROR); - return nullptr; -} -#endif - -#ifdef _IRR_COMPILE_WITH_WEBGL1_ -IVideoDriver *createWebGL1Driver(const SIrrlichtCreationParameters ¶ms, io::IFileSystem *io, IContextManager *contextManager); -#else -static IVideoDriver *createWebGL1Driver(const SIrrlichtCreationParameters ¶ms, io::IFileSystem *io, IContextManager *contextManager) -{ - os::Printer::log("No WebGL 1 support compiled in.", ELL_ERROR); - return nullptr; -} -#endif -} // end namespace video - -} // end namespace irr - namespace irr { #ifdef _IRR_EMSCRIPTEN_PLATFORM_ diff --git a/irr/src/CIrrDeviceStub.cpp b/irr/src/CIrrDeviceStub.cpp index fd8e458c8..2bd0fb1d0 100644 --- a/irr/src/CIrrDeviceStub.cpp +++ b/irr/src/CIrrDeviceStub.cpp @@ -17,6 +17,42 @@ namespace irr { +namespace video +{ +#ifndef _IRR_COMPILE_WITH_OPENGL_ +IVideoDriver *createOpenGLDriver(const SIrrlichtCreationParameters ¶ms, io::IFileSystem *io, IContextManager *contextManager) +{ + os::Printer::log("No OpenGL support compiled in.", ELL_ERROR); + return nullptr; +} +#endif + +#ifndef ENABLE_OPENGL3 +IVideoDriver *createOpenGL3Driver(const SIrrlichtCreationParameters ¶ms, io::IFileSystem *io, IContextManager *contextManager) +{ + os::Printer::log("No OpenGL 3 support compiled in.", ELL_ERROR); + return nullptr; +} +#endif + +#ifndef _IRR_COMPILE_WITH_OGLES2_ +IVideoDriver *createOGLES2Driver(const SIrrlichtCreationParameters ¶ms, io::IFileSystem *io, IContextManager *contextManager) +{ + os::Printer::log("No OpenGL ES 2 support compiled in.", ELL_ERROR); + return nullptr; +} +#endif + +#ifndef _IRR_COMPILE_WITH_WEBGL1_ +IVideoDriver *createWebGL1Driver(const SIrrlichtCreationParameters ¶ms, io::IFileSystem *io, IContextManager *contextManager) +{ + os::Printer::log("No WebGL 1 support compiled in.", ELL_ERROR); + return nullptr; +} +#endif +} + + //! constructor CIrrDeviceStub::CIrrDeviceStub(const SIrrlichtCreationParameters ¶ms) : IrrlichtDevice(), VideoDriver(0), GUIEnvironment(0), SceneManager(0), diff --git a/irr/src/CIrrDeviceStub.h b/irr/src/CIrrDeviceStub.h index 9a1966f01..c46fd64fc 100644 --- a/irr/src/CIrrDeviceStub.h +++ b/irr/src/CIrrDeviceStub.h @@ -33,7 +33,15 @@ IFileSystem *createFileSystem(); namespace video { -IVideoDriver *createNullDriver(io::IFileSystem *io, const core::dimension2d &screenSize); + IVideoDriver *createNullDriver(io::IFileSystem *io, const core::dimension2d &screenSize); + + IVideoDriver *createOpenGLDriver(const SIrrlichtCreationParameters ¶ms, io::IFileSystem *io, IContextManager *contextManager); + + IVideoDriver *createOpenGL3Driver(const SIrrlichtCreationParameters ¶ms, io::IFileSystem *io, IContextManager *contextManager); + + IVideoDriver *createOGLES2Driver(const SIrrlichtCreationParameters ¶ms, io::IFileSystem *io, IContextManager *contextManager); + + IVideoDriver *createWebGL1Driver(const SIrrlichtCreationParameters ¶ms, io::IFileSystem *io, IContextManager *contextManager); } //! Stub for an Irrlicht Device implementation diff --git a/irr/src/CIrrDeviceWin32.cpp b/irr/src/CIrrDeviceWin32.cpp index 366be8013..417694517 100644 --- a/irr/src/CIrrDeviceWin32.cpp +++ b/irr/src/CIrrDeviceWin32.cpp @@ -34,24 +34,10 @@ #include "CEGLManager.h" #endif -#if defined(_IRR_COMPILE_WITH_OPENGL_) +#if defined(_IRR_COMPILE_WITH_WGL_MANAGER_) #include "CWGLManager.h" #endif -namespace irr -{ -namespace video -{ -#ifdef _IRR_COMPILE_WITH_OPENGL_ -IVideoDriver *createOpenGLDriver(const irr::SIrrlichtCreationParameters ¶ms, io::IFileSystem *io, IContextManager *contextManager); -#endif - -#ifdef _IRR_COMPILE_WITH_OGLES2_ -IVideoDriver *createOGLES2Driver(const irr::SIrrlichtCreationParameters ¶ms, io::IFileSystem *io, IContextManager *contextManager); -#endif -} -} // end namespace irr - namespace irr { struct SJoystickWin32Control @@ -880,14 +866,23 @@ void CIrrDeviceWin32::createDriver() ContextManager = new video::CWGLManager(); ContextManager->initialize(CreationParams, video::SExposedVideoData(HWnd)); - +#endif VideoDriver = video::createOpenGLDriver(CreationParams, FileSystem, ContextManager); if (!VideoDriver) os::Printer::log("Could not create OpenGL driver.", ELL_ERROR); -#else - os::Printer::log("OpenGL driver was not compiled in.", ELL_ERROR); + break; + case video::EDT_OPENGL3: +#ifdef ENABLE_OPENGL3 + switchToFullScreen(); + + ContextManager = new video::CWGLManager(); + ContextManager->initialize(CreationParams, video::SExposedVideoData(HWnd)); #endif + VideoDriver = video::createOpenGL3Driver(CreationParams, FileSystem, ContextManager); + + if (!VideoDriver) + os::Printer::log("Could not create OpenGL 3 driver.", ELL_ERROR); break; case video::EDT_OGLES2: #ifdef _IRR_COMPILE_WITH_OGLES2_ @@ -895,14 +890,11 @@ void CIrrDeviceWin32::createDriver() ContextManager = new video::CEGLManager(); ContextManager->initialize(CreationParams, video::SExposedVideoData(HWnd)); - +#endif VideoDriver = video::createOGLES2Driver(CreationParams, FileSystem, ContextManager); if (!VideoDriver) os::Printer::log("Could not create OpenGL-ES2 driver.", ELL_ERROR); -#else - os::Printer::log("OpenGL-ES2 driver was not compiled in.", ELL_ERROR); -#endif break; case video::EDT_WEBGL1: os::Printer::log("WebGL1 driver not supported on Win32 device.", ELL_ERROR); diff --git a/irr/src/CMakeLists.txt b/irr/src/CMakeLists.txt index 3b578d699..b95c3ef73 100644 --- a/irr/src/CMakeLists.txt +++ b/irr/src/CMakeLists.txt @@ -123,10 +123,10 @@ if(USE_SDL2) if(NOT ANDROID) set(DEFAULT_OPENGL3 TRUE) endif() - option(ENABLE_OPENGL3 "Enable OpenGL 3+" ${DEFAULT_OPENGL3}) else() - set(ENABLE_OPENGL3 FALSE) + set(DEFAULT_OPENGL3 FALSE) endif() +option(ENABLE_OPENGL3 "Enable OpenGL 3+" ${DEFAULT_OPENGL3}) if(ANDROID OR EMSCRIPTEN) set(ENABLE_OPENGL FALSE) @@ -152,9 +152,11 @@ else() endif() endif() -if(ENABLE_OPENGL) - add_definitions(-D_IRR_COMPILE_WITH_OPENGL_) - set(OPENGL_DIRECT_LINK TRUE) # driver relies on this +if(ENABLE_OPENGL OR (ENABLE_OPENGL3 AND NOT USE_SDL2)) + if(ENABLE_OPENGL) + add_definitions(-D_IRR_COMPILE_WITH_OPENGL_) + set(OPENGL_DIRECT_LINK TRUE) # driver relies on this + endif() if(DEVICE STREQUAL "WINDOWS") add_definitions(-D_IRR_COMPILE_WITH_WGL_MANAGER_) elseif(DEVICE STREQUAL "X11") @@ -165,7 +167,11 @@ if(ENABLE_OPENGL) endif() if(ENABLE_OPENGL3) - if (NOT USE_SDL2) + if(DEVICE STREQUAL "WINDOWS") + # supported + elseif(DEVICE STREQUAL "X11") + # supported + elseif (NOT USE_SDL2) message(FATAL_ERROR "OpenGL 3 driver requires SDL2") endif() endif() diff --git a/irr/src/COpenGLDriver.cpp b/irr/src/COpenGLDriver.cpp index ee63fc845..2cbf6d8e6 100644 --- a/irr/src/COpenGLDriver.cpp +++ b/irr/src/COpenGLDriver.cpp @@ -3239,19 +3239,9 @@ COpenGLCacheHandler *COpenGLDriver::getCacheHandler() const return CacheHandler; } -} // end namespace -} // end namespace - -#endif // _IRR_COMPILE_WITH_OPENGL_ - -namespace irr -{ -namespace video -{ IVideoDriver *createOpenGLDriver(const SIrrlichtCreationParameters ¶ms, io::IFileSystem *io, IContextManager *contextManager) { -#ifdef _IRR_COMPILE_WITH_OPENGL_ COpenGLDriver *ogl = new COpenGLDriver(params, io, contextManager); if (!ogl->initDriver()) { @@ -3260,10 +3250,8 @@ IVideoDriver *createOpenGLDriver(const SIrrlichtCreationParameters ¶ms, io:: } return ogl; -#else - return 0; -#endif } -} // end namespace -} // end namespace +} // end namespace video +} // end namespace irr +#endif // opengl diff --git a/irr/src/OpenGL/Driver.cpp b/irr/src/OpenGL/Driver.cpp index fe9a24758..4f3ac627a 100644 --- a/irr/src/OpenGL/Driver.cpp +++ b/irr/src/OpenGL/Driver.cpp @@ -226,8 +226,8 @@ void COpenGL3DriverBase::initVersion() printVersion(); // print renderer information - VendorName = GL.GetString(GL_VENDOR); - os::Printer::log("Vendor", VendorName.c_str(), ELL_INFORMATION); + VendorName = GL.GetString(GL_RENDERER); + os::Printer::log("Renderer", VendorName.c_str(), ELL_INFORMATION); Version = getVersionFromOpenGL(); } diff --git a/irr/src/OpenGL3/Driver.cpp b/irr/src/OpenGL3/Driver.cpp index fd018b91d..53cb8c7ed 100644 --- a/irr/src/OpenGL3/Driver.cpp +++ b/irr/src/OpenGL3/Driver.cpp @@ -34,8 +34,14 @@ OpenGLVersion COpenGL3Driver::getVersionFromOpenGL() const void COpenGL3Driver::initFeatures() { - assert(Version.Spec == OpenGLSpec::Compat); - assert(isVersionAtLeast(3, 2)); + if (Version.Spec != OpenGLSpec::Compat) { + os::Printer::log("OpenGL 3 driver requires Compatibility Mode", ELL_ERROR); + throw std::exception(); + } + if (!isVersionAtLeast(3, 2)) { + os::Printer::log("OpenGL 3 driver requires OpenGL >= 3.2 ", ELL_ERROR); + throw std::exception(); + } initExtensions(); TextureFormats[ECF_A1R5G5B5] = {GL_RGB5_A1, GL_BGRA, GL_UNSIGNED_SHORT_1_5_5_5_REV}; // WARNING: may not be renderable From 8f03b705841e4fbdb11f6c09facdc0a9a6f5abda Mon Sep 17 00:00:00 2001 From: SmallJoker Date: Sun, 3 Nov 2024 08:20:51 +0100 Subject: [PATCH 171/178] IrrlichtMt: Document Driver/Device compatibility --- irr/README.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/irr/README.md b/irr/README.md index 50e7338a5..449903cfe 100644 --- a/irr/README.md +++ b/irr/README.md @@ -36,6 +36,27 @@ We aim to support these platforms: This doesn't mean other platforms don't work or won't be supported, if you find something that doesn't work contributions are welcome. +Compatibility matrix +-------------------- + +Driver (rows) vs Device (columns) + +| | SDL [1] | Linux [2] | OSX [3] | Win32 [4] | +|---------------------------|----------|----------------|------------------|-----------------| +| OpenGL 1.2 (to 2.1) | Works | Works (GLX) | Works (NSOpenGL) | Works (WGL) | +| OpenGL 3.2+ | Works | Testing (GLX) | Not implemented | Testing (WGL) | +| OpenGL ES 2.x | Works | Untested (EGL) | Not implemented | Untested (EGL) | +| WebGL 1 | Untested | Untested (EGL) | Not implemented | Not implemented | +| Null (no graphics output) | Works | Works | Works | Works | + +Notes: + +* [1] `CIrrDeviceSDL`: supports Android, Linux, macOS, Windows +* [2] `CIrrDeviceLinux`: supports Linux +* [3] `CIrrDeviceOSX`: supports macOS +* [4] `CIrrDeviceWin32`: supports Windows + + License ------- From 46f0baff090855d08e512c2913a5f1b9636f5019 Mon Sep 17 00:00:00 2001 From: Erich Schubert Date: Fri, 15 Nov 2024 12:19:41 +0100 Subject: [PATCH 172/178] Improve documentation of liquid_surface (#15012) --- doc/lua_api.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/doc/lua_api.md b/doc/lua_api.md index ba3a0e630..d3310e027 100644 --- a/doc/lua_api.md +++ b/doc/lua_api.md @@ -10788,10 +10788,9 @@ See [Decoration types]. Used by `core.register_decoration`. flags = "liquid_surface, force_placement, all_floors, all_ceilings", -- Flags for all decoration types. - -- "liquid_surface": Instead of placement on the highest solid surface - -- in a mapchunk column, placement is on the highest liquid surface. - -- Placement is disabled if solid nodes are found above the liquid - -- surface. + -- "liquid_surface": Find the highest liquid (not solid) surface under + -- open air. Search stops and fails on the first solid node. + -- Cannot be used with "all_floors" or "all_ceilings" below. -- "force_placement": Nodes other than "air" and "ignore" are replaced -- by the decoration. -- "all_floors", "all_ceilings": Instead of placement on the highest From 11837d4623bf0eab0b706ed2cc81bf0bcfb79da8 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Fri, 15 Nov 2024 12:21:30 +0100 Subject: [PATCH 173/178] Remove BMP image support (#15434) Co-authored-by: Lars Mueller --- doc/lua_api.md | 6 +- irr/include/irrlicht.h | 113 ---------- irr/src/CColorConverter.cpp | 87 -------- irr/src/CColorConverter.h | 8 - irr/src/CImageLoaderBMP.cpp | 402 ------------------------------------ irr/src/CImageLoaderBMP.h | 81 -------- irr/src/CMakeLists.txt | 1 - irr/src/CNullDriver.cpp | 4 - src/client/client.cpp | 2 +- src/client/texturepaths.cpp | 6 +- src/server.cpp | 9 +- 11 files changed, 6 insertions(+), 713 deletions(-) delete mode 100644 irr/src/CImageLoaderBMP.cpp delete mode 100644 irr/src/CImageLoaderBMP.h diff --git a/doc/lua_api.md b/doc/lua_api.md index d3310e027..48ef798c4 100644 --- a/doc/lua_api.md +++ b/doc/lua_api.md @@ -276,7 +276,7 @@ the clients (see [Translations]). Accepted characters for names are: Accepted formats are: - images: .png, .jpg, .tga, (deprecated:) .bmp + images: .png, .jpg, .tga sounds: .ogg vorbis models: .x, .b3d, .obj, (since version 5.10:) .gltf, .glb @@ -486,9 +486,7 @@ stripping out the file extension: * e.g. `foomod_foothing.png` * e.g. `foomod_foothing` -Supported texture formats are PNG (`.png`), JPEG (`.jpg`), Bitmap (`.bmp`) -and Targa (`.tga`). -Since better alternatives exist, the latter two may be removed in the future. +Supported texture formats are PNG (`.png`), JPEG (`.jpg`) and Targa (`.tga`). Texture modifiers ----------------- diff --git a/irr/include/irrlicht.h b/irr/include/irrlicht.h index 14a190e53..8bac30e3d 100644 --- a/irr/include/irrlicht.h +++ b/irr/include/irrlicht.h @@ -36,119 +36,6 @@ #include "SIrrCreationParameters.h" #include "IrrCompileConfig.h" // for IRRLICHT_API and IRRCALLCONV -/*! \mainpage Irrlicht Engine 1.9 API documentation - * - *
    - * - * \section intro Introduction - * - * Welcome to the Irrlicht Engine API documentation. - * Here you'll find any information you'll need to develop applications with - * the Irrlicht Engine. If you are looking for a tutorial on how to start, you'll - * find some on the homepage of the Irrlicht Engine at - * irrlicht.sourceforge.net - * or inside the SDK in the examples directory. - * - * The Irrlicht Engine is intended to be an easy-to-use 3d engine, so - * this documentation is an important part of it. If you have any questions or - * suggestions, just send a email to the author of the engine, Nikolaus Gebhardt - * (niko (at) irrlicht3d.org). - * - * - * \section links Links - * - * Namespaces: A very good place to start reading - * the documentation.
    - * Class list: List of all classes with descriptions.
    - * Class members: Good place to find forgotten features.
    - * - * \section irrexample Short example - * - * A simple application, starting up the engine, loading a Quake 2 animated - * model file and the corresponding texture, animating and displaying it - * in front of a blue background and placing a user controlable 3d camera - * would look like the following code. I think this example shows the usage - * of the engine quite well: - * - * \code - * #include - * // include a bunch of other stuff... - * - * using namespace irr; - * - * int main() - * { - * // start up the engine - * IrrlichtDevice *device = createDevice(video::EDT_OPENGL, - * core::dimension2d(640,480)); - * - * video::IVideoDriver* driver = device->getVideoDriver(); - * scene::ISceneManager* scenemgr = device->getSceneManager(); - * - * device->setWindowCaption(L"Hello World!"); - * - * // load and show quake2 .md2 model - * scene::ISceneNode* node = scenemgr->addAnimatedMeshSceneNode( - * scenemgr->getMesh("quake2model.md2")); - * - * // if everything worked, add a texture and disable lighting - * if (node) - * { - * node->setMaterialTexture(0, driver->getTexture("texture.bmp")); - * node->setMaterialFlag(video::EMF_LIGHTING, false); - * } - * - * // add a first person shooter style user controlled camera - * scenemgr->addCameraSceneNodeFPS(); - * - * // draw everything - * while(device->run() && driver) - * { - * driver->beginScene(video::ECBF_COLOR | video::ECBF_DEPTH, video::SColor(255,0,0,255)); - * scenemgr->drawAll(); - * driver->endScene(); - * } - * - * // delete device - * device->drop(); - * return 0; - * } - * \endcode - * - * Irrlicht can load a lot of file formats automatically, see irr::scene::ISceneManager::getMesh() - * for a detailed list. So if you would like to replace the simple blue screen background by - * a cool Quake 3 Map, optimized by an octree, just insert this code - * somewhere before the while loop: - * - * \code - * // add .pk3 archive to the file system - * device->getFileSystem()->addZipFileArchive("quake3map.pk3"); - * - * // load .bsp file and show it using an octree - * scenemgr->addOctreeSceneNode( - * scenemgr->getMesh("quake3map.bsp")); - * \endcode - * - * As you can see, the engine uses namespaces. Everything in the engine is - * placed into the namespace 'irr', but there are also 5 sub namespaces. - * You can find a list of all namespaces with descriptions at the - * namespaces page. - * This is also a good place to start reading the documentation. If you - * don't want to write the namespace names all the time, just use all namespaces like - * this: - * \code - * using namespace core; - * using namespace scene; - * using namespace video; - * using namespace io; - * using namespace gui; - * \endcode - * - * There is a lot more the engine can do, but I hope this gave a short - * overview over the basic features of the engine. For more examples, please take - * a look into the examples directory of the SDK. - */ - //! Everything in the Irrlicht Engine can be found in this namespace. namespace irr { diff --git a/irr/src/CColorConverter.cpp b/irr/src/CColorConverter.cpp index 96b22c544..7749ececf 100644 --- a/irr/src/CColorConverter.cpp +++ b/irr/src/CColorConverter.cpp @@ -12,93 +12,6 @@ namespace irr namespace video { -//! converts a monochrome bitmap to A1R5G5B5 data -void CColorConverter::convert1BitTo16Bit(const u8 *in, s16 *out, s32 width, s32 height, s32 linepad, bool flip) -{ - if (!in || !out) - return; - - if (flip) - out += width * height; - - for (s32 y = 0; y < height; ++y) { - s32 shift = 7; - if (flip) - out -= width; - - for (s32 x = 0; x < width; ++x) { - out[x] = *in >> shift & 0x01 ? (s16)0xffff : (s16)0x8000; - - if ((--shift) < 0) { // 8 pixel done - shift = 7; - ++in; - } - } - - if (shift != 7) // width did not fill last byte - ++in; - - if (!flip) - out += width; - in += linepad; - } -} - -//! converts a 4 bit palettized image to A1R5G5B5 -void CColorConverter::convert4BitTo16Bit(const u8 *in, s16 *out, s32 width, s32 height, const s32 *palette, s32 linepad, bool flip) -{ - if (!in || !out || !palette) - return; - - if (flip) - out += width * height; - - for (s32 y = 0; y < height; ++y) { - s32 shift = 4; - if (flip) - out -= width; - - for (s32 x = 0; x < width; ++x) { - out[x] = X8R8G8B8toA1R5G5B5(palette[(u8)((*in >> shift) & 0xf)]); - - if (shift == 0) { - shift = 4; - ++in; - } else - shift = 0; - } - - if (shift == 0) // odd width - ++in; - - if (!flip) - out += width; - in += linepad; - } -} - -//! converts a 8 bit palettized image into A1R5G5B5 -void CColorConverter::convert8BitTo16Bit(const u8 *in, s16 *out, s32 width, s32 height, const s32 *palette, s32 linepad, bool flip) -{ - if (!in || !out || !palette) - return; - - if (flip) - out += width * height; - - for (s32 y = 0; y < height; ++y) { - if (flip) - out -= width; // one line back - for (s32 x = 0; x < width; ++x) { - out[x] = X8R8G8B8toA1R5G5B5(palette[(u8)(*in)]); - ++in; - } - if (!flip) - out += width; - in += linepad; - } -} - //! converts a 8 bit palettized or non palettized image (A8) into R8G8B8 void CColorConverter::convert8BitTo24Bit(const u8 *in, u8 *out, s32 width, s32 height, const u8 *palette, s32 linepad, bool flip) { diff --git a/irr/src/CColorConverter.h b/irr/src/CColorConverter.h index 7f1628297..af7b13726 100644 --- a/irr/src/CColorConverter.h +++ b/irr/src/CColorConverter.h @@ -15,14 +15,6 @@ namespace video class CColorConverter { public: - //! converts a monochrome bitmap to A1R5G5B5 - static void convert1BitTo16Bit(const u8 *in, s16 *out, s32 width, s32 height, s32 linepad = 0, bool flip = false); - - //! converts a 4 bit palettized image to A1R5G5B5 - static void convert4BitTo16Bit(const u8 *in, s16 *out, s32 width, s32 height, const s32 *palette, s32 linepad = 0, bool flip = false); - - //! converts a 8 bit palettized image to A1R5G5B5 - static void convert8BitTo16Bit(const u8 *in, s16 *out, s32 width, s32 height, const s32 *palette, s32 linepad = 0, bool flip = false); //! converts a 8 bit palettized or non palettized image (A8) into R8G8B8 static void convert8BitTo24Bit(const u8 *in, u8 *out, s32 width, s32 height, const u8 *palette, s32 linepad = 0, bool flip = false); diff --git a/irr/src/CImageLoaderBMP.cpp b/irr/src/CImageLoaderBMP.cpp deleted file mode 100644 index 40989882e..000000000 --- a/irr/src/CImageLoaderBMP.cpp +++ /dev/null @@ -1,402 +0,0 @@ -// Copyright (C) 2002-2012 Nikolaus Gebhardt -// This file is part of the "Irrlicht Engine". -// For conditions of distribution and use, see copyright notice in irrlicht.h - -#include "CImageLoaderBMP.h" - -#include "IReadFile.h" -#include "SColor.h" -#include "CColorConverter.h" -#include "CImage.h" -#include "coreutil.h" -#include "os.h" - -namespace irr -{ -namespace video -{ - -//! constructor -CImageLoaderBMP::CImageLoaderBMP() -{ -#ifdef _DEBUG - setDebugName("CImageLoaderBMP"); -#endif -} - -//! returns true if the file maybe is able to be loaded by this class -//! based on the file extension (e.g. ".tga") -bool CImageLoaderBMP::isALoadableFileExtension(const io::path &filename) const -{ - return core::hasFileExtension(filename, "bmp"); -} - -//! returns true if the file maybe is able to be loaded by this class -bool CImageLoaderBMP::isALoadableFileFormat(io::IReadFile *file) const -{ - u16 headerID; - file->read(&headerID, sizeof(u16)); -#ifdef __BIG_ENDIAN__ - headerID = os::Byteswap::byteswap(headerID); -#endif - return headerID == 0x4d42; -} - -// UB-safe overflow check -static inline bool overflowCheck(const void *base, size_t offset, const void *end) -{ - auto baseI = reinterpret_cast(base), - endI = reinterpret_cast(end); - return baseI > endI || offset >= (endI - baseI); -} -// check whether &p[0] to &p[_off - 1] can be accessed -#define CHECKP(_off) \ - if ((_off) < 0 || overflowCheck(p, _off, pEnd)) \ - goto exit -// same for d -#define CHECKD(_off) \ - if ((_off) < 0 || overflowCheck(d, _off, destEnd)) \ - goto exit - -void CImageLoaderBMP::decompress8BitRLE(u8 *&bmpData, s32 size, s32 width, s32 height, s32 pitch) const -{ - u8 *p = bmpData; - const u8 *pEnd = bmpData + size; - u8 *newBmp = new u8[(width + pitch) * height]; - u8 *d = newBmp; - const u8 *destEnd = newBmp + (width + pitch) * height; - s32 line = 0; - - while (p < pEnd && d < destEnd) { - if (*p == 0) { - ++p; - CHECKP(1); - - switch (*p) { - case 0: // end of line - ++p; - ++line; - d = newBmp + (line * (width + pitch)); - break; - case 1: // end of bmp - goto exit; - case 2: - ++p; - CHECKP(2); - d += (u8)*p; - ++p; // delta - d += ((u8)*p) * (width + pitch); - ++p; - break; - default: { - // absolute mode - s32 count = (u8)*p; - ++p; - s32 readAdditional = ((2 - (count % 2)) % 2); - - CHECKP(count); - CHECKD(count); - for (s32 i = 0; i < count; ++i) { - *d = *p; - ++p; - ++d; - } - - CHECKP(readAdditional); - for (s32 i = 0; i < readAdditional; ++i) - ++p; - } - } - } else { - s32 count = (u8)*p; - ++p; - CHECKP(1); - u8 color = *p; - ++p; - CHECKD(count); - for (s32 i = 0; i < count; ++i) { - *d = color; - ++d; - } - } - } - -exit: - delete[] bmpData; - bmpData = newBmp; -} - -// how many bytes will be touched given the current state of decompress4BitRLE -static inline u32 shiftedCount(s32 count, s32 shift) -{ - _IRR_DEBUG_BREAK_IF(count < 0) - u32 ret = count / 2; - if (shift == 0 || count % 2 == 1) - ++ret; - return ret; -} - -void CImageLoaderBMP::decompress4BitRLE(u8 *&bmpData, s32 size, s32 width, s32 height, s32 pitch) const -{ - const s32 lineWidth = (width + 1) / 2 + pitch; - u8 *p = bmpData; - const u8 *pEnd = bmpData + size; - u8 *newBmp = new u8[lineWidth * height]; - u8 *d = newBmp; - const u8 *destEnd = newBmp + lineWidth * height; - s32 line = 0; - s32 shift = 4; - - while (p < pEnd && d < destEnd) { - if (*p == 0) { - ++p; - CHECKP(1); - - switch (*p) { - case 0: // end of line - ++p; - ++line; - d = newBmp + (line * lineWidth); - shift = 4; - break; - case 1: // end of bmp - goto exit; - case 2: { - ++p; - CHECKP(2); - s32 x = (u8)*p; - ++p; - s32 y = (u8)*p; - ++p; - d += x / 2 + y * lineWidth; - shift = x % 2 == 0 ? 4 : 0; - } break; - default: { - // absolute mode - s32 count = (u8)*p; - ++p; - s32 readAdditional = ((2 - ((count) % 2)) % 2); - s32 readShift = 4; - - CHECKP(shiftedCount(count, readShift)); - CHECKD(shiftedCount(count, shift)); - for (s32 i = 0; i < count; ++i) { - s32 color = (((u8)*p) >> readShift) & 0x0f; - readShift -= 4; - if (readShift < 0) { - ++*p; // <- bug? - readShift = 4; - } - - u8 mask = 0x0f << shift; - *d = (*d & (~mask)) | ((color << shift) & mask); - - shift -= 4; - if (shift < 0) { - shift = 4; - ++d; - } - } - - CHECKP(readAdditional); - for (s32 i = 0; i < readAdditional; ++i) - ++p; - } - } - } else { - s32 count = (u8)*p; - ++p; - CHECKP(1); - s32 color1 = (u8)*p; - color1 = color1 & 0x0f; - s32 color2 = (u8)*p; - color2 = (color2 >> 4) & 0x0f; - ++p; - - CHECKD(shiftedCount(count, shift)); - for (s32 i = 0; i < count; ++i) { - u8 mask = 0x0f << shift; - u8 toSet = (shift == 0 ? color1 : color2) << shift; - *d = (*d & (~mask)) | (toSet & mask); - - shift -= 4; - if (shift < 0) { - shift = 4; - ++d; - } - } - } - } - -exit: - delete[] bmpData; - bmpData = newBmp; -} - -#undef CHECKOFF -#undef CHECKP -#undef CHECKD - -//! creates a surface from the file -IImage *CImageLoaderBMP::loadImage(io::IReadFile *file) const -{ - SBMPHeader header; - - file->read(&header, sizeof(header)); - -#ifdef __BIG_ENDIAN__ - header.Id = os::Byteswap::byteswap(header.Id); - header.FileSize = os::Byteswap::byteswap(header.FileSize); - header.BitmapDataOffset = os::Byteswap::byteswap(header.BitmapDataOffset); - header.BitmapHeaderSize = os::Byteswap::byteswap(header.BitmapHeaderSize); - header.Width = os::Byteswap::byteswap(header.Width); - header.Height = os::Byteswap::byteswap(header.Height); - header.Planes = os::Byteswap::byteswap(header.Planes); - header.BPP = os::Byteswap::byteswap(header.BPP); - header.Compression = os::Byteswap::byteswap(header.Compression); - header.BitmapDataSize = os::Byteswap::byteswap(header.BitmapDataSize); - header.PixelPerMeterX = os::Byteswap::byteswap(header.PixelPerMeterX); - header.PixelPerMeterY = os::Byteswap::byteswap(header.PixelPerMeterY); - header.Colors = os::Byteswap::byteswap(header.Colors); - header.ImportantColors = os::Byteswap::byteswap(header.ImportantColors); -#endif - - s32 pitch = 0; - - //! return if the header is false - - if (header.Id != 0x4d42) - return 0; - - if (header.Compression > 2) { // we'll only handle RLE-Compression - os::Printer::log("Compression mode not supported.", ELL_ERROR); - return 0; - } - - if (header.BPP > 32 || !checkImageDimensions(header.Width, header.Height)) { - os::Printer::log("Rejecting BMP with unreasonable size or BPP.", ELL_ERROR); - return 0; - } - - // adjust bitmap data size to dword boundary - header.BitmapDataSize += (4 - (header.BitmapDataSize % 4)) % 4; - - // read palette - - long pos = file->getPos(); - constexpr s32 paletteAllocSize = 256; - s32 paletteSize = (header.BitmapDataOffset - pos) / 4; - paletteSize = core::clamp(paletteSize, 0, paletteAllocSize); - - s32 *paletteData = 0; - if (paletteSize) { - // always allocate an 8-bit palette to ensure enough space - paletteData = new s32[paletteAllocSize]; - memset(paletteData, 0, paletteAllocSize * sizeof(s32)); - file->read(paletteData, paletteSize * sizeof(s32)); -#ifdef __BIG_ENDIAN__ - for (s32 i = 0; i < paletteSize; ++i) - paletteData[i] = os::Byteswap::byteswap(paletteData[i]); -#endif - } - - // read image data - - if (!header.BitmapDataSize) { - // okay, lets guess the size - // some tools simply don't set it - header.BitmapDataSize = static_cast(file->getSize()) - header.BitmapDataOffset; - } - - file->seek(header.BitmapDataOffset); - - s32 widthInBytes; - { - f32 t = (header.Width) * (header.BPP / 8.0f); - widthInBytes = (s32)t; - t -= widthInBytes; - if (t != 0.0f) - ++widthInBytes; - } - - const s32 lineSize = widthInBytes + ((4 - (widthInBytes % 4))) % 4; - pitch = lineSize - widthInBytes; - - u8 *bmpData = new u8[header.BitmapDataSize]; - file->read(bmpData, header.BitmapDataSize); - - // decompress data if needed - switch (header.Compression) { - case 1: // 8 bit rle - decompress8BitRLE(bmpData, header.BitmapDataSize, header.Width, header.Height, pitch); - header.BitmapDataSize = (header.Width + pitch) * header.Height; - break; - case 2: // 4 bit rle - decompress4BitRLE(bmpData, header.BitmapDataSize, header.Width, header.Height, pitch); - header.BitmapDataSize = ((header.Width + 1) / 2 + pitch) * header.Height; - break; - } - - if (header.BitmapDataSize < lineSize * header.Height) { - os::Printer::log("Bitmap data is cut off.", ELL_ERROR); - - delete[] paletteData; - delete[] bmpData; - return 0; - } - - // create surface - core::dimension2d dim; - dim.Width = header.Width; - dim.Height = header.Height; - - IImage *image = 0; - switch (header.BPP) { - case 1: - image = new CImage(ECF_A1R5G5B5, dim); - if (image) - CColorConverter::convert1BitTo16Bit(bmpData, (s16 *)image->getData(), header.Width, header.Height, pitch, true); - break; - case 4: - image = new CImage(ECF_A1R5G5B5, dim); - if (image) - CColorConverter::convert4BitTo16Bit(bmpData, (s16 *)image->getData(), header.Width, header.Height, paletteData, pitch, true); - break; - case 8: - image = new CImage(ECF_A1R5G5B5, dim); - if (image) - CColorConverter::convert8BitTo16Bit(bmpData, (s16 *)image->getData(), header.Width, header.Height, paletteData, pitch, true); - break; - case 16: - image = new CImage(ECF_A1R5G5B5, dim); - if (image) - CColorConverter::convert16BitTo16Bit((s16 *)bmpData, (s16 *)image->getData(), header.Width, header.Height, pitch, true); - break; - case 24: - image = new CImage(ECF_R8G8B8, dim); - if (image) - CColorConverter::convert24BitTo24Bit(bmpData, (u8 *)image->getData(), header.Width, header.Height, pitch, true, true); - break; - case 32: // thx to Reinhard Ostermeier - image = new CImage(ECF_A8R8G8B8, dim); - if (image) - CColorConverter::convert32BitTo32Bit((s32 *)bmpData, (s32 *)image->getData(), header.Width, header.Height, pitch, true); - break; - }; - - // clean up - - delete[] paletteData; - delete[] bmpData; - - return image; -} - -//! creates a loader which is able to load windows bitmaps -IImageLoader *createImageLoaderBMP() -{ - return new CImageLoaderBMP; -} - -} // end namespace video -} // end namespace irr diff --git a/irr/src/CImageLoaderBMP.h b/irr/src/CImageLoaderBMP.h deleted file mode 100644 index e7ef8ed2b..000000000 --- a/irr/src/CImageLoaderBMP.h +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright (C) 2002-2012 Nikolaus Gebhardt -// This file is part of the "Irrlicht Engine". -// For conditions of distribution and use, see copyright notice in irrlicht.h - -#pragma once - -#include "IImageLoader.h" - -namespace irr -{ -namespace video -{ - -// byte-align structures -#include "irrpack.h" - -struct SBMPHeader -{ - u16 Id; // BM - Windows 3.1x, 95, NT, 98, 2000, ME, XP - // BA - OS/2 Bitmap Array - // CI - OS/2 Color Icon - // CP - OS/2 Color Pointer - // IC - OS/2 Icon - // PT - OS/2 Pointer - u32 FileSize; - u32 Reserved; - u32 BitmapDataOffset; - u32 BitmapHeaderSize; // should be 28h for windows bitmaps or - // 0Ch for OS/2 1.x or F0h for OS/2 2.x - u32 Width; - u32 Height; - u16 Planes; - u16 BPP; // 1: Monochrome bitmap - // 4: 16 color bitmap - // 8: 256 color bitmap - // 16: 16bit (high color) bitmap - // 24: 24bit (true color) bitmap - // 32: 32bit (true color) bitmap - - u32 Compression; // 0: none (Also identified by BI_RGB) - // 1: RLE 8-bit / pixel (Also identified by BI_RLE4) - // 2: RLE 4-bit / pixel (Also identified by BI_RLE8) - // 3: Bitfields (Also identified by BI_BITFIELDS) - - u32 BitmapDataSize; // Size of the bitmap data in bytes. This number must be rounded to the next 4 byte boundary. - u32 PixelPerMeterX; - u32 PixelPerMeterY; - u32 Colors; - u32 ImportantColors; -} PACK_STRUCT; - -// Default alignment -#include "irrunpack.h" - -/*! - Surface Loader for Windows bitmaps -*/ -class CImageLoaderBMP : public IImageLoader -{ -public: - //! constructor - CImageLoaderBMP(); - - //! returns true if the file maybe is able to be loaded by this class - //! based on the file extension (e.g. ".tga") - bool isALoadableFileExtension(const io::path &filename) const override; - - //! returns true if the file maybe is able to be loaded by this class - bool isALoadableFileFormat(io::IReadFile *file) const override; - - //! creates a surface from the file - IImage *loadImage(io::IReadFile *file) const override; - -private: - void decompress8BitRLE(u8 *&BmpData, s32 size, s32 width, s32 height, s32 pitch) const; - - void decompress4BitRLE(u8 *&BmpData, s32 size, s32 width, s32 height, s32 pitch) const; -}; - -} // end namespace video -} // end namespace irr diff --git a/irr/src/CMakeLists.txt b/irr/src/CMakeLists.txt index b95c3ef73..1fbfe5c9f 100644 --- a/irr/src/CMakeLists.txt +++ b/irr/src/CMakeLists.txt @@ -370,7 +370,6 @@ endif() set(IRRIMAGEOBJ CColorConverter.cpp CImage.cpp - CImageLoaderBMP.cpp CImageLoaderJPG.cpp CImageLoaderPNG.cpp CImageLoaderTGA.cpp diff --git a/irr/src/CNullDriver.cpp b/irr/src/CNullDriver.cpp index 74e8cb0f4..f17f6f454 100644 --- a/irr/src/CNullDriver.cpp +++ b/irr/src/CNullDriver.cpp @@ -22,9 +22,6 @@ namespace irr namespace video { -//! creates a loader which is able to load windows bitmaps -IImageLoader *createImageLoaderBMP(); - //! creates a loader which is able to load jpeg images IImageLoader *createImageLoaderJPG(); @@ -93,7 +90,6 @@ CNullDriver::CNullDriver(io::IFileSystem *io, const core::dimension2d &scre SurfaceLoader.push_back(video::createImageLoaderTGA()); SurfaceLoader.push_back(video::createImageLoaderPNG()); SurfaceLoader.push_back(video::createImageLoaderJPG()); - SurfaceLoader.push_back(video::createImageLoaderBMP()); SurfaceWriter.push_back(video::createImageWriterJPG()); SurfaceWriter.push_back(video::createImageWriterPNG()); diff --git a/src/client/client.cpp b/src/client/client.cpp index 6d42e7551..b308a9276 100644 --- a/src/client/client.cpp +++ b/src/client/client.cpp @@ -765,7 +765,7 @@ bool Client::loadMedia(const std::string &data, const std::string &filename, std::string name; const char *image_ext[] = { - ".png", ".jpg", ".bmp", ".tga", + ".png", ".jpg", ".tga", NULL }; name = removeStringEnd(filename, image_ext); diff --git a/src/client/texturepaths.cpp b/src/client/texturepaths.cpp index 960171859..f2efa6038 100644 --- a/src/client/texturepaths.cpp +++ b/src/client/texturepaths.cpp @@ -22,10 +22,8 @@ void clearTextureNameCache() // If failed, return "". std::string getImagePath(std::string_view path) { - // A NULL-ended list of possible image extensions - // (In newer C++ versions a fixed size array and ranges::subrange could be used - // or just modernise removeStringEnd.) - static const char *extensions[] = {".png", ".jpg", ".bmp", ".tga", nullptr}; + // possible image extensions + static const char *extensions[] = {".png", ".jpg", ".tga", nullptr}; // Remove present extension std::string_view stripped_path = removeStringEnd(path, extensions); diff --git a/src/server.cpp b/src/server.cpp index 46bc31ae7..a636364ed 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -2521,7 +2521,7 @@ bool Server::addMediaFile(const std::string &filename, } // If name is not in a supported format, ignore it const char *supported_ext[] = { - ".png", ".jpg", ".bmp", ".tga", + ".png", ".jpg", ".tga", ".ogg", ".x", ".b3d", ".obj", ".gltf", ".glb", // Translation file formats @@ -2547,13 +2547,6 @@ bool Server::addMediaFile(const std::string &filename, return false; } - const char *deprecated_ext[] = { ".bmp", nullptr }; - if (!removeStringEnd(filename, deprecated_ext).empty()) - { - warningstream << "Media file \"" << filename << "\" is using a" - " deprecated format and will stop working in the future." << std::endl; - } - SHA1 sha1; sha1.addBytes(filedata); From 3c42cc868467e683b1d79852d30fa9966fed2a69 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Fri, 8 Nov 2024 12:08:48 +0100 Subject: [PATCH 174/178] Revive texture download code and fix it on GLES --- irr/include/ITexture.h | 4 +--- irr/src/COpenGLCoreTexture.h | 34 +++++++++++++++------------------- 2 files changed, 16 insertions(+), 22 deletions(-) diff --git a/irr/include/ITexture.h b/irr/include/ITexture.h index 533271b39..64b42ee54 100644 --- a/irr/include/ITexture.h +++ b/irr/include/ITexture.h @@ -74,9 +74,7 @@ enum E_TEXTURE_CREATION_FLAG //! Allow the driver to keep a copy of the texture in memory /** Enabling this makes calls to ITexture::lock a lot faster, but costs main memory. - Currently only used in combination with OpenGL drivers. - NOTE: Disabling this does not yet work correctly with alpha-textures. - So the default is on for now (but might change with Irrlicht 1.9 if we get the alpha-troubles fixed). + This is enabled by default. */ ETCF_ALLOW_MEMORY_COPY = 0x00000080, diff --git a/irr/src/COpenGLCoreTexture.h b/irr/src/COpenGLCoreTexture.h index 86ed4f73a..35c8f472a 100644 --- a/irr/src/COpenGLCoreTexture.h +++ b/irr/src/COpenGLCoreTexture.h @@ -261,7 +261,14 @@ public: if (LockImage && mode != ETLM_WRITE_ONLY) { bool passed = true; -#ifdef IRR_COMPILE_GL_COMMON +#ifdef IRR_COMPILE_GL_COMMON // legacy driver + constexpr bool use_gl_impl = true; +#else + const bool use_gl_impl = Driver->Version.Spec != OpenGLSpec::ES; +#endif + + if (use_gl_impl) { + IImage *tmpImage = LockImage; // not sure yet if the size required by glGetTexImage is always correct, if not we might have to allocate a different tmpImage and convert colors later on. Driver->getCacheHandler()->getTextureCache().set(0, this); @@ -296,38 +303,26 @@ public: delete[] tmpBuffer; } -#elif defined(IRR_COMPILE_GLES2_COMMON) - // TODO: revive this code - COpenGLCoreTexture *tmpTexture = new COpenGLCoreTexture("OGL_CORE_LOCK_TEXTURE", Size, ETT_2D, ColorFormat, Driver); + + } else { GLuint tmpFBO = 0; Driver->irrGlGenFramebuffers(1, &tmpFBO); - GLint prevViewportX = 0; - GLint prevViewportY = 0; - GLsizei prevViewportWidth = 0; - GLsizei prevViewportHeight = 0; - Driver->getCacheHandler()->getViewport(prevViewportX, prevViewportY, prevViewportWidth, prevViewportHeight); - Driver->getCacheHandler()->setViewport(0, 0, Size.Width, Size.Height); - GLuint prevFBO = 0; Driver->getCacheHandler()->getFBO(prevFBO); Driver->getCacheHandler()->setFBO(tmpFBO); - Driver->irrGlFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tmpTexture->getOpenGLTextureName(), 0); - - GL.Clear(GL_COLOR_BUFFER_BIT); - - Driver->draw2DImage(this, layer, true); + Driver->irrGlFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, getOpenGLTextureName(), 0); IImage *tmpImage = Driver->createImage(ECF_A8R8G8B8, Size); GL.ReadPixels(0, 0, Size.Width, Size.Height, GL_RGBA, GL_UNSIGNED_BYTE, tmpImage->getData()); + Driver->irrGlFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 0, 0); + Driver->getCacheHandler()->setFBO(prevFBO); - Driver->getCacheHandler()->setViewport(prevViewportX, prevViewportY, prevViewportWidth, prevViewportHeight); Driver->irrGlDeleteFramebuffers(1, &tmpFBO); - delete tmpTexture; void *src = tmpImage->getData(); void *dest = LockImage->getData(); @@ -350,7 +345,8 @@ public: break; } tmpImage->drop(); -#endif + + } if (!passed) { LockImage->drop(); From 4aae31ad5e093308d10bbc956f42a6bfe98e516d Mon Sep 17 00:00:00 2001 From: sfan5 Date: Fri, 8 Nov 2024 12:27:51 +0100 Subject: [PATCH 175/178] Add support for ECF_D24 texture format and prefer it over D32 for our depth buffer, this can have performance benefits --- irr/include/IImage.h | 3 +++ irr/include/SColor.h | 4 ++++ irr/src/OpenGL3/Driver.cpp | 1 + irr/src/OpenGLES2/Driver.cpp | 1 + src/client/render/plain.cpp | 4 ++-- src/client/render/secondstage.cpp | 4 ++++ 6 files changed, 15 insertions(+), 2 deletions(-) diff --git a/irr/include/IImage.h b/irr/include/IImage.h index f3c29b71d..47349ed1a 100644 --- a/irr/include/IImage.h +++ b/irr/include/IImage.h @@ -328,6 +328,8 @@ public: return 32; case ECF_D16: return 16; + case ECF_D24: + return 32; case ECF_D32: return 32; case ECF_D24S8: @@ -378,6 +380,7 @@ public: { switch (format) { case ECF_D16: + case ECF_D24: case ECF_D32: case ECF_D24S8: return true; diff --git a/irr/include/SColor.h b/irr/include/SColor.h index 284ab3351..a2dd52603 100644 --- a/irr/include/SColor.h +++ b/irr/include/SColor.h @@ -77,6 +77,9 @@ enum ECOLOR_FORMAT //! 16 bit format using 16 bits for depth. ECF_D16, + //! 32 bit(?) format using 24 bits for depth. + ECF_D24, + //! 32 bit format using 32 bits for depth. ECF_D32, @@ -104,6 +107,7 @@ const c8 *const ColorFormatNames[ECF_UNKNOWN + 2] = { "R16", "R16G16", "D16", + "D24", "D32", "D24S8", "UNKNOWN", diff --git a/irr/src/OpenGL3/Driver.cpp b/irr/src/OpenGL3/Driver.cpp index 53cb8c7ed..a58e1542f 100644 --- a/irr/src/OpenGL3/Driver.cpp +++ b/irr/src/OpenGL3/Driver.cpp @@ -59,6 +59,7 @@ void COpenGL3Driver::initFeatures() TextureFormats[ECF_R16] = {GL_R16, GL_RED, GL_UNSIGNED_SHORT}; TextureFormats[ECF_R16G16] = {GL_RG16, GL_RG, GL_UNSIGNED_SHORT}; TextureFormats[ECF_D16] = {GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT}; + TextureFormats[ECF_D24] = {GL_DEPTH_COMPONENT24, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT}; TextureFormats[ECF_D32] = {GL_DEPTH_COMPONENT32, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT}; // WARNING: may not be renderable (?!) TextureFormats[ECF_D24S8] = {GL_DEPTH24_STENCIL8, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8}; diff --git a/irr/src/OpenGLES2/Driver.cpp b/irr/src/OpenGLES2/Driver.cpp index 9a99601fd..e423abb2e 100644 --- a/irr/src/OpenGLES2/Driver.cpp +++ b/irr/src/OpenGLES2/Driver.cpp @@ -50,6 +50,7 @@ void COpenGLES2Driver::initFeatures() TextureFormats[ECF_R8] = {GL_R8, GL_RED, GL_UNSIGNED_BYTE}; TextureFormats[ECF_R8G8] = {GL_RG8, GL_RG, GL_UNSIGNED_BYTE}; TextureFormats[ECF_D16] = {GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT}; + TextureFormats[ECF_D24] = {GL_DEPTH_COMPONENT24, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT}; TextureFormats[ECF_D24S8] = {GL_DEPTH24_STENCIL8, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8}; if (FeatureAvailable[IRR_GL_EXT_texture_format_BGRA8888]) diff --git a/src/client/render/plain.cpp b/src/client/render/plain.cpp index 22b167518..fd3e0b9ba 100644 --- a/src/client/render/plain.cpp +++ b/src/client/render/plain.cpp @@ -162,8 +162,8 @@ video::ECOLOR_FORMAT selectColorFormat(video::IVideoDriver *driver) video::ECOLOR_FORMAT selectDepthFormat(video::IVideoDriver *driver) { - if (driver->queryTextureFormat(video::ECF_D32)) - return video::ECF_D32; + if (driver->queryTextureFormat(video::ECF_D24)) + return video::ECF_D24; if (driver->queryTextureFormat(video::ECF_D24S8)) return video::ECF_D24S8; return video::ECF_D16; // fallback depth format diff --git a/src/client/render/secondstage.cpp b/src/client/render/secondstage.cpp index 212074535..26ce6888e 100644 --- a/src/client/render/secondstage.cpp +++ b/src/client/render/secondstage.cpp @@ -90,6 +90,10 @@ RenderStep *addPostProcessing(RenderPipeline *pipeline, RenderStep *previousStep video::ECOLOR_FORMAT color_format = selectColorFormat(driver); video::ECOLOR_FORMAT depth_format = selectDepthFormat(driver); + verbosestream << "addPostProcessing(): color = " + << video::ColorFormatNames[color_format] << " depth = " + << video::ColorFormatNames[depth_format] << std::endl; + // init post-processing buffer static const u8 TEXTURE_COLOR = 0; static const u8 TEXTURE_DEPTH = 1; From 58ccf0ba82212bfe923f001057d02c2331a2f10a Mon Sep 17 00:00:00 2001 From: sfan5 Date: Fri, 8 Nov 2024 13:15:20 +0100 Subject: [PATCH 176/178] Fix some smaller issues with texture/image handling --- irr/include/ITexture.h | 2 +- src/client/minimap.cpp | 10 +++---- src/client/render/interlaced.cpp | 4 +-- src/client/sky.cpp | 46 +++++++++++++++++++---------- src/client/sky.h | 9 +++--- src/irrlicht_changes/CGUITTFont.cpp | 1 + 6 files changed, 44 insertions(+), 28 deletions(-) diff --git a/irr/include/ITexture.h b/irr/include/ITexture.h index 64b42ee54..6cbf64bd3 100644 --- a/irr/include/ITexture.h +++ b/irr/include/ITexture.h @@ -182,7 +182,7 @@ public: //! Lock function. /** Locks the Texture and returns a pointer to access the pixels. After lock() has been called and all operations on the pixels - are done, you must call unlock(). + are done, you must call unlock(). Afterwards the pointer becomes invalid. Locks are not accumulating, hence one unlock will do for an arbitrary number of previous locks. You should avoid locking different levels without unlocking in between, though, because only the last level locked will be diff --git a/src/client/minimap.cpp b/src/client/minimap.cpp index f28f6a39a..b11d8b345 100644 --- a/src/client/minimap.cpp +++ b/src/client/minimap.cpp @@ -474,17 +474,15 @@ video::ITexture *Minimap::getMinimapTexture() blitMinimapPixelsToImageRadar(map_image); break; case MINIMAP_TYPE_TEXTURE: - // Want to use texture source, to : 1 find texture, 2 cache it + // FIXME: this is a pointless roundtrip through the gpu video::ITexture* texture = m_tsrc->getTexture(data->mode.texture); video::IImage* image = driver->createImageFromData( - texture->getColorFormat(), texture->getSize(), - texture->lock(video::ETLM_READ_ONLY), true, false); - texture->unlock(); + texture->getColorFormat(), texture->getSize(), + texture->lock(video::ETLM_READ_ONLY), true, false); auto dim = image->getDimension(); map_image->fill(video::SColor(255, 0, 0, 0)); - image->copyTo(map_image, irr::core::vector2d { ((data->mode.map_size - (static_cast(dim.Width))) >> 1) @@ -492,7 +490,9 @@ video::ITexture *Minimap::getMinimapTexture() ((data->mode.map_size - (static_cast(dim.Height))) >> 1) + data->pos.Z / data->mode.scale }); + image->drop(); + texture->unlock(); } map_image->copyToScaling(minimap_image); diff --git a/src/client/render/interlaced.cpp b/src/client/render/interlaced.cpp index 7399d9242..f56d8a3d9 100644 --- a/src/client/render/interlaced.cpp +++ b/src/client/render/interlaced.cpp @@ -24,7 +24,7 @@ void InitInterlacedMaskStep::run(PipelineContext &context) last_mask = mask; auto size = mask->getSize(); - u8 *data = reinterpret_cast(mask->lock()); + u8 *data = reinterpret_cast(mask->lock(video::ETLM_WRITE_ONLY)); for (u32 j = 0; j < size.Height; j++) { u8 val = j % 2 ? 0xff : 0x00; memset(data, val, 4 * size.Width); @@ -74,4 +74,4 @@ void populateInterlacedPipeline(RenderPipeline *pipeline, Client *client) merge->setRenderSource(buffer); merge->setRenderTarget(pipeline->createOwned()); pipeline->addStep(); -} \ No newline at end of file +} diff --git a/src/client/sky.cpp b/src/client/sky.cpp index cfce57ef3..8da7fc68e 100644 --- a/src/client/sky.cpp +++ b/src/client/sky.cpp @@ -145,21 +145,15 @@ void Sky::render() float offset = (1.0 - fabs(sin((m_time_of_day - 0.5) * irr::core::PI))) * 511; if (m_sun_tonemap) { - u8 * texels = (u8 *)m_sun_tonemap->lock(); - video::SColor* texel = (video::SColor *)(texels + (u32)offset * 4); - video::SColor texel_color (255, texel->getRed(), - texel->getGreen(), texel->getBlue()); - m_sun_tonemap->unlock(); + auto texel_color = m_sun_tonemap->getPixel(offset, 0); + texel_color.setAlpha(255); // Only accessed by our code later, not used by a shader m_materials[3].ColorParam = texel_color; } if (m_moon_tonemap) { - u8 * texels = (u8 *)m_moon_tonemap->lock(); - video::SColor* texel = (video::SColor *)(texels + (u32)offset * 4); - video::SColor texel_color (255, texel->getRed(), - texel->getGreen(), texel->getBlue()); - m_moon_tonemap->unlock(); + auto texel_color = m_moon_tonemap->getPixel(offset, 0); + texel_color.setAlpha(255); // Only accessed by our code later, not used by a shader m_materials[4].ColorParam = texel_color; } @@ -711,14 +705,33 @@ void Sky::place_sky_body( } } +// FIXME: stupid helper that does a pointless texture upload/download +static void getTextureAsImage(video::IImage *&dst, const std::string &name, ITextureSource *tsrc) +{ + if (dst) { + dst->drop(); + dst = nullptr; + } + if (tsrc->isKnownSourceImage(name)) { + auto *texture = tsrc->getTexture(name); + assert(texture); + auto *driver = RenderingEngine::get_video_driver(); + dst = driver->createImageFromData( + texture->getColorFormat(), texture->getSize(), + texture->lock(video::ETLM_READ_ONLY)); + texture->unlock(); + } +} + void Sky::setSunTexture(const std::string &sun_texture, const std::string &sun_tonemap, ITextureSource *tsrc) { // Ignore matching textures (with modifiers) entirely, // but lets at least update the tonemap before hand. - m_sun_params.tonemap = sun_tonemap; - m_sun_tonemap = tsrc->isKnownSourceImage(sun_tonemap) ? - tsrc->getTexture(sun_tonemap) : nullptr; + if (m_sun_params.tonemap != sun_tonemap) { + m_sun_params.tonemap = sun_tonemap; + getTextureAsImage(m_sun_tonemap, sun_tonemap, tsrc); + } if (m_sun_params.texture == sun_texture && !m_first_update) return; @@ -758,9 +771,10 @@ void Sky::setMoonTexture(const std::string &moon_texture, { // Ignore matching textures (with modifiers) entirely, // but lets at least update the tonemap before hand. - m_moon_params.tonemap = moon_tonemap; - m_moon_tonemap = tsrc->isKnownSourceImage(moon_tonemap) ? - tsrc->getTexture(moon_tonemap) : nullptr; + if (m_moon_params.tonemap != moon_tonemap) { + m_moon_params.tonemap = moon_tonemap; + getTextureAsImage(m_moon_tonemap, moon_tonemap, tsrc); + } if (m_moon_params.texture == moon_texture && !m_first_update) return; diff --git a/src/client/sky.h b/src/client/sky.h index 73f377ae2..0ba3ee62c 100644 --- a/src/client/sky.h +++ b/src/client/sky.h @@ -17,6 +17,7 @@ namespace irr::video { class IVideoDriver; + class IImage; } class IShaderSource; @@ -200,10 +201,10 @@ private: u64 m_seed = 0; irr_ptr m_stars; - video::ITexture *m_sun_texture; - video::ITexture *m_moon_texture; - video::ITexture *m_sun_tonemap; - video::ITexture *m_moon_tonemap; + video::ITexture *m_sun_texture = nullptr; + video::ITexture *m_moon_texture = nullptr; + video::IImage *m_sun_tonemap = nullptr; + video::IImage *m_moon_tonemap = nullptr; void updateStars(); diff --git a/src/irrlicht_changes/CGUITTFont.cpp b/src/irrlicht_changes/CGUITTFont.cpp index ee5ec6b35..8337390c1 100644 --- a/src/irrlicht_changes/CGUITTFont.cpp +++ b/src/irrlicht_changes/CGUITTFont.cpp @@ -1020,6 +1020,7 @@ video::IImage* CGUITTFont::createTextureFromChar(const char32_t& ch) pageholder->copyTo(image, core::position2di(0, 0), glyph.source_rect); tex->unlock(); + pageholder->drop(); return image; } From cc8c3d501c6cacf86501900b74e2a666d8d33ab0 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Fri, 8 Nov 2024 13:20:02 +0100 Subject: [PATCH 177/178] Don't keep a copy of all texture images around --- irr/include/ITexture.h | 2 +- irr/src/CNullDriver.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/irr/include/ITexture.h b/irr/include/ITexture.h index 6cbf64bd3..8760c9f2a 100644 --- a/irr/include/ITexture.h +++ b/irr/include/ITexture.h @@ -74,7 +74,7 @@ enum E_TEXTURE_CREATION_FLAG //! Allow the driver to keep a copy of the texture in memory /** Enabling this makes calls to ITexture::lock a lot faster, but costs main memory. - This is enabled by default. + This is disabled by default. */ ETCF_ALLOW_MEMORY_COPY = 0x00000080, diff --git a/irr/src/CNullDriver.cpp b/irr/src/CNullDriver.cpp index f17f6f454..46a2d9f7b 100644 --- a/irr/src/CNullDriver.cpp +++ b/irr/src/CNullDriver.cpp @@ -76,7 +76,7 @@ CNullDriver::CNullDriver(io::IFileSystem *io, const core::dimension2d &scre setTextureCreationFlag(ETCF_ALWAYS_32_BIT, true); setTextureCreationFlag(ETCF_CREATE_MIP_MAPS, true); setTextureCreationFlag(ETCF_AUTO_GENERATE_MIP_MAPS, true); - setTextureCreationFlag(ETCF_ALLOW_MEMORY_COPY, true); + setTextureCreationFlag(ETCF_ALLOW_MEMORY_COPY, false); ViewPort = core::rect(core::position2d(0, 0), core::dimension2di(screenSize)); From 8d2e7703619205dd76ee9cc12fb0b660868c910b Mon Sep 17 00:00:00 2001 From: sfan5 Date: Fri, 15 Nov 2024 13:37:16 +0100 Subject: [PATCH 178/178] Minor corrections in gl3/gles2 drivers --- irr/src/CNullDriver.cpp | 7 ++++--- irr/src/OpenGL/Driver.cpp | 14 +++----------- irr/src/OpenGL/MaterialRenderer.cpp | 2 +- irr/src/OpenGL3/Driver.cpp | 14 +++++++++----- irr/src/OpenGLES2/Driver.cpp | 18 ++++++++++++++---- 5 files changed, 31 insertions(+), 24 deletions(-) diff --git a/irr/src/CNullDriver.cpp b/irr/src/CNullDriver.cpp index 46a2d9f7b..acce8383b 100644 --- a/irr/src/CNullDriver.cpp +++ b/irr/src/CNullDriver.cpp @@ -936,9 +936,10 @@ void CNullDriver::setTextureCreationFlag(E_TEXTURE_CREATION_FLAG flag, bool enab setTextureCreationFlag(ETCF_OPTIMIZED_FOR_SPEED, false); } - // set flag - TextureCreationFlags = (TextureCreationFlags & (~flag)) | - ((((u32)!enabled) - 1) & flag); + if (enabled) + TextureCreationFlags |= flag; + else + TextureCreationFlags &= ~flag; } //! Returns if a texture creation flag is enabled or disabled. diff --git a/irr/src/OpenGL/Driver.cpp b/irr/src/OpenGL/Driver.cpp index 4f3ac627a..4b85b1345 100644 --- a/irr/src/OpenGL/Driver.cpp +++ b/irr/src/OpenGL/Driver.cpp @@ -144,7 +144,7 @@ void COpenGL3DriverBase::debugCb(GLenum source, GLenum type, GLuint id, GLenum s ll = ELL_ERROR; else if (severity == GL_DEBUG_SEVERITY_MEDIUM) ll = ELL_WARNING; - char buf[256]; + char buf[300]; snprintf_irr(buf, sizeof(buf), "%04x %04x %.*s", source, type, length, message); os::Printer::log("GL", buf, ll); } @@ -700,15 +700,7 @@ void COpenGL3DriverBase::drawVertexPrimitiveList(const void *vertices, u32 verte break; } case (EIT_32BIT): { -#ifdef GL_OES_element_index_uint -#ifndef GL_UNSIGNED_INT -#define GL_UNSIGNED_INT 0x1405 -#endif - if (FeatureAvailable[COGLESCoreExtensionHandler::IRR_GL_OES_element_index_uint]) - indexSize = GL_UNSIGNED_INT; - else -#endif - indexSize = GL_UNSIGNED_SHORT; + indexSize = GL_UNSIGNED_INT; break; } } @@ -1683,7 +1675,7 @@ ITexture *COpenGL3DriverBase::addRenderTargetTextureCubemap(const irr::u32 sideL //! Returns the maximum amount of primitives u32 COpenGL3DriverBase::getMaximalPrimitiveCount() const { - return 65535; + return Version.Spec == OpenGLSpec::ES ? 65535 : 0x7fffffff; } bool COpenGL3DriverBase::setRenderTargetEx(IRenderTarget *target, u16 clearFlag, SColor clearColor, f32 clearDepth, u8 clearStencil) diff --git a/irr/src/OpenGL/MaterialRenderer.cpp b/irr/src/OpenGL/MaterialRenderer.cpp index 3c32ba318..d5bf9004a 100644 --- a/irr/src/OpenGL/MaterialRenderer.cpp +++ b/irr/src/OpenGL/MaterialRenderer.cpp @@ -411,7 +411,7 @@ bool COpenGL3MaterialRenderer::setPixelShaderConstant(s32 index, const s32 *ints bool COpenGL3MaterialRenderer::setPixelShaderConstant(s32 index, const u32 *ints, int count) { - os::Printer::log("Unsigned int support needs at least GLES 3.0", ELL_WARNING); + os::Printer::log("Unsigned int support is unimplemented", ELL_WARNING); return false; } diff --git a/irr/src/OpenGL3/Driver.cpp b/irr/src/OpenGL3/Driver.cpp index a58e1542f..ac0816445 100644 --- a/irr/src/OpenGL3/Driver.cpp +++ b/irr/src/OpenGL3/Driver.cpp @@ -4,6 +4,7 @@ #include "Driver.h" #include +#include #include "mt_opengl.h" namespace irr @@ -18,7 +19,7 @@ E_DRIVER_TYPE COpenGL3Driver::getDriverType() const OpenGLVersion COpenGL3Driver::getVersionFromOpenGL() const { - GLint major, minor, profile; + GLint major = 0, minor = 0, profile = 0; GL.GetIntegerv(GL_MAJOR_VERSION, &major); GL.GetIntegerv(GL_MINOR_VERSION, &minor); GL.GetIntegerv(GL_CONTEXT_PROFILE_MASK, &profile); @@ -35,18 +36,21 @@ OpenGLVersion COpenGL3Driver::getVersionFromOpenGL() const void COpenGL3Driver::initFeatures() { if (Version.Spec != OpenGLSpec::Compat) { - os::Printer::log("OpenGL 3 driver requires Compatibility Mode", ELL_ERROR); - throw std::exception(); + auto msg = "OpenGL 3 driver requires Compatibility context"; + os::Printer::log(msg, ELL_ERROR); + throw std::runtime_error(msg); } if (!isVersionAtLeast(3, 2)) { - os::Printer::log("OpenGL 3 driver requires OpenGL >= 3.2 ", ELL_ERROR); - throw std::exception(); + auto msg = "OpenGL 3 driver requires OpenGL >= 3.2"; + os::Printer::log(msg, ELL_ERROR); + throw std::runtime_error(msg); } initExtensions(); TextureFormats[ECF_A1R5G5B5] = {GL_RGB5_A1, GL_BGRA, GL_UNSIGNED_SHORT_1_5_5_5_REV}; // WARNING: may not be renderable TextureFormats[ECF_R5G6B5] = {GL_RGB, GL_RGB, GL_UNSIGNED_SHORT_5_6_5}; // GL_RGB565 is an extension until 4.1 TextureFormats[ECF_R8G8B8] = {GL_RGB8, GL_RGB, GL_UNSIGNED_BYTE}; // WARNING: may not be renderable + // FIXME: shouldn't this simply be GL_UNSIGNED_BYTE? TextureFormats[ECF_A8R8G8B8] = {GL_RGBA8, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV}; TextureFormats[ECF_R16F] = {GL_R16F, GL_RED, GL_HALF_FLOAT}; TextureFormats[ECF_G16R16F] = {GL_RG16F, GL_RG, GL_HALF_FLOAT}; diff --git a/irr/src/OpenGLES2/Driver.cpp b/irr/src/OpenGLES2/Driver.cpp index e423abb2e..430be736d 100644 --- a/irr/src/OpenGLES2/Driver.cpp +++ b/irr/src/OpenGLES2/Driver.cpp @@ -3,8 +3,10 @@ // For conditions of distribution and use, see copyright notice in Irrlicht.h #include "Driver.h" +#include #include -#include +#include "mt_opengl.h" +#include "CColorConverter.h" namespace irr { @@ -19,7 +21,7 @@ E_DRIVER_TYPE COpenGLES2Driver::getDriverType() const OpenGLVersion COpenGLES2Driver::getVersionFromOpenGL() const { auto version_string = reinterpret_cast(GL.GetString(GL_VERSION)); - int major, minor; + int major = 0, minor = 0; if (sscanf(version_string, "OpenGL ES %d.%d", &major, &minor) != 2) { os::Printer::log("Failed to parse OpenGL ES version string", version_string, ELL_ERROR); return {OpenGLSpec::ES, 0, 0, 0}; @@ -29,8 +31,16 @@ OpenGLVersion COpenGLES2Driver::getVersionFromOpenGL() const void COpenGLES2Driver::initFeatures() { - assert(Version.Spec == OpenGLSpec::ES); - assert(Version.Major >= 2); + if (Version.Spec != OpenGLSpec::ES) { + auto msg = "Context isn't OpenGL ES"; + os::Printer::log(msg, ELL_ERROR); + throw std::runtime_error(msg); + } + if (!isVersionAtLeast(2, 0)) { + auto msg = "Open GL ES 2.0 is required"; + os::Printer::log(msg, ELL_ERROR); + throw std::runtime_error(msg); + } initExtensions(); static const GLenum BGRA8_EXT = 0x93A1;